Чи можу я перевстановити клавішу Caps Lock для відтворення звуку?


16

Я намагаюся повторно використовувати марний ключ блокування Caps для чогось корисного 16.04 MATE. Я натрапив

setxkbmap -option ctrl:nocaps

щоб відключити його, але чи можна його переробити для відтворення / паузи, наприклад, VLC? Дякую за відповіді!


Я не думаю, що це спрацює .... з ряду причин ... наприклад, я думаю, що Linux розглядає caplock як модифікатор, а не окремий ключ. Це, мабуть, буде причиною, чому ви не можете зв’язати його у VLC. Крім того, якщо ви його відключите, його вимкнено. Але ви можете пограти в командному рядку і спробувати зв’язати його vlc --key-play-pause <key-string>, але я не знайшов рядок, який VLC приймає як caplock ...
Роберт Ридл,

1
Я встановив dconf-editorспробував пару речей, встановив xdotoolспробував пару речей і, нарешті, xbindkeysі спробував пару речей. В кінці цієї безрезультатної вправи клавіатура пауза / відтворення клавіатури була зламана, а моя власна кнопка відтворення / паузи на екрані була затьмарена, і музика не грала. Я зробив це в 16.04, перезавантажившись у 18.04, щоб підтвердити, що все ще працює, і це зробили саме хакерські програми. Єдина грація заощадження - це те, що я граю музику лише через телефон Android, а не на ПК. Лише головуйте за тим, щоб інші були обережні і документували, що ви робите на своїй машині краще, ніж я.
WinEunuuchs2Unix

1
@pbhj Дякую за пораду. Мені якось вдалося змусити знову / паузу працювати знову з кнопкою на екрані та кнопкою паузи / кнопкою паузи / відтворення в Ubuntu 16.04. Я просто хотів попередити людей про можливі підводні камені, що експериментують із цими утилітами низького рівня.
WinEunuuchs2Unix

1
2BFrank: Обов’язково прийміть одну з відповідей, якщо вона вирішить вашу проблему. Оскільки в цьому питанні є винагорода, якщо відповідь не буде прийнята (а не вручається вручну), вона присудить лише половину винагороди @Sebastian Stark, оскільки його відповідь є найвищим голосом.
Nonny Moose

1
@NonnyMoose Дякую за цей коментар. Я збирався залишити його, щоб просто передати його прийнятій відповіді чи найвищій кількості голосів, але я не знав, що він вдвічі зменшив нагороду, тому я буду вручну присуджувати її найвищому загальному голосуванню приблизно за дві години, якщо відповідь не приймається.
Чай Т. Рекс

Відповіді:


11

evtest та dbus

Ось версія з невеликим сценарієм, що працює у фоновому режимі. Необхідно зробити кілька простих кроків:

  • Встановіть evtest програму: sudo apt install evtest. Ця програма здатна декодувати та друкувати вихідні події з /dev/input/ієрархії пристроїв.

  • Додайте свій обліковий запис користувача до групи input. Вийдіть і увійдіть знову. (Це потрібно, тому що ми будемо читати з якогось пристрою під /dev/input/, який, як правило, може виконувати тільки root або користувачі в групі input. екземпляр dbus, з яким потрібно поговорити.)

  • Вимкніть ключ, як ви зробили, або скористайтеся відповідними налаштуваннями Mate. Це також спрацює, якщо ви накреслите клавішу caplock на ctrl, як це роблять багато людей.

  • Зберігайте такий скрипт десь, наприклад, $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
    

Наведений вище сценарій прослухає події на вашій клавіатурі та виконає команду при натисканні клавіші caplock. Команда, що виконується, використовує dbus для надсилання події відтворення / паузи запущеному екземпляру VLC. Можливо, вам доведеться налаштувати KEYBOARDзмінну, щоб вказати на вашу фактичну клавіатуру, але цілком ймовірно, що вищевказане значення спрацює.

Якщо ви віддаєте перевагу функції toggleVLC (), яку потрібно викликати під час випуску ключа capslock, ви можете змінити EVENTзмінну в скрипті таким чином, щоб вона закінчувалася value 0замість value 1.

Крім того, можливо, що для вас код коду клавіші caplock відрізняється від 58. Ви можете перевірити це, запустивши evtest, подивіться на вихід, коли натискаєте capslock, і відповідно налаштуйте змінну EVENT. Вам навіть не потрібно співставляти за кодом клавіатури та встановлювати EVENT просто на (KEY_CAPSLOCK), value 1.

Замість використання сценарію evtest та версії ви можете використовувати thd із пакету тригерних програм (щось на зразок thd --dump /dev/input/*дасть подібний вихід), але я виявив, що це трохи менш навчально.

Тепер ми створюємо користувальницький системний блок для автоматичного запуску сценарію у фоновому режимі:

  • Створіть ієрархію 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 за допомогою клавіші caplock. Фоновий сценарій повинен бути автоматично запущений під час входу.

тривожний

Як уже згадувалося, ви також можете скористатися пакетом триггера для цього. Це кращий метод для людей, які хочуть менше пограбувати із системою, а більше люблять більш надійне рішення.

  • Додайте користувача до inputгрупи, як вище

  • Встановіть пакет: sudo apt install 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 так: thd --triggers ~/.config/thd/capslock.conf /dev/input/event*

  • Зробіть thd run для свого користувача аналогічним чином, як описано для капша.

  • Переконайтеся, що у вас працює лише один із згаданих методів (capshack або thd), щоб не подвійно перемикати будь-яку клавішу.

Я протестував все це 18.04 під стандартним сеансом і 16.04 мате. Але теоретично він також повинен працювати під землею або в інших робочих середовищах.


@ WinEunuuchs2Unix дякую за згадування. Особисто я віддаю перевагу більш багатослівним стилем у повному випадку, якщо / тоді / інше: Це явніше, простіше розширюватись і не має тенденції робити занадто довгі рядки. Хоча в цьому випадку насправді це мало би мало значення.
Себастьян Старк

Я занадто довго погоджуюся щодо рядків. Нещодавно я адаптував стиль кодування до двох рядків з першого рядка [[ test ]] && \ та другого рядка з відступом чотирьох пробілів, <command>щоб працювати на позитивному тесті. Я з усією душею згоден щодо читабельності, оскільки моя рекомендація чужа більшості мов програмування.
WinEunuuchs2Unix

це чудово ! Хоча я думаю, що, здається, triggerhappyмає бути шлях, оскільки evtestце насправді програма налагодження :)
Роберт Ридл

так, evtest для навчання, для того, щоб робити :)
Себастьян Старк

... Для мене все-таки клавіатурний код 58 є m, так що сценарій не працює. Рекомендую перевірити xmodmap -pke | grep Caps_Lockперед використанням цього сценарію, щоб переконатися, що код коду правильний.
Нонні Мус

9

В Ubuntu 16.04 після витрачати годинник і вдаючись до допомоги мнучи dconf-editorі xbindkeysя знайшов дуже просте рішення:

  • Дуже швидке налаштування за 2 хвилини
  • Потрібно встановити лише xdotool
  • Не потрібні сценарії
  • Блокування Caps все ще розпізнається, але не перемикає регістр букв
  • Працює зі стандартними налаштуваннями швидкого доступу клавіатури Ubuntu

Якщо вам потрібна XF86AudioPlayпідтримка Gnome, яка вам потрібна xdotool(не потрібна для VLC, як передбачено ОП):

sudo apt install xdotool

Тепер ось складна частина. Кожного разу, коли ви натискаєте Caps LocKклавішу для перемикання музики між програванням Play і Pause, великі літери також вимикаються та вмикаються.

Використовуйте цей метод, щоб вимкнути перемикання функції Caps Lock, зберігаючи клавішу активною:

setxkbmap -option caps:none

Музичні плеєри, які дотримуються Gnome

Потім в Ubuntu 16.04 перейдіть у Налаштування >> Клавіатура >> Ярлики >> Спеціальні ярлики :

аудіо пауза-грати shortcut.png

  • Встановіть ім'я наAudio Play
  • Встановіть команду наxdotool key XF86AudioPlay
  • Потім натисніть Applyкнопку

Після додавання нової опції призначена клавіша швидкого доступу буде прочитана " Відключено" . Клацніть на " Відключено", і коли з'явиться запит на присвоєння клавіші, натисніть Caps LocKклавішу.


Музичні плеєри, як VLC

Виконайте кроки для Gnome в попередньому розділі, але для команди використовуйте це замість цього:

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

VLC не розпізнає медіа-клавіші: як змусити медіа-клавіші клавіатури працювати з VLC у всьому світі? навіть коли вбудований в клавіатуру. Для цього користувацька комбінація клавіш до XF86AudioPlay марна xdotool.


Налаштування користувацьких комбінацій клавіш із командного рядка

У цьому питанні обговорюється, як встановити спеціальні комбінації клавіш у командному рядку: Як встановити спеціальні комбінації клавіш із терміналу?


Деактивуюча кришка блокується назавжди

Наступний крок - зробити це setxkbmap -option caps:noneстійким для перезавантаження. Результати Google в цій відповіді від Terdon: Збережіть налаштування setxkbdmap :

Найпростішим способом було б додати команду до $HOME/.profileфайлу (ви можете створити її, якщо її немає):

setxkbmap -option caps:none

Це повинно змушувати його працювати кожного разу при вході в систему.

Зверніть увагу , що ви повинні використовувати $HOME/.profileзамість $HOME/.bash_profile, $HOME/.bashrcабо який - або інший аналогічний файл. Це тому, що цей параметр повинен читати ваш менеджер реєстрації.


Проста, елегантна, робить роботу: Ідеальна відповідь для мене!
Фабі

@Fabby Добре, я мушу визнати, що це легко налаштувати і протестувати, і не потрібно низького рівня зйомки про або постійно запущених сценаріїв. Я пройшов чотири різні спроби, перш ніж натрапити на цей метод. Досі не назвав би це ідеальним, але ДЯКУЮ! . Якщо мене знову відпустять до Європи, я куплю тобі пінту.
WinEunuuchs2Unix

Це працює з Wayland?
danzel

@dabzel Боюся, що Wayland не працює setxkbmap -option caps:none. Утилітна програма встановлена, проте Wayland продовжує перемикатися між великими та малими літерами. Ви можете поставити окреме запитання про те, як домогтися поваги Вейленда setxkbmap.
WinEunuuchs2Unix

3

Ця відповідь була протестована на Ubuntu MATE 16.04.4 LTS у VM (але клавіатура була USB-клавіатурою за останній час, тому це не повинно впливати). Це також не вимагає додаткового програмного забезпечення, і це можна зробити при встановленні ванілі без встановлення будь-яких пакетів, і він зберігається між черевиками.

Перезавантажити 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. Перезавантажте.

Примітка: (заслуга Danzel, щоб вказати на це) Оновлення пакету xkb-dataможуть замінити цей файл. Досить безпечним методом запобігання цього є переадресація шляху dpkg-divert. (Я кажу "досить безпечно", оскільки вихідне джерело цього файлу не було змінено протягом трьох років.)

Альтернативний метод

Вручну відключіть клавішу Caps Lock у налаштуваннях розкладки клавіатури, а потім використовуйте підхід у цій відповіді, щоб додати свої власні повторні відображення ключів.

Проблеми?

Ваш ключ блокування шапки більше не блокує шапки, і він був перероблений для відтворення / призупинення в цей момент. Ви повинні мати можливість відтворювати та призупиняти музику у VLC зараз. Якщо це працює в цей момент, ви можете пропустити решту цих інструкцій.

Однак, коли я спробував це, VLC не відповів на клавішу Play / Pause.

Переконайтесь, що комбінація клавіш встановлена ​​правильно

  1. Відкрити комбінації клавіш (Система → Налаштування → Обладнання → Комбінації клавіш)

  2. Переконайтесь, що для "Відтворення (або відтворення / пауза)" встановлено значення "XF86AudioPlay"

  3. Якщо це не так, натисніть на розділ «Ярлик» і натисніть нову клавішу Відтворення / пауза, щоб встановити ярлик. корисний скріншот

  4. Якщо це все ще не працює, перезавантажте пару разів для гарної міри. (Це насправді те, що мене виправило.)


Це може заважати xkbваріантам, особливо caps:...тим. Крім того, це може бути замінено оновленнями системи.
danzel

Справді, це могло б. Хоча гарна точка щодо оновлення системи. Я додам записку про це у своїй відповіді. Дякуємо за відгук!
Nonny Moose

Шановні всі, вау !! Вибачте, на деякий час був afk :-) і зараз я виявляю всі зусилля, які ви всі вклали в рішення !! Спробуй відповісти на @ WinEunuuchs2Unix та триматимеш в курсі. Дякую, LLAP !!
2BFrank

@ 2BFrank З цікавості ви знайшли відповідь, яка спрацювала?
Нонні Мус

1

Встановити xbindkeys, xcape та playerctl . Переконайтеся, що xcape(відображення CapsLockна запасний ключ на зразок Alt+F12від xcape -e 'Caps_Lock=Alt_L|F12) і автоматично playerctlзапускається при вході в систему, і додайте до файлу ~/.xbindkeysrcдва рядки

"playerctl play-pause"
  Alt + F12

0

Зробіть свій ключ закриття клавішею відтворення / паузи

Це рішення дозволить перевстановити код сканування ключа вашого блокування на інший код у драйвері введення ядра, у цьому випадку відтворення / пауза.

Переваги

  • Не потрібно змінювати існуючі системні файли (потрібно створити лише один новий файл)
  • Програми не знають, що це насправді клавіша закриття, але подумають, що натиснута реальна клавіша відтворення / паузи
  • Немає необхідності відключати затвор, немає можливості зіпсувати xkbконфігурацію

Недоліки

  • Це потрібно зробити для кожної клавіатури окремо (що, залежно від ситуації, також може бути перевагою)

Передумови

  • evtest (можна встановити через sudo apt-get install evtest)

Порядок

У терміналі запустіть sudo evtestі виберіть клавіатуру. Якщо під час натискання клавіші немає результату, натисніть Ctrl+ Cта спробуйте інший пристрій. Запам’ятайте номер вибраної події на пристрої, він нам знадобиться згодом. Натисніть клавішу замикання. З'являться рядки, такі як:

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, але код сканування на вашій клавіатурі, ймовірно, інший.

Тепер запустіть таку команду, але замініть 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

... куди

  • [шина], [постачальник], [товар] та [версія] мають рівно 4 символи, а літери повинні бути великими літерами
  • [сканувати код] має бути з малих літер
  • evdev:...лінія не має не передує простору
  • KEYBOARD_KEY...лінія має рівно одне попереднє простір

Наприклад:

evdev:input:b0003v046DpC228e0110*
 KEYBOARD_KEY_70039=playpause

Нарешті, складіть нову конфігурацію до апаратної бази даних:

sudo systemd-hwdb update

Якщо ви хочете застосувати зміни негайно, повідомте udev:

sudo udevadm trigger

Якщо ви хочете відновити зміни, просто видаліть створений файл та перезавантажте.

Більш детальну інформацію ви можете знайти в моїй оригінальній відповіді на цю тему.


@Nonny Moose, тому я написав "Треба робити для кожної клавіатури окремо". Крім того, ви можете вказати стільки клавіатур, скільки вам подобається, тому вам потрібно робити це лише для кожної нової клавіатури, яку ви купуєте. З іншого боку, ви можете опустити клавіатуру, якщо вам подобається, наприклад, тому що вона вже має фізичну клавішу відтворення / паузи.
денцель

... Ну, я не звертав уваги. Я стою виправлений.
Nonny Moose

0

Можливо, використовуючи xbindkeysабо XTEви могли це зробити. Але спочатку переконайтеся, що таке Keycodes, ви можете побачити код для клавіші caplock, використовуючи команду xevв терміналі та натиснувши її (ви можете побачити код клавіші будь-якої кнопки кеу чи миші, включаючи ігрові миші). За допомогою клавішного коду клавіатури та кнопки відтворення в руці ви можете редагувати файл xbindkeys confi та вносити туди свої зміни. використовувати 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/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.