سؤال هل يمكنني إعادة تعيين مفتاح Caps Lock لتشغيل الصوت؟


أحاول إعادة استخدام مفتاح Caps Lock غير المجدي لشيء مفيد في 16.04 MATE. لقد جئت عبر

setxkbmap -option ctrl:nocaps

لتعطيله ، ولكن يمكن إعادة تعيينه لتشغيل / إيقاف مؤقت VLC على سبيل المثال؟ شكرا لإجاباتك!


15
2018-05-29 18:25


الأصل


لا أعتقد أن هذا سيعمل .... لعدد من الأسباب ... على سبيل المثال ، أعتقد أن لينكس يعامل capslock باعتباره التعديل وليس مفتاح منفصل. من المحتمل أن يكون هذا هو السبب في أنك لا تستطيع ربطه في VLC. أيضا ، إذا قمت بإلغاء تنشيطه ، يتم إلغاء تنشيطه. ولكن يمكنك اللعب على سطر الأوامر ومحاولة ربطه vlc --key-play-pause <key-string>، ولكن لم أجد سلسلة VLC تقبل كـ capslock ... - Robert Riedl
أنا ركبت dconf-editor حاول عدة أشياء ، تثبيت xdotool حاول بضعة أشياء وأخيرا xbindkeys وحاولت بضعة أشياء. في نهاية هذا التمرين العقيم ، تم كسر زر التشغيل / إيقاف التشغيل الخاص بلوحة المفاتيح ، كما أن زر التشغيل / الإيقاف المؤقت الخاص بي كان لونه رماديًا ولن يتم تشغيل الموسيقى. أنا فعلت هذا في 16.04 حتى إعادة تمهيد في 18.04 لتأكيد كل شيء لا يزال يعمل وكان الخارقة البرمجيات التي فعلت ذلك. النعمة الوحيدة هي أن أعزف الموسيقى فقط من خلال هاتف Android وليس جهاز الكمبيوتر. ما عليك سوى أن تتنبه للآخرين كي يتوخوا الحذر وتوثّقوا ما تفعله على جهازك بشكل أفضل مني. - WinEunuuchs2Unix
تضمين التغريدة ردًا علىpbhj تمكنت بطريقة ما من الحصول على تشغيل / إيقاف العمل مؤقتًا مرة أخرى باستخدام زر الشاشة وزر تشغيل / إيقاف تشغيل لوحة المفاتيح في Ubuntu 16.04. أردت فقط أن أحذر الناس من المزالق المحتملة التي تجرّب أدوات مساعدة لوحة المفاتيح منخفضة المستوى هذه. - WinEunuuchs2Unix
2BFrank: تأكد من قبول أحد الإجابات إذا كان يحل مشكلتك. بما أن هناك مكافأة على هذا السؤال ، فإن ترك الإجابة غير المقبولة (وليس منح الجوائز يدويًا) لن يمنح سوى نصف فضلSebastian Stark ، لأن إجابته هي أعلى الأصوات. - Nonny Moose
تضمين التغريدة ردًا علىNonnyMoose كنت سأتركه ليأخذه تلقائيًا إلى الإجابة المقبولة أو أعلى الأصوات ، لكنني لم أعلم أنها خفضت الجائزة ، لذا سأمنحها يدويًا لأعلى مجموع تصويت في حوالي ساعتين إذا لا يتم قبول إجابة. - Chai T. Rex


الأجوبة:


evtest و dbus

هنا هو إصدار يتضمن برنامج نصي صغير يعمل في الخلفية. يجب اتخاذ بعض الخطوات السهلة:

  • تحميل هذا evtest برنامج: sudo apt install evtest. هذا البرنامج قادر على فك وطباعة الأحداث الخام من /dev/input/ التسلسل الهرمي للأجهزة.

  • قم بإضافة حساب المستخدم الخاص بك إلى المجموعة input. تسجيل الخروج وتسجيل الدخول مرة أخرى. (هذا ضروري لأننا سنقرأ من بعض الأجهزة تحت /dev/input/، والتي عادة لا يمكن تنفيذها إلا من خلال الجذر أو المستخدمين في المجموعة input. يمكننا تشغيل البرنامج النصي كجذر ، ولكن بعد ذلك سيكون علينا العثور على طريقة لإخباره عن مثيل dbus المستخدم الذي يحتاج إلى التحدث إليه.)

  • قم بتعطيل مفتاح capslock كما فعلت أو استخدم تفضيل Mate المقابل. ستعمل أيضًا إذا قمت بتعيين مفتاح capslock للتحكم ، مثلما يفعل العديد من الأشخاص.

  • تخزين البرنامج النصي التالي في مكان ما ، ه. ز. $HOME/bin/capshack وجعلها قابلة للتنفيذ:

    #!/bin/bash
    
    KEYBOARD=/dev/input/by-path/platform-i8042-serio-0-event-kbd
    EVENT="type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 1"
    
    toggleVLC () {
            dbus-send \
                --type=method_call \
                --dest=org.mpris.MediaPlayer2.vlc \
                /org/mpris/MediaPlayer2 \
                org.mpris.MediaPlayer2.Player.PlayPause
    }
    
    evtest "$KEYBOARD" | \
    while read line
    do
        if [[ "$line" == *"$EVENT" ]]
        then
            toggleVLC
        fi
    done
    

البرنامج النصي أعلاه سوف يستمع إلى أحداث لوحة المفاتيح الخاصة بك وتنفيذ أمر عند الضغط على مفتاح capslock. يستخدم الأمر الذي يتم تشغيله dbus لإرسال حدث تشغيل / إيقاف مؤقت إلى مثيل VLC قيد التشغيل. قد تضطر إلى قرص KEYBOARD متغير للإشارة إلى لوحة المفاتيح الفعلية ، ولكن من المرجح أن تعمل القيمة المذكورة أعلاه.

إذا كنت تفضل استدعاء الدالة toggleVLC () عندما تكون إطلاق سراح مفتاح capslock ، يمكنك تغيير EVENT متغير في البرنامج النصي بحيث ينتهي مع value 0 بدلا من value 1.

أيضا ، فمن الممكن بالنسبة لك مفتاح رمز مفتاح capslock يختلف عن 58. يمكنك التحقق من ذلك عن طريق تشغيل evtest، انظر إلى الإخراج عندما تضغط على capslock ، واضبط متغير EVENT وفقًا لذلك. ليس عليك حتى أن تتطابق مع رمز المفتاح وتعيين EVENT ببساطة (KEY_CAPSLOCK), value 1.

بدلا من استخدام evtest وفوق البرنامج النصي يمكنك استخدام thd من حزمة triggerhappy (شيء مثل thd --dump /dev/input/* يعطي نتائج مماثلة) ولكن وجدت أن أقل قليلا التعليمية.

الآن نقوم بإنشاء وحدة systemd للمستخدم لبدء البرنامج النصي تلقائيًا في الخلفية:

  • إنشاء التسلسل الهرمي systemd للمستخدم: mkdir -p $HOME/.config/systemd/user

  • أضف النص التالي إلى الملف $HOME/.config/systemd/user/capshack.service

    [Unit]
    Description=Abuse capslock key
    
    [Service]
    ExecStart=%h/bin/capshack
    
    [Install]
    WantedBy=default.target
    
  • مكّن وحدة الخدمة التي أنشأتها للتو: systemctl --user enable capshack

  • بدء الخدمة: systemctl --user start capshack

من الآن فصاعدًا ، سيكون بإمكانك تبديل التشغيل / الإيقاف المؤقت في VLC باستخدام مفتاح capslock. يجب تشغيل البرنامج النصي للخلفية تلقائيًا عند تسجيل الدخول.

يؤدي سعيدة

كما ذكر من قبل ، يمكنك أيضًا استخدام حزمة triggerhappy للقيام بذلك. هذه هي الطريقة المفضلة للأشخاص الذين يرغبون في العزف بشكل أقل مع النظام وبدلاً من ذلك مثل حل أكثر صلابة.

  • إضافة مستخدم إلى input مجموعة مثل أعلاه

  • قم بتثبيت الحزمة: sudo apt install triggerhappy

  • أضف توصيفًا لـ triggerhappy ~/.config/thd/capslock.conf:

    KEY_CAPSLOCK    1   dbus-send --type=method_call --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
    
  • تشغيل مثل هذا: thd --triggers ~/.config/thd/capslock.conf /dev/input/event*

  • جعل المدى thd لمستخدمك بطريقة مماثلة كما هو موضح ل capshack بالفعل.

  • تأكد من أن لديك واحدًا فقط من الطرق المذكورة (capshack أو thd) قيد التشغيل ، حتى لا تضاعف أي مفتاح يضغط عليه كل مفتاح.

اختبرت كل هذا في 18.04 تحت الجلسة القياسية و 16.04. ولكن يجب أن تعمل من الناحية النظرية في إطار الطريق أو مع بيئات سطح المكتب الأخرى.


11
2018-06-16 00:43



@ WinEunuuchs2Unix شكرا على ذكرها. أنا شخصياً أفضل الأسلوب الأكثر تطابقاً للفقرة الكاملة إذا / ثم / آخر: إنه أكثر وضوحاً ، إنه من الأسهل التوسع ولا يميل إلى جعل الخطوط طويلة جداً. على الرغم من أنه في هذه الحالة لا يهم كثيرا حقا. - Sebastian Stark
أنا أتفق حول خطوط طويلة جدا. مؤخرا أنا تكييف نمط الترميز إلى خطين مع السطر الأول [[ test ]] && \  والخط الثاني محاط بمسافات أربعة مع <command> لتشغيل اختبار إيجابي. أوافق بكل قلب على قابلية القراءة لأن توصيتي غريبة على معظم لغات البرمجة. - WinEunuuchs2Unix
هذا عظيم ! على الرغم من أنني أعتقد أنه يبدو triggerhappy يجب أن يكون الطريق للذهاب ، منذ ذلك الحين evtest هو في الواقع برنامج التصحيح :) - Robert Riedl
نعم ، تفعليه للتعلم ، للقيام :) - Sebastian Stark
... بالنسبة لي على أي حال ، كود المفتاح 58 هو m، بحيث لا يعمل هذا البرنامج النصي. أوصي التحقق xmodmap -pke | grep Caps_Lock قبل استخدام هذا البرنامج النصي للتأكد من صحة رمز المفتاح. - Nonny Moose


في Ubuntu 16.04 بعد قضاء ساعات googling & fiddling with dconf-editor و xbindkeys لقد وجدت حلا سهلا للغاية:

  • الإعداد سريع جدا في 2 دقيقة
  • فقط xdotool يحتاج إلى تثبيت
  • لا مخطوطات ضرورية
  • لا يزال يتم التعرف على مفتاح Caps lock ولكن لا يتم تبديل حالة الأحرف
  • يعمل مع إعدادات اختصار لوحة المفاتيح المخصصة أوبونتو لوحة المفاتيح

إذا كنت بحاجة إلى جنوم XF86AudioPlay الدعم الذي تحتاجه xdotool (لا حاجة ل VLC كما تنص OP):

sudo apt install xdotool

الآن إليكم الجزء الصعب في كل مرة تضغط فيها Caps lock مفتاح تبديل الموسيقى بين التشغيل والإيقاف المؤقت ، كما أن الأحرف الكبيرة تتحول إلى وضع إيقاف التشغيل.

استخدم هذه الطريقة لإيقاف تشغيل تبديل Caps Lock أثناء الاستمرار في تنشيط المفتاح:

setxkbmap -option caps:none

مشغلات الموسيقى التي تلتزم Gnome

ثم في أوبونتو 16.04 الخوض في الإعدادات >> لوحة المفاتيح >> اختصارات >> اختصارات مخصصة:

audio pause-play shortcut.png

  • تعيين اسم إلى Audio Play
  • تعيين أمر إلى xdotool key XF86AudioPlay
  • ثم انقر فوق تطبيق زر

بعد إضافة الخيار الجديد ، سيقرأ مفتاح الاختصار المعيّن معاق. انقر فوق معاق وعندما يطلب منك مفتاح لتعيين اضغط على Caps lock مفتاح.


مشغلات الموسيقى مثل VLC

اتبع الخطوات لجنوم في القسم السابق ولكن ل أمر استخدم هذا بدلا من ذلك:

qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause

VLC لن يتعرف على مفاتيح الوسائط: كيفية جعل مفاتيح الوسائط لوحة المفاتيح للعمل مع VLC على الصعيد العالمي؟ حتى عندما بنيت في لوحة المفاتيح. لذلك لا يكون اختصار لوحة المفاتيح المخصص إلى XF86AudioPlay عديم الفائدة xdotool.


ضبط اختصارات لوحة المفاتيح المخصصة من سطر الأوامر

يناقش Q & A هذا كيفية تعيين اختصارات لوحة المفاتيح المخصصة من سطر الأوامر: كيفية تعيين اختصارات لوحة المفاتيح المخصصة من المحطة الطرفية؟


إلغاء تنشيط القبعات بشكل دائم

الخطوة التالية هي جعل هذا setxkbmap -option caps:none المستمر عبر إعادة تمهيد. نتائج Googling في هذا الجواب بواسطة Terdon: حفظ إعدادات setxkbdmap:

طريقة سهلة هي أن تضيف الأمر إلى حسابك $HOME/.profile ملف (يمكنك إنشاؤه إذا لم يكن موجودًا):

setxkbmap -option caps:none

يجب أن يجعلها تعمل في كل مرة تقوم فيها بتسجيل الدخول.

ملحوظة يجب عليك استخدامها $HOME/.profile بدلا من $HOME/.bash_profile، $HOME/.bashrc أو بعض الملفات الأخرى المشابهة. هذا لأن هذا الإعداد يجب أن يقرأه مدير تسجيل الدخول الخاص بك.


8
2018-06-16 23:09



بسيطة ، أنيقة ، تقوم بهذه المهمة: الجواب المثالي لي! - Fabby
Fabby حسنا يجب أن أعترف أنه من السهل الإعداد والاختبار ولا يتطلب التلويث منخفض المستوى حول أو تشغيل البرامج النصية باستمرار. ذهبت من خلال أربع محاولات مختلفة قبل التعثر في هذه الطريقة. ما زالت لن يطلق عليه الكمال ولكن شكر!. إذا سمحوا لي بالعودة إلى أوروبا مرة أخرى سأشتري لك نصف لتر. - WinEunuuchs2Unix
هل يعمل مع وايلاند؟ - danzel
dabzel أخشى أن Wayland لا تعمل مع setxkbmap -option caps:none. يتم تثبيت برنامج المرافق مع الحفاظ على Wayland للتبديل بين العلبة والسفلية. يمكنك نشر سؤال منفصل حول كيفية احترام Wayland setxkbmap. - WinEunuuchs2Unix


تم اختبار هذه الإجابة على Ubuntu MATE 16.04.4 LTS في VM (لكن لوحة المفاتيح كانت لوحة مفاتيح USB على العبور ، لذا لا ينبغي أن يحدث فرق). كما أنه لا يتطلب أي برنامج إضافي ، ويمكن القيام به على تثبيت الفانيلا دون تثبيت أي حزم ، ويستمر بين الأحذية.

Remap Caps Lock

  1. تحرير الملف /usr/share/X11/xkb/symbols/pc كجذر. احرص على عدم ارتكاب خطأ هنا (مثل نسيان الفاصلة) لأنك قد لا تتمكن من استخدام لوحة المفاتيح بعد الآن إذا فعلت ذلك. (خمن ما تعلمته بالطريقة الصعبة؟)

  2. تعليق خارج الخط

        key <CAPS> {    [ Caps_Lock     ]   };
    

    بوضع خطين مائلتين للأمام (//) في بداية ذلك.

  3. أضف أسفله السطر التالي:

        key <CAPS> {    [ XF86AudioPlay, XF86AudioPause ]   };
    
  4. تعليق خارج الخط

        modifier_map Lock   { Caps_Lock };
    

    بنفس الطريقة على النحو الوارد أعلاه.

  5. اعادة التشغيل.

ملاحظة: (الائتمان إلى دانزيل للإشارة إلى ذلك) تحديثات الحزمة xkb-data يمكنه استبدال هذا الملف. وهناك طريقة آمنة إلى حد معقول لمنع هذا هو تحويل المسار باستخدام dpkg-divert. (أقول "آمن بشكل معقول" لأنه لم يتم تعديل المصدر الرئيسي لهذا الملف خلال ثلاث سنوات.)

طريقة بديلة

قم بتعطيل مفتاح Caps Lock يدويًا في إعدادات تخطيط لوحة المفاتيح ، ثم استخدم المنهج في هذا الجواب لإضافة عمليات إعادة تعيين المفاتيح الخاصة بك.

مشاكل؟

لم يعد مفتاح القفل الخاص بك يمنع أغطية الأحرف ، وتم تغييره إلى Play / Pause في هذه المرحلة. يجب أن تكون قادرًا على تشغيل الموسيقى وإيقافها مؤقتًا في VLC الآن. إذا كان يعمل في هذه المرحلة ، فيمكنك تخطي بقية هذه الإرشادات.

ومع ذلك ، عندما حاولت ذلك ، لم يستجب VLC لمفتاح Play / Pause.

تأكد من تعيين اختصار لوحة المفاتيح بشكل صحيح

  1. فتح اختصارات لوحة المفاتيح (النظام ← التفضيلات ← الأجهزة ← اختصارات لوحة المفاتيح)

  2. تأكد من تعيين "تشغيل (أو Play / Pause)" على "XF86AudioPlay"

  3. إذا لم يكن كذلك ، فانقر على قسم "الاختصار" واضغط مفتاح التشغيل / الإيقاف المؤقت الجديد لتعيين الاختصار. helpful screenshot

  4. إذا كان لا يزال لا يعمل ، أعد تشغيل بضع مرات لقياس جيد. (وهذا في الواقع ما ثبته لي.)


3
2018-06-17 19:36



هذا قد يتداخل مع xkb خيارات ، خصوصا caps:... منها. أيضا ، يمكن الكتابة عليه من خلال تحديثات النظام. - danzel
في الواقع ، يمكن ذلك. نقطة جيدة حول تحديثات النظام ، على الرغم من. سأقوم بإضافة ملاحظة حول هذا في جوابي. شكرا على ملاحظاتك! - Nonny Moose
عزيزي جميع ، نجاح باهر! آسف كان afk لفترة من الوقت: -) وأنا الآن اكتشاف كل الجهود التي بذلتها في الحل !! سيحاول الإجابة @ WinEunuuchs2Unix ، ويبقي لكم نشرها. شكرا ، LLAP! - 2BFrank
@ 2BFrank بدافع الفضول ، هل وجدت إجابة ناجحة؟ - Nonny Moose


التثبت xbindkeys، xcape و playerctl. تأكد من أن xcape (رسم الخرائط CapsLock لمفتاح الغيار مثل Alt+F12 بواسطة xcape -e 'Caps_Lock=Alt_L|F12) و playerctl يتم تسجيلها تلقائيًا عند تسجيل الدخول وإضافتها إلى الملف ~/.xbindkeysrc هذين الخطين

"playerctl play-pause"
  Alt + F12

1
2018-06-25 20:41





جعل مفتاح capslock مفتاح تشغيل / إيقاف مؤقت

سيعمل هذا الحل على إعادة ضبط scancode مفتاح مفتاح capslock إلى رمز مفتاح مختلف في برنامج تشغيل إدخال kernel ، وفي هذه الحالة تشغيل / إيقاف مؤقت.

مزايا

  • لا حاجة لتعديل ملفات النظام الموجودة (يجب إنشاء ملف جديد واحد فقط)
  • لن تعرف التطبيقات أنها في الواقع مفتاح capslock ولكنها تعتقد أنه تم الضغط على مفتاح تشغيل / إيقاف مؤقت حقيقي
  • لا حاجة لتعطيل capslock ، لا توجد إمكانية لخبط xkb ترتيب

سلبيات

  • يجب القيام به لكل لوحة مفاتيح على حدة (والتي يمكن أن تكون ميزة أيضًا ، وفقًا للحالة)

المتطلبات الأساسية

  • evtest (يمكن تركيبها عبر sudo apt-get install evtest)

إجراء

في محطة ، تشغيل sudo evtest وحدد لوحة المفاتيح الخاصة بك. إذا لم يكن هناك خرج عند الضغط على أي مفتاح ، فاضغط على السيطرة+C وحاول جهازًا مختلفًا. تذكر رقم حدث الجهاز الذي حددته ، سنحتاج إليه بعد ذلك. اضغط على مفتاح capslock. ستظهر بعض الخطوط مثل ما يلي:

Event: time 1529406021.187148, -------------- SYN_REPORT ------------
Event: time 1529406021.218427, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70039
Event: time 1529406021.218427, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 0

نحن بحاجة الى قيمة من MSC_SCAN الخط السابق KEY_CAPSLOCK خط. في المثال أعلاه ، سيكون هذا 70039 ، ولكن قد يكون scancode على لوحة المفاتيح مختلفًا.

الآن قم بتشغيل الأمر التالي ، ولكن استبدل X برقم حدث الجهاز الذي استخدمته لـ evtest أمر:

grep "" /sys/class/input/eventX/device/id/*

... هذا سوف يخرج bustype، product، vendor و version من لوحة المفاتيح.

قم بإنشاء ملف مسمى 65-keyboard-custom.hwdb في /etc/udev/hwdb.d/ (أذونات الجذر المطلوبة) مع المحتوى التالي:

evdev:input:b[bustype]v[vendor]p[product]e[version]*
 KEYBOARD_KEY_[scancode]=playpause

...أين

  • يحتوي [bus] و [بائع] و [product] و [version] على 4 أحرف ويجب أن تكون الأحرف الأحرف الكبيرة
  • [scancode] يجب أن يكون أحرف صغيرة
  • ال evdev:... خط له لا توجد مساحة سابقة
  • ال KEYBOARD_KEY... خط له بالضبط واحد يسبق الفضاء

فمثلا:

evdev:input:b0003v046DpC228e0110*
 KEYBOARD_KEY_70039=playpause

وأخيرًا ، قم بتجميع التكوين الجديد إلى قاعدة بيانات الأجهزة:

sudo systemd-hwdb update

إذا كنت ترغب في تطبيق التغييرات على الفور ، فأخبر udev:

sudo udevadm trigger

إذا كنت تريد التراجع عن التغييرات ، فما عليك سوى إزالة الملف الذي أنشأته وإعادة تشغيله.

يمكنك العثور على معلومات أكثر تفصيلا في بلدي الجواب الأصلي حول هذا الموضوع.


0
2018-06-19 12:17



Nonny Moose لهذا السبب كتبت "يجب القيام به لكل لوحة مفاتيح على حدة". بالإضافة إلى ذلك ، يمكنك تحديد عدد لوحات المفاتيح التي تريدها ، لذلك عليك فعل ذلك فقط لكل لوحة مفاتيح جديدة تشتريها. من ناحية أخرى ، يمكنك حذف لوحة المفاتيح إذا أردت ، على سبيل المثال ، لأنه يحتوي بالفعل على مفتاح تشغيل / إيقاف مؤقت فعلي. - danzel
... حسنا ، أنا لم أكن الاهتمام. أنا أقف بشكل صحيح. - Nonny Moose


ربما باستخدام xbindkeys أو XTE يمكنك القيام بذلك. ولكن تأكد أولاً من Keycodes ، يمكنك رؤية رمز مفتاح capslock باستخدام الأمر xevفي المحطة والضغط عليه (يمكنك أن ترى رمز مفتاح أي زر الماوس أو الماوس ، بما في ذلك الفئران الألعاب). مع رمز مفتاح capslock وأزرار اللعب 'في متناول اليد يمكنك تحرير ملف تعريف xbindkeys ووضع هناك التغييرات الخاصة بك. استعمال touch ~/.xbindkeysrc لإنشاء ملف التهيئة (إذا لم يقم النظام بإنشائه تلقائيًا) و nano ~/.xbindkeysrc لتحريره. لقد استخدمتها الشهر الماضي وهنا في الامتحان. إلقاء نظرة على هذه الروابط التي قد تكون مفيدة للغاية بالنسبة لك.

https://help.ubuntu.com/community/MultimediaKeys

https://gist.github.com/jbonney/5743509

أعد رسم زر من ماوس الألعاب الخاص بي إلى مفتاح لوحة المفاتيح

https://matmunn.me/post/binding-volume-control-mouse-buttons-ubuntu/


0
2018-06-21 18:27