# Acpid (Русский)

Эта страница нуждается в сопроводителе

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

## Краткое вступление

Многие руководства описывают процесс настройки мультимедийных клавиш с использованием таких программ как xev или keyTouch. Настоящая статья поясняет использование утилиты acpi_listen и создание вашего собственного скрипта для горячих клавиш.

## Для кого предназначено данное руководство?

Данный метод предполагает, что сигналы с клавиатуры передаются через acpi. Если вам неизвестно, как это происходит в вашей системе, то полезно обратиться к статьям:

- Using Multimedia Keys in Linux
- Hotkeys
- Extra Keyboard Keys - keyTouch

## Установка необходимых инструментов

Скорее всего, все необходимое уже присутствует на вашей машине, но для уверенности лучше выполнить

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

Category:

- Русский