acpid (Русский)
Краткое вступление
Многие руководства описывают процесс настройки мультимедийных клавиш с использованием таких программ как xev или keyTouch. Настоящая статья поясняет использование утилиты acpi_listen и создание вашего собственного скрипта для горячих клавиш.
Для кого предназначено данное руководство?
Данный метод предполагает, что сигналы с клавиатуры передаются через acpi. Если вам неизвестно, как это происходит в вашей системе, то полезно обратиться к статьям:
- Using Multimedia Keys in Linux
- Hotkeys
Установка необходимых инструментов
Скорее всего, все необходимое уже присутствует на вашей машине, но для уверенности лучше выполнить
$ sudo pacman -S acpi acpid acpitool
Данная статья рассказывает, какие модули вам необходимо загрузить (например, в /etc/rc.conf
или через modprobe).
Использование acpi_listen
Из-под суперпользователя или же из-под обычного, но с достаточными привилегиями доступа к устройствам ввода, выполните:
# acpi_listen
Если при нажатии особой клавиши, например "Следующий" ("Next") или "Предыдущий" ("Previous") на экране появляются строки, похожие на:
hkey VALZ 00000000 00000b31
значит все в порядке и можно продолжать.
Настройка ACPID
Демон ACPI реагирует на события ACPI в соответствии с содержимым файла handler.sh
, который находится в /etc/acpi/handler.sh
Вы можете либо редактировать его непосредственно, либо указать в нем другой скрипт (например /etc/acpi/hotkeys.sh
)
В файл /etc/acpi/hotkeys.sh
нужно добавить следующие строки:
hkey) :case "$4" in ::00000b31) ::echo "PreviousButton pressed!" ::exailectl p ::;; :00000b32) ::echo "NextButton pressed!" ::exailectl n ::;; :00000b33) ::echo "Play/PauseButton pressed!" ::exailectl pp ::echo "executed.." ::;; :00000b30) ::echo "StopButton pressed!" ::exailectl s ::;; :*) ::echo "Hotkey Else: $4" ::;; :esac :;;
Значения "00000b31" и тому подобные представляют собой ответ, полученный от acpi_listen. "$4" представляет собой последнюю часть строки "hkey VALZ 00000000 00000b31" и различает мультимедийные клавиши.
К тому же можно создать краткий shell-скрипт для управления медиа проигрывателем (на примере Exaile), который назовем exailectl. Так как ACPID запускается от суперпользователя, то вызов Exaile нужно выполнить командой:
$ sudo -u (имя пользователя) exaile
В противном случае acpi не сможет обнаружить нашу плеер, работающий на пользовательском уровне запуска, и воссоздаст другой процесс.
Устаревшее: пример скрипта
Так как keyTouch и другие программы для работы с клавиатурой у меня либо не заработали, либо работали не совсем хорошо, то перед редактированием handler.sh
я создал свой скрипт, запускающийся в фоне и непосредственно реагирующий на вывод acpi_listen. Это не совсем правильный способ, так как его работа постоянно нагружала мой ноутбук. Но так или иначе я привожу данный скрипт, поэтому вы можете использовать или изменять его для себя, а также добавлять свои предложения по его улучшению. Он создан для ноутбука Toshiba Satellite A50 и управляет плеером Exaile, но его легко изменить для управления Amarok, Xine или даже приспособить для немультимедийных программ.
export STOP_MYHOTKEY=0 i=`acpi_listen -c 1` case "$i" in :"hkey VALZ 00000000 00000b31") ::#echo "PREVIOUS" ::exaile -p ::;; :"hkey VALZ 00000000 00000b32") ::#echo "NEXT" ::exaile -n ::;; :"hkey VALZ 00000000 00000b33") ::exaile -t ::;; :"hkey VALZ 00000000 00000b30") ::#echo "STOP" ::exaile -s ::;; :*) ::#echo "ELSE: $i" ::;; esac e=`echo $STOP_MYHOTKEY` if [ "$e" != "1" ] then :./myHotkey.sh & fi
Указание: скрипт необязательно запускать из-под суперпользователя, если вы можете получать ответ acpi_listen из-под обычного пользовательского аккаунта (снова подразумевается, что для него возможен доступ к устройствам ввода).