Я пытаюсь снова использовать бесполезную клавишу Caps Lock для чего-то полезного на 16,04 ПОМОЩНИКАХ. Я столкнулся
setxkbmap -option ctrl:nocaps
для отключения его но он мог быть повторно отображен для игрения/приостанавливания VLC, например? Спасибо за Ваши ответы!
Этот ответ был протестирован на Ubuntu MATE 16.04.4 LTS на виртуальной машине (но клавиатура была USB-клавиатурой при проходе, так что это не должно иметь значения). Это также не требует никакого дополнительного программного обеспечения, и может быть сделано при простой установке без установки каких-либо пакетов, , и оно постоянно между загрузками.
Отредактируйте файл /usr/share/X11/xkb/symbols/pc
как root. Будьте осторожны, чтобы не ошибиться (например, забыть запятую), потому что вы не сможете больше использовать клавиатуру, если вы это сделаете. (Угадайте, что я выучил трудным путем?;)
Закомментируйте строку
key <CAPS> { [ Caps_Lock ] };
, поместив две косые черты (//
) в начале Это.
Добавить под ним следующую строку:
key <CAPS> { [ XF86AudioPlay, XF86AudioPause ] };
Закомментировать строку
modifier_map Lock { Caps_Lock };
в той же строке. как указано выше.
Перезагрузка.
Примечание: (благодарность danzel за указание на это) Обновления пакета xkb-data
могут перезаписать этот файл. Достаточно безопасный метод предотвращения этого - отклонение пути с использованием dpkg-divert
. (Я говорю «достаточно безопасно», поскольку исходный источник для этого файла не изменялся в течение трех лет.)
Вручную отключите клавишу Caps Lock в настройках раскладки клавиатуры, затем используйте подход из этого ответа , чтобы добавить свои собственные переопределения ключей.
Ваша кнопка блокировки заглавных букв больше не запирает заглавные буквы, и на этом этапе она была переназначена для воспроизведения / паузы. Теперь вы сможете воспроизводить и приостанавливать музыку в VLC. Если это сработает, вы можете пропустить остальные инструкции.
Однако, когда я попробовал это, VLC не ответил на клавишу Play / Pause.
Откройте сочетания клавиш (Система → Настройки → Оборудование → Сочетания клавиш)
Убедитесь, что «Воспроизведение (или воспроизведение / пауза)» установлено на «XF86AudioPlay»
Если это не так, щелкните раздел «Ярлык» и нажмите новую клавишу «Воспроизведение / Пауза», чтобы установить ярлык.
Если это все еще не работает, перезагрузите пару раз для хорошей меры. (Это фактически то, что исправило это для меня.)
Вот версия, включающая маленький сценарий, работающий в фоновом режиме. Должны быть сделаны несколько легких шагов:
Установите evtest программу: sudo apt install evtest
. Эта программа может декодировать и распечатать необработанные события от /dev/input/
иерархия устройств.
Добавьте свою учетную запись пользователя к группе input
. Выход из системы и вход в систему снова. (Это необходимо, потому что мы собираемся читать из некоторого устройства под /dev/input/
, который обычно может только делаться корнем или пользователями в группе input
. Мы могли запустить скрипт как корень, но затем мы должны будем найти способ сказать его, с каким пользователем dbus экземпляр он должен говорить.)
Отключите клавишу Caps Lock как Вы, сделал или используют соответствующее предпочтение Помощника. Это также работало бы при отображении клавиши Caps Lock на 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
Вышеупомянутый сценарий будет слушать Ваши события клавиатуры и выполнять команду, когда клавиша Caps Lock будет нажата. Команда, которая выполняется, использует dbus для отправки события игры/паузы в выполнение экземпляр VLC. Вам, возможно, придется настроить KEYBOARD
переменная для указания на фактическую клавиатуру но вероятно, что вышеупомянутое значение будет работать.
Если Вы предпочитаете, чтобы toggleVLC () функция был назван, при выпуске клавиши Caps Lock можно измениться EVENT
переменная в сценарии, таким образом, что это заканчивается value 0
вместо value 1
.
Кроме того, возможно, что для Вас код клавиши клавиши Caps Lock отличается от 58. Можно проверить это путем выполнения evtest
, посмотрите на вывод, когда Вы нажмете capslock и скорректируете переменную СОБЫТИЯ соответственно. Вы даже не должны соответствовать кодом клавиши и установить СОБЫТИЕ просто на (KEY_CAPSLOCK), value 1
.
Вместо того, чтобы использовать evtest и выше сценария Вы могли использовать thd от воинственного пакета (что-то как 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 использование клавиши Caps Lock. Фоновый сценарий должен быть автоматически запущен, когда Вы входите в систему.
Как упомянуто уже Вы могли также использовать воинственный пакет, чтобы сделать это. Это - предпочтительный метод для людей, которые хотят играть меньше с системой и скорее как более твердый раствор.
Добавьте пользователя к 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 выполненным для Вашего пользователя похожим способом уже, любят описанный за capshack.
Удостоверьтесь, что у Вас есть только один из упомянутых методов (capshack или thd) выполнение, для не удвоения переключателя который каждое нажатие клавиши.
Я протестировал все это на 18,04 под стандартной сессией и 16,04 помощниками. Но это должно теоретически также работать под Уэйлендом или с другими настольными средами.
В Ubuntu 16.04 после пребывания в течение часов, гугля и играя с dconf-editor
и xbindkeys
Я нашел чрезвычайно легкое решение:
Если Вам нужен Gnome XF86AudioPlay
поддерживайте Вас потребность xdotool
(не нужный для VLC, поскольку OP предусматривает):
sudo apt install xdotool
Теперь вот хитрая часть. Каждый раз, когда Вы нажимаете клавишу Caps Lock для переключения музыки между Игрой и Паузой, прописные буквы также выключают и на.
Используйте этот метод для выключения переключения Caps Lock при тихом сохранении ключевыми активный:
setxkbmap -option caps:none
Затем в Ubuntu 16.04 входят в Настройки>> Клавиатура>> Ярлыки>> Пользовательские Ярлыки:
Audio Play
xdotool key XF86AudioPlay
После добавления новой опции присвоенное сочетание клавиш будет читать Отключенный. Нажмите на Disabled и при запросе ключ присвоить нажатию клавишу Caps Lock.
Выполните шаги для 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
или некоторый другой подобный файл. Это вызвано тем, что эта установка должна быть считана Вашим менеджером по входу в систему.
Установка xbindkeys
, xcape и playerctl. Удостоверьтесь это xcape
(отображение CapsLock
к запасному ключу как Alt+F12
xcape -e 'Caps_Lock=Alt_L|F12
) и playerctl
автоматически запускаются на входе в систему и добавляют к файлу ~/.xbindkeysrc
эти две строки
"playerctl play-pause"
Alt + F12
Это решение повторно отобразит scancode Вашей клавиши Caps Lock на другой код клавиши во входном драйвере ядра в этой игре/паузе случая.
Преимущества
xkb
конфигурацияНедостатки
Предпосылки
sudo apt-get install evtest
)В терминале, выполненном sudo evtest
и выберите свою клавиатуру. Если нет никакого вывода при нажатии клавиши нажмите Ctrl+C и попробуйте другое устройство. Помните номер события устройства, который Вы выбрали, нам будет нужен он впоследствии. Нажмите клавишу Caps Lock. Появятся некоторые строки как следующее:
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
... где
evdev:...
строка не имеет никакого предыдущего пространстваKEYBOARD_KEY...
строка имеет точно одно предыдущее пространствоНапример:
evdev:input:b0003v046DpC228e0110*
KEYBOARD_KEY_70039=playpause
Наконец, скомпилируйте новую конфигурацию в аппаратную базу данных:
sudo systemd-hwdb update
Если Вы хотите применить изменения сразу, сообщите udev:
sudo udevadm trigger
Если Вы хотите вернуться изменения, просто удалить файл, Вы создали и перезагрузка.
Можно найти более подробную информацию в моем исходном ответе по этой теме.
Возможно, использование xbindkeys
или XTE
Вы могли сделать это. Но сначала убедитесь в том, что является Кодами клавиши, Вы видите код для команды использования клавиши Caps Lock xev
в терминале и нажатии его (Вы видите код клавиши любого keu или кнопки мыши, включая Играющие мыши). С capslock и кодом клавиши кнопок воспроизведения в руке можно отредактировать 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/