# acpid (Русский)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

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

Category:

- Power management (Русский)