Решение с использованием halevt
Согласно man-страницам halevt
это общий обработчик событий HAL. Это устарело и заменено на udev
, но так как я не знаю достаточно о, udev
я дам halevt
решение.
РЕДАКТИРОВАТЬ: после некоторого серьезного пота, мне удалось сделать это в udev
. Смотрите мой другой ответ .
Я буду использовать vim
для редактирования файлов, но если вы не знаете, vim
вы можете заменить его на nano
или gedit
.
Установка подъема
sudo apt-get update && sudo apt-get install halevt
Определение событий, которые вы хотите привязать к сценарию.
Остановите halevt
демон, который уже запущен:
sudo /etc/init.d/halevt stop
Теперь посмотрим, halevt
может ли распознавать события клавиш, которые вы хотите использовать, запустите слушатель:
sudo -u halevt halevt -fig:plugdev
Теперь нажмите функциональную клавишу на клавиатуре, к которой вы хотите привязать скрипт. Я знаю, что ОП хочет, чтобы его клавиши яркости работали, так что давайте продолжим. Вывод для клавиш яркости должен выглядеть примерно так:
Condition: /org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port_logicaldev_input,ButtonPressed (brightness-down)
Condition: /org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port_logicaldev_input,ButtonPressed (brightness-up)
Вы можете видеть , что brightness-down
и brightness-up
события передаются.
Привязать событие к сценарию.
Теперь отредактируйте файл /etc/halevt/halevt.xml
:
sudo vim /etc/halevt/halevt.xml
и добавьте следующие строки (я сделал это внизу, прямо перед </halevt:Configuration>
):
<halevt:Device match="hal.info.category = input">
<halevt:Condition name="ButtonPressed" value="brightness-up" exec="sudo /home/user/brightness-script.sh up"/>
<halevt:Condition name="ButtonPressed" value="brightness-down" exec="sudo /home/user/brightness-script.sh down"/>
</halevt:Device>
где, конечно, вы должны перейти value
к событию, полученному от слушателя, и exec
командой, которую вы хотите выполнить.
Дайте halevt пользователю разрешение на выполнение команды или скрипта.
Поскольку halevt
демон запускается от имени halevt
пользователя, вы должны дать ему разрешение делать то, что вы указали exec
.
Выполнить (не забудьте заменить vim
выбранным редактором)
sudo EDITOR=vim visudo
и добавьте следующие строки внизу
halevt ALL=(root) NOPASSWD: /home/user/brightness-script.sh
и сохранить и выйти.
Убедитесь, что ваш скрипт исполняемый
sudo chmod +x /home/user/brightness-script.sh
Запустите halevt daemon снова
sudo /etc/init.d/halevt start
И это должно работать!
udev
. Но не стесняйтесь придерживаться другого решения, важно то, что оно работает;)E: Unable to locate package halevt
14.04.Решение с использованием Udev
Поскольку HAL устарел и
udev
используется в настоящее время, этот подход предпочтительнее моего другого ответа (хотя я думаю, что решение с использованием HAL проще).Однако для многих функциональных клавиш вы можете просто использовать Системные настройки> Клавиатура> Сочетания клавиш, чтобы связать скрипт, попробуйте сначала! Это спасает вас от многих проблем. Например, для клавиш яркости это не работает (я понятия не имею, почему нет), поэтому, если вы хотите узнать, как изменить поведение, например, клавиш яркости, читайте дальше.
ПРИМЕЧАНИЕ . Если вы используете ноутбук Samsung, вы можете исправить все (в зависимости от модели) функциональные клавиши, установив
samsung-tools
пакет с http://www.voria.org/forum/.Это руководство предполагает, что вы знаете, как использовать терминал, и использует
vim
редактор. Если вы не знаете,vim
пожалуйста, замените его в командах наgedit
илиnano
.Определение вашей клавиатуры
должен печатать клавиатуры, которые подключены к компьютеру, в моем случае
Теперь есть два варианта:
Клавиатуры USB :
если вы хотите переназначить клавиатуру USB, проверьте их, запустив
где вы должны заменить 9 в выражении awk на правильный номер. Вывод должен быть похож на
это правильно указывает на то, что моя клавиатура обрабатывается через мой USB-приемник Logitech (input / event7 оказалась моей мышью Logitech G9, у которой есть несколько программируемых кнопок).
Клавиатура ноутбука :
если вы хотите переназначить клавиатуру ноутбука, вы должны запомнить номер для
AT keyboard
4 в моем случае. Также получите информацию dmi для вашего ноутбука:что в моем случае
а также
что в моем случае
Определите текущее отображение ваших функциональных клавиш
Теперь мы можем определить наше текущее сопоставление клавиш, прослушивая клавиатуру (введите правильное число)
Вы можете выйти из этой команды, используя Escна клавиатуре, или Ctrl+ cна другой клавиатуре.
Если ваш экран начинает очень сильно прокручиваться, нажмите Escи Ctrl+ cнесколько раз и попробуйте снова
или, если у вас все еще есть проблема с прокруткой
В последнем случае у вас все еще будет прокрутка, но если вы нажмете функциональные клавиши, они должны перейти туда,
~/keymap.log
где вы сможете прочитать их позже.Теперь мы можем проверить текущее отображение ваших функциональных клавиш, нажав их, что должно дать вам список вроде (это мой Fn+ F1через Fn+ F12):
Теперь запишите коды сканирования, для которых вы хотите изменить поведение.
Изменение кодов клавиш для кодов сканирования
Если вы видите код ключа явно не покрывает то , что вы ожидаете , что ключ сделать вы можете посмотреть в
/usr/include/linux/input.h
соответствии с клавишами и кнопками , чтобы увидеть , если есть ключевой код , который лучше соответствует тому , что вы на самом деле хотите , чтобы это произошло. Коды ключей представлены в формате,KEY_KEYCODE
и вы должны записать деталь после этогоKEY_
в нижнем регистре. Иногда изменения этого достаточно, чтобы решить проблему.Однако клавиши яркости часто имеют правильный код, связанный с ними, и это то, что не позволяет им переназначаться. Поэтому нам нужно изменить их на другие коды клавиш. Мы будем использовать
prog1
иprog2
для этого примера, потому что они не используются на моем компьютере, однако вы также можете использоватьf13
черезf24
, илиf20
через,f24
если у вас есть клавиатура Apple, которая имеет F1сквозные F19клавиши.Создайте пользовательскую раскладку :
Создайте файл раскладки в каталоге
/lib/udev/keymaps
с подходящим именем, взгляните на вывод,ls /lib/udev/keymaps
чтобы найти подходящие имена. Я собираюсь сcustom-brightness
целью этого вопроса.и введите коды сканирования клавиш, которые вы хотите изменить, а затем коды сканирования, которые вы хотите, чтобы они были. Моя
custom-brightness
выглядит так:Создайте собственный файл релиза ключа. Только в том случае, если вы меняете клавиатуру ноутбука :
иногда событие отпускания ключа отправляется неправильно, что приводит к зависанию компьютера. Чтобы избежать этого, мы также напишем специальный файл релиза ключа
этот файл должен содержать те же коды сканирования, мой выглядит
Убедитесь, что новые сопоставления загружены в файлы правил.
Теперь нам нужно убедиться, что загружены ваши сопоставления. Мы можем сделать это путем редактирования
/lib/udev/rules.d/95-keymap.rules
, поэтому лучше сделать резервную копиюОпять же у нас есть два варианта:
Клавиатуры USB :
поскольку у вас есть клавиатура USB, вы должны добавить свою запись под
LABEL="keyboard_usbcheck"
ней, и она должна быть позади других записей вашего производителя клавиатуры. Это потому, что моя клавиатура суже соответствует одному из правил, а в противном случае оно перезаписывается.
Добавьте следующее правило, где вы должны соответствующим образом изменить
ID_VENDOR_ID
иID_MODEL_ID
и имя вашей раскладки клавиатуры.Клавиатура ноутбука :
если вы
/lib/udev/findkeyboards
заявили, что клавиатура ноутбукаAT keyboard
должна быть нарушенаLABEL="keyboard_vendorcheck"
, в противном случае поместите ее подLABEL="keyboard_modulecheck"
. Снова поместите это под другими записями для вашего производителя ноутбуков. Добавьте следующее правило (SAMSUNG ELECTRONICS CO., LTD.
оно длинное, поэтому я использовал подстановочный знак)Теперь также добавьте правило
/lib/udev/rules.d/95-keyboard-force-release.rules
после резервного копированияСнова под другими записями вашего производителя добавить
Убедитесь, что udev загружает новые правила.
Чтобы загрузить новые правила, запустите
ПРИМЕЧАНИЕ:
udevadm control --reload-rules
(все еще в инструкциях на многих сайтах) не работает.Теперь проверьте, были ли правила успешно применены
который теперь должен сообщать о яркости клавиш
Переопределите ключи в Системных настройках.
Если на последнем шаге сообщалось о правильных кодах клавиш, автоматически запускаются клавиши (если они сначала имели неправильные коды клавиш).
Для яркости вам все равно нужно привязать клавиши к скрипту, что теперь возможно с помощью Системные настройки> Клавиатура> Сочетания клавиш .
наслаждаться
Примечания :
Если ваши ключи имели неправильный код ключа и были исправлены с помощью этого подхода, пожалуйста, следуйте инструкциям в
/usr/share/doc/udev/README.keymap.txt.gz
(вы можете открыть это, не распаковывая, используяzless
) и отправьте свои результаты на адреса электронной почты, упомянутые там, тогда изменения могут быть включены в следующий выпуск. Многие пользователи выиграют!Большое спасибо за этот полезный пост Vaidas Jablonskis.
источник
$ /lib/udev/findkeyboards bash: /lib/udev/findkeyboards: No such file or directory
также$ /lib/udev/findkeyboards bash: /lib/udev/findkeyboards: No such file or directory