Могу ли я переназначить клавишу Caps Lock для воспроизведения звука?

16

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

setxkbmap -option ctrl:nocaps

чтобы отключить его, но может ли он быть переназначен для воспроизведения / паузы VLC, например? Спасибо за ваши ответы!

2BFrank
источник
Я не думаю, что это будет работать .... по ряду причин ... например, я думаю, что linux рассматривает capslock как модификатор, а не как отдельный ключ. Это, вероятно, будет причиной, почему вы не можете связать это в VLC. Кроме того, если вы отключите его, он деактивируется. Но вы можете поиграться с командной vlc --key-play-pause <key-string>строкой и попытаться связать ее , но я не нашел строки, которую VLC принимает как capslock ...
Роберт Ридл
1
Я установил, dconf-editorпопробовал пару вещей, установил, xdotoolпопробовал пару вещей и, наконец, xbindkeysи попробовал пару вещей. В конце этого бесполезного упражнения моя кнопка паузы / воспроизведения на клавиатуре была сломана И моя собственная кнопка воспроизведения / паузы на экране была серой, и музыка не играла. Я сделал это в 16.04, так что перезагрузил в 18.04, чтобы подтвердить, что все по-прежнему работает, и это сделали программные хаки. Единственное спасение - я играю музыку только через телефон на Android, а не на ПК. Просто будьте осторожны, чтобы другие были осторожны и документировали, что вы делаете со своей машиной лучше меня.
WinEunuuchs2Unix
1
@pbhj Спасибо за совет. Мне каким-то образом удалось заставить работать play / pause снова с помощью экранной кнопки и кнопки pause / play на клавиатуре в Ubuntu 16.04. Я просто хотел предупредить людей о возможных подводных камнях, экспериментирующих с этими низкоуровневыми утилитами для клавиатуры.
WinEunuuchs2Unix
1
2BFrank: Обязательно примите один из ответов, если он решит вашу проблему. Поскольку за этот вопрос назначается вознаграждение, то оставив ответ непринятым (и не присуждая вознаграждение вручную), вы получите только половину вознаграждения @Sebastian Stark, поскольку за его ответ проголосовали самые высокие.
Нонни Мус
1
@NonnyMoose Спасибо за этот комментарий. Я собирался оставить это, чтобы просто автоматически присвоить его принятому ответу или наибольшему общему количеству голосов, но я не знал, что это вдвое уменьшило награду, поэтому я буду вручную присваивать его наибольшему общему количеству голосов примерно через два часа, если ответ не принят.
Чай Т. Рекс

Ответы:

11

евтест и дбус

Вот версия с небольшим скриптом, работающим в фоновом режиме. Необходимо сделать несколько простых шагов:

  • Установите evtest программу: sudo apt install evtest. Эта программа способна декодировать и распечатывать необработанные события из /dev/input/иерархии устройств.

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

  • Отключите клавишу capslock, как вы сделали, или используйте соответствующую настройку Mate. Это также сработает, если вы сопоставите ключ capslock с 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
    

Приведенный выше скрипт будет прослушивать события клавиатуры и выполнять команду при нажатии клавиши capslock. Выполняемая команда использует dbus для отправки события воспроизведения / паузы в работающий экземпляр VLC. Возможно, вам придется настроить KEYBOARDпеременную так, чтобы она указала на вашу фактическую клавиатуру, но, скорее всего, вышеуказанное значение будет работать.

Если вы предпочитаете, чтобы функция toggleVLC () вызывалась при отпускании клавиши capslock, вы можете изменить EVENTпеременную в сценарии так, чтобы она заканчивалась value 0вместо value 1.

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

Вместо скрипта evtest и выше вы можете использовать thd из thd из пакета triggerhappy (что-то вроде 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 с помощью клавиши capslock. Фоновый скрипт должен автоматически запускаться при входе в систему.

triggerhappy

Как уже упоминалось, вы также можете использовать пакет 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 мат. Но теоретически он также должен работать под Wayland или с другими средами рабочего стола.

Себастьян Старк
источник
@ WinEunuuchs2Unix спасибо за упоминание. Лично я предпочитаю более многословный стиль полного предложения if / then / else: оно более явное, его легче расширять и оно не приводит к слишком длинным строкам. Хотя в этом случае это действительно не имеет большого значения.
Себастьян Старк
Я согласен по поводу слишком длинных строк. Недавно я адаптировал стиль кодирования к двум строкам с первой [[ test ]] && \ и второй строкой с отступом в четыре пробела, <command>чтобы выполнить положительный тест. Я полностью согласен с тем, что читаемость потому, что мои рекомендации чужды большинству языков программирования.
WinEunuuchs2Unix
это круто ! Хотя я думаю, что это triggerhappyдолжен быть путь, так evtestкак на самом деле это программа отладки :)
Robert Riedl
да, evtest для обучения, для того, чтобы делать :)
Себастьян Старк
... В любом случае, для меня код ключа 58 такой m, что скрипт не работает. Я рекомендую проверить xmodmap -pke | grep Caps_Lockперед использованием этого скрипта, чтобы убедиться, что код ключа правильный.
Нонни Мус
9

В Ubuntu 16.04, потратив часы на поиски dconf-editorи игры, xbindkeysя нашел чрезвычайно простое решение:

  • Очень быстрая настройка за 2 минуты
  • Нужно установить только xdotool
  • Сценарии не нужны
  • Caps Lock все еще распознается, но не переключает регистр букв
  • Работает со стандартными пользовательскими настройками сочетаний клавиш Ubuntu

Если вам нужна XF86AudioPlayподдержка Gnome, в которой вы нуждаетесь xdotool(не требуется для VLC, как указано в OP):

sudo apt install xdotool

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

Используйте этот метод, чтобы отключить переключение 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 глобально? даже когда встроен в клавиатуру. Поэтому пользовательское сочетание клавиш для XF86 с AutoPlay бесполезно xdotool.


Настройка пользовательских сочетаний клавиш из командной строки

В этом разделе «Вопросы и ответы» обсуждается, как устанавливать настраиваемые сочетания клавиш из командной строки: Как настроить настраиваемые сочетания клавиш из терминала?


Дезактивация заглушки навсегда

Следующий шаг - сделать это setxkbmap -option caps:noneпостоянным при перезагрузках. Результаты поиска в Google в этом ответе от Terdon: Сохранить настройки setxkbdmap :

Самый простой способ - добавить команду в ваш $HOME/.profileфайл (вы можете создать ее, если она не существует):

setxkbmap -option caps:none

Это должно заставить его работать каждый раз, когда вы входите в систему.

Обратите внимание, что вы должны использовать $HOME/.profileвместо $HOME/.bash_profile, $HOME/.bashrcили какой-либо другой подобный файл. Это потому, что этот параметр должен быть прочитан вашим менеджером входа в систему.

WinEunuuchs2Unix
источник
Простой, элегантный, делает работу: идеальный ответ для меня!
Fabby
@Fabby Ну, я должен признать, что его легко установить и протестировать, и он не требует низкоуровневого взлома или постоянно работающих скриптов. Я сделал четыре разных попытки, прежде чем наткнулся на этот метод. Все еще не назвал бы это прекрасным, но СПАСИБО! , Если меня снова пустят в Европу, я куплю тебе пинту пива.
WinEunuuchs2Unix
Это работает с Wayland?
Данзел
@ Dabzel Боюсь, что Вейленд не работает setxkbmap -option caps:none. Утилита установлена, однако Wayland продолжает переключаться между прописными и строчными буквами. Вы можете опубликовать отдельный вопрос о том, как заставить Вэйланда уважать setxkbmap.
WinEunuuchs2Unix
3

Этот ответ был протестирован на Ubuntu MATE 16.04.4 LTS на виртуальной машине (но клавиатура была USB-клавиатурой при проходе, так что это не должно иметь никакого значения). Это также не требует никакого дополнительного программного обеспечения, и может быть сделано при простой установке без установки каких-либо пакетов, и оно постоянно между загрузками.

Remap Caps Lock

  1. Отредактируйте файл /usr/share/X11/xkb/symbols/pcкак root. Будьте осторожны, чтобы не ошибиться (например, забыть запятую), потому что вы не сможете больше использовать клавиатуру, если вы это сделаете. (Угадай, что я усвоил нелегким путем?;)

  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. Убедитесь, что для «Play (или Play / Pause)» установлено значение «XF86AudioPlay»

  3. Если это не так, щелкните раздел «Ярлык» и нажмите новую кнопку «Воспроизведение / Пауза», чтобы установить ярлык. полезный скриншот

  4. Если это все еще не работает, перезагрузите пару раз для хорошей меры. (Это на самом деле то, что исправило это для меня.)

Нонни Лось
источник
Это может мешать xkbопциям, особенно caps:...тем. Кроме того, это может быть перезаписано обновлениями системы.
Данзел
Действительно, это возможно. Хорошие замечания по поводу системных обновлений. Я добавлю примечание об этом в моем ответе. Спасибо за ответ!
Нонни Мус
Уважаемые все, вау !! Извините, некоторое время не получалось :-), и теперь я обнаруживаю все усилия, которые вы все вложили в решение !! Постараюсь ответить @ WinEunuuchs2Unix и держать вас в курсе. Спасибо, LLAP!
2BFrank
@ 2BFrank Из любопытства, вы нашли ответ, который работал?
Нонни Мус
1

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

"playerctl play-pause"
  Alt + F12
Энно
источник
0

Сделайте ваш ключ Capslock клавишей воспроизведения / паузы

Это решение переназначит код сканирования вашего ключа capslock в другой код ключа в драйвере ввода ядра, в этом случае play / pause.

преимущества

  • Нет необходимости изменять существующие системные файлы (нужно создать только один новый файл)
  • Приложения не будут знать, что это на самом деле клавиша capslock, но думают, что нажата настоящая клавиша воспроизведения / паузы
  • Нет необходимости отключать capslock, нет возможности испортить 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

...где

  • [bus], [vendor], [product] и [version] имеют ровно 4 символа, а буквы должны быть в верхнем регистре
  • [сканкод] должен быть в нижнем регистре
  • evdev:...линия не имеет не предшествующего пространства
  • KEYBOARD_KEY...линия имеет ровно одно предшествующее пространство

Например:

evdev:input:b0003v046DpC228e0110*
 KEYBOARD_KEY_70039=playpause

Наконец, скомпилируйте новую конфигурацию в аппаратную базу данных:

sudo systemd-hwdb update

Если вы хотите применить изменения немедленно, сообщите udev:

sudo udevadm trigger

Если вы хотите отменить изменения, просто удалите созданный вами файл и перезагрузите компьютер.

Более подробную информацию вы можете найти в моем оригинальном ответе на эту тему.

Danzel
источник
@Nonny Moose, поэтому я написал «Должно быть сделано для каждой клавиатуры в отдельности». Кроме того, вы можете указать столько клавиатур, сколько захотите, так что вам действительно нужно делать это только для каждой новой клавиатуры, которую вы покупаете. С другой стороны, вы можете опустить клавиатуру, если хотите, например, потому что у нее уже есть физическая клавиша воспроизведения / паузы.
Данзел
... Ну, я не обращал внимания. Я стою исправлено.
Нонни Мус
0

Может быть, используя xbindkeysили XTEвы могли бы сделать это. Но сначала убедитесь, что это за коды клавиш, вы можете увидеть код клавиши capslock, используя команду xevв терминале и нажав ее (вы можете увидеть код клавиши любой кнопки keu или мыши, включая игровые мыши). Имея под рукой код клавиши capslock и play, вы можете редактировать файл конфигурации 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/

Эдмилсон Гонсалвес
источник