. Настройка Fn-клавиш в Ubuntu на примере ASUS M50Vc
Настройка Fn-клавиш в Ubuntu на примере ASUS M50Vc

Настройка Fn-клавиш в Ubuntu на примере ASUS M50Vc

Эх. Давненько я ничего не писал. Надо исправляться :) В этом посте хочу рассказать о том как настроить хоткеи типа Fn+F1 и т.д. на ноуте в ubuntu, но это так же справедливо для любого другого дистрибутива linux/bsd (уверен, хотя не проверял).

Вступление или как все начиналось. Тут пойдет не большая история моего знакомства с linux. Если тебе это не интересно, можешь смело переходить к следующему "разделу". Свой первый ноут, Acer Aspire 5560, я купил (30 августа 2006 года) еще тогда, когда был поклонником форточек. Там все работало без проблем. Но в апреле прошлого года я поставил перед собой задачу перейти на linux во что бы то ни стало. Перебрав с 2 десятка дистрибутив, мой выбор пал на Ubuntu 8.04 Desktop. Причина была банальна, wifi работал "из коробки" и дрова на видяху встали без проблем. Да-да, тогда я еще не знал как самому настроить этот самый wifi (ну и дрова тоже). Но ни в одном дистре у меня не хотели работать Fn клавиши :( В августе этого года я решил сменить ноут на ASUS M50Vc, но и тут Fn клавиши не заработали :( Порывшись в гугле и вдоволь начитавшись про настройку Fn и мультимедиа клавиш через xev и т.п., а так же про перекомпиляцию ядра (например, Gentoo, Slackware) я чуть было не опустил нос. И вот не так давно просматривая новости в любимом Google Reader'е обратил внимания на пост на Хабре про отключение тачпада (именно этого мне очень не хватало). Конечно это не то, но. После прочтения этой статьи меня осенило (даже не знаю почему), что Fn-клавиши привязаны к BIOS (на этапе загрузки ноута (POST) и когда находишься в BIOS они же работают, например Fn+F7 выкл/вкл подсветку дисплея), а значит они должны обрабатываться через ACPI. Я еще не был уверен, что нашел решение, но поспешил проверить свои догадки и оказалось, что я не ошибся :)

Подготовка и "комментарии" В ubuntu все необходимые нам пакеты ставятся "из коробки", в других дистрибутивах, возможно, придется их поставить/скомпилировать самостоятельно. Скажу сразу, этот метод должен подойти для любого ноута и дистрибутива linux, т.ж., думаю, это будет работать и в *BSD системах. И так. Ставим пакеты (названия пакетов взяты из ubuntu) acpid и acpi-support (так же не помешают acpi и acpitool ), если они еще не стоят. В ubuntu это делается так:Поясню коротко для чего какой пакет. acpid - сам acpi-демон, который обрабатывает acpi-события; acpi-support - этот пакет ставит в систему файлы обработчики событий, т.е. правила реагирования на acpi-события, и скрипты, которые вызываются файлами-обработчиками при наступлении какого-либо события; acpi и acpitool - это дополнительне утилиты, которые показывают различную информацию полученную через acpi. Не смотря на то, что стоит пакет acpi-support все же не все клавиши работают. У меня на ASUS'е (на Acer'е уже не помню) работают "из коробки" только: Fn+F2 - wifi и bluetooth (мне не понравилось поведение и я перенастроил его, но об этом в след. посте); Fn+F - яркость подсветки дисплея; Fn+F7 - вкл/выкл подсветку дисплея; Fn+F - управление громкостью; Fn+ - стоп, плей/пауза, вперед, назад; переключатель на передней панели - вкл/выкл wifi и bluetooth; Power - кнопка вкл/выкл ноута; LID - крышка ноута. Но еще есть Fn+F и Fn+ , которые не работали из коробки, а это уже не порядок. На этом подготовка закончена. Переходим к.

Отлов событий Нужные пакеты уже стоят, а значит пора действовать. "Набиваем" в любимой консольке:и тыкаем Fn клавиши, а когда натыкаемся жмем Ctrl+C :) В этом примере я 2 раза нажал Fn+F4 (вызов браузера). Что означает вывод? А вот что: первые два слова - тип события; третье - номер события; четвертое - порядковый номер нажатия на эту клавишу (это нам не нужно). Все номера событий для ASUS M50Vc с комментариями.

Поиск файлов-обработчиков событий и разбор их работы Идем в каталог /etc/acpi/events/ и грепаем. Например, для того чтобы узнать какой файл-обработчик события отвечает за нажатие клавиши Fn+F4 выполняем:Перед двоеточием (:) указано имя файла-обработчика, а после - найденная строка. Давай теперь посмотрим содержимое этого файла:Тут первая строка описывает событие, которое нужно отлавливать, а вторая говорит демону acpid какой скрипт нужно выполнить. Теперь глянем что это за скрипт:Как видим, данный скрипт проверяет наличие файла и если его нет завершает свою работу иначе читает его (там переменные с кодами клавиш), вызывает утилиту acpi_fakekey (из пакета acpid) и передает ей в качестве параметра код клавиши 150 ($KEY_WWW). Утилита acpi_fakekey эмулирует нажатие клавиши на клавиатуре, код которой ей передали. Вот и все. Как видишь ничего сложного :)

Простейший пример настройки Fn-клавиш Давай для примера сделаем так, чтобы при нажатии клавиши Fn+F4 у нас запускался гномовский калькулятор (нумерация добавлена для удобства ссылок на строки кода) :Что же мы тут наделали. Давай разбираться :) В первом шаге мы определяем какой файл-обработчик события отвечает за нажатие на клавишу Fn+F4, потом (шаг 2) заглядываем в этот файл-обработчик, чтобы узнать какой скрипт выполняется при нажатии Fn+F4. На шаге 3 мы изменяем скрипт, который выполняется при нажатии Fn+F4, а именно комментируем строку "acpi_fakekey $KEY_WWW" и под ней добавляем строку "acpi_fakekey $KEY_CALC", что заставляет клавишу Fn+F4 работать как кнопку вызова калькулятора (на некоторых мультимедиа клавах такие кнопки есть). Теперь нажми Fn+F4. Ничего не работает? Вот и у меня тоже, для этого я и выполнил команду из шага 4, чтобы убедиться, что калькулятор не запустился (вдруг в фоне повис). Дело в том, что надо перезапустить демона acpid, что мы и делаем в шаге 5. Ну а теперь снова жмем Fn+F4 и радуемся (шаг 6 показывает, что калькулятор запустился).

Заключение или я еще не прощаюсь ;) В этом посте показано, как можно настраивать Fn-клавиши на ноуте. Хоть настройка и производилась в ubuntu на ASUS'е M50Vc, но я уверен, что описанный здесь подход подойдет для любого ноута и linux/bsd системы. Также в этом посте был показан простейший пример (пере)настройки Fn-клавиш. В следующем посте расскажу как я настроил для себя клавиши Fn+F и переключатель на лицевой панели ноута; при этом сделал так, чтобы система запоминала состояние этих клавиш и после перезагрузки восстанавливала их, т.е., например, если тачпад был выключен, то и после перезагрузки он будет выключен.

📎📎📎📎📎📎📎📎📎📎