Я хочу подключить пакетный скрипт к ярлыку. Когда я связываю его в Системные настройки> Клавиатура> Ярлыки , он работает с каждой клавишей, кроме клавиш яркости от моей внешней клавиатуры Apple.
Клавиши яркости распознаются в showkey с помощью кода клавиш 224 и 225 .
xev output:
FocusOut event, serial 41, synthetic NO, window 0x4000001,
mode NotifyGrab, detail NotifyAncestor
FocusIn event, serial 41, synthetic NO, window 0x4000001,
mode NotifyUngrab, detail NotifyAncestor
KeymapNotify event, serial 41, synthetic NO, window 0x0,
keys: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Любые предложения, что я могу сделать?
Так как HAL удерживается от использования и udev
теперь используется, этот подход предпочтен по моему другому ответу (хотя я думаю, что решение с помощью HAL просто).
Однако для многих функциональных клавиш можно просто использовать Параметры настройки системы> Клавиатура> Ярлыки, чтобы связать сценарий, попробовать это сначала! Это сохраняет Вас большая проблема. Поскольку, например, яркость вводит, это не работает (у меня нет подсказки, почему не), поэтому если Вы хотите знать, как изменить поведение, например, ключей яркости, продолжает читать.
Примечание: При выполнении ноутбука Samsung, можно зафиксировать все (в зависимости от модели) функциональные клавиши путем установки samsung-tools
пакет из http://www.voria.org/forum/
Это практическое руководство предполагает, что Вы знаете, как использовать терминал и используете vim
редактор. Если Вы не знаете vim
замените его в командах также gedit
или nano
.
Определение Вашей клавиатуры
/lib/udev/findkeyboards
должен распечатать клавиатуры, которые подключены к компьютеру в моем случае
USB keyboard: input/event9
USB keyboard: input/event7
AT keyboard: input/event4
Теперь существует две опции:
Клавиатуры USB:
Если Вы хотите повторно отобразить свою клавиатуру USB, осмотрите их путем выполнения
udevadm info --export-db | awk '/event9/' RS="" | grep -P 'ID_(VENDOR|MODEL)(?!_ENC)'
где необходимо заменить 9 в awk операторе корректным числом. Вывод должен быть подобен
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
то, которое правильно указывает, что моя клавиатура обрабатывается через мой Logitech USB Receiver (input/event7 оказалось моей мышью Logitech G9, которая имеет некоторые программируемые кнопки).
Клавиатура ноутбука:
Если Вы хотите повторно отобразить свою клавиатуру ноутбука, необходимо помнить число за AT keyboard
который является 4 в моем случае. Также получите dmi информацию для своего ноутбука:
cat /sys/class/dmi/id/sys_vendor
который находится в моем случае
SAMSUNG ELECTRONICS CO., LTD.
и
cat /sys/class/dmi/id/product_name
который находится в моем случае
305U1A
Определите свое текущее отображение Ваших функциональных клавиш
Теперь мы можем определить наш текущий keymapping путем слушания клавиатуры (вставьте корректное число),
sudo /lib/udev/keymap -i input/event4
можно выйти из этой команды при помощи Esc на клавиатуре или Ctrl+c на другой клавиатуре.
Если Ваш экран начинает прокручивать вниз очень трудно, нажмите Esc и Ctrl+c несколько раз и попробуйте еще раз с
sudo /lib/udev/keymap -i input/event4 2> /dev/null
или, если у Вас все еще есть проблема прокрутки
sudo /lib/udev/keymap -i input/event4 > ~/keymap.log
В последнем случае у Вас все еще будет прокрутка, но если Вы нажимаете клавиши функций, они должны войти ~/keymap.log
где можно считать их позже.
Теперь мы можем проверить текущее отображение Ваших Функциональных клавиш путем нажатия их, которые должны дать Вам список как (это - мой Fn+F1 через Fn+F12):
scan code: 0xCE key code: kpplusminus
scan code: 0x89 key code: brightnessdown
scan code: 0x88 key code: brightnessup
scan code: 0x82 key code: switchvideomode
scan code: 0xF9 key code: f23
scan code: 0xA0 key code: mute
scan code: 0xAE key code: volumedown
scan code: 0xB0 key code: volumeup
scan code: 0x43 key code: f9
scan code: 0x44 key code: f10
scan code: 0xB3 key code: prog3
scan code: 0x86 key code: wlan
Теперь запишите скэн-коды, для которых Вы хотите, чтобы поведение изменилось.
Изменение кодов клавиши для скэн-кодов
Если Вы видите, что код клавиши ясно не касается то, что Вы ожидаете, что ключ, чтобы сделать Вас может взглянуть в /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
в целях этого вопроса.
sudo vim /lib/udev/keymaps/custom-brightness
и введите скэн-коды ключей, которые Вы хотите изменить сопровождаемый scancodes, который Вы хотите, чтобы они имели. Мой custom-brightness
похож на это:
# /lib/udev/keymaps/custom-brightness
0x89 prog1
0x88 prog2
Создайте пользовательский ключевой файл версии. Только если Вы изменяете свою клавиатуру ноутбука:
Иногда ключевое событие выпуска не, правильно отправляют, заставляя компьютер зависнуть. Для предотвращения этого, мы также запишем пользовательский ключевой файл версии
sudo vim /lib/udev/keymaps/force-release/custom-brightness
этот файл должен содержать те же скэн-коды, мой похож
# /lib/udev/keymaps/force-release/custom-brightness
0x89
0x88
Удостоверьтесь, что новые отображения загружаются в файлах правил
Теперь мы должны удостовериться, что Ваши отображения загружаются. Мы можем сделать это путем редактирования /lib/udev/rules.d/95-keymap.rules
, таким образом, умно сделать резервное копирование
Снова у нас есть две опции:
Клавиатуры USB:
Так как у Вас есть клавиатура USB, необходимо добавить запись под LABEL="keyboard_usbcheck"
и это должно перейти другие записи Вашего производителя клавиатур. Это вызвано тем, что моя клавиатура с
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
уже подобран одним из правил, и иначе оно перезаписывается.
Добавьте следующее правило, где необходимо измениться ID_VENDOR_ID
и ID_MODEL_ID
и название Вашей контурной карты appropiately
ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c52b", RUN+="keymap $name custom-brightness"
Клавиатура ноутбука:
Если /lib/udev/findkeyboards
сообщаемый Ваша клавиатура ноутбука как AT keyboard
Ваше правило должно гибнуть LABEL="keyboard_vendorcheck"
, иначе поместите его под LABEL="keyboard_modulecheck"
. Снова подвергните его другим записям для Вашего ноутбука manufactorer. Добавьте следующее правило (SAMSUNG ELECTRONICS CO., LTD.
бит долго, таким образом, я использовал подстановочный знак'),
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keymap $name custom_brightness"
Теперь также добавьте правило к /lib/udev/rules.d/95-keyboard-force-release.rules
после резервного копирования его
sudo cp /lib/udev/rules.d/95-keyboard-force-release.rules /lib/udev/rules.d/95-keyboard-force-release.rules.bak
sudo vim /lib/udev/rules.d/95-keyboard-force-release.rules
Снова при других записях Вашего производителя добавляют
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keyboard-force-release.sh $devpath custom_test"
Удостоверьтесь, что udev загружает новые правила
Загрузить новые выполненные правила
sudo adevadm trigger
Примечание: udevadm control --reload-rules
(все еще в инструкциях относительно многих веб-сайтов), не работает.
Теперь проверьте, были ли правила применены успешно
sudo /lib/udev/keymap -i input/event4
который должен теперь сообщить для ключей яркости
scan code: 0x89 key code: prog1
scan code: 0x88 key code: prog2
Повторно отобразите ключи в Параметрах настройки системы
Если последний шаг сообщил о корректных кодах клавиши, любой, который ключи начинают автоматически работать (в случае, если у них сначала были неправильные коды клавиши).
Для яркости все еще необходимо связать ключи к документу на получение, который является теперь возможными Параметрами настройки системы использования> Клавиатура> Ярлыки.
Приятного отдыха
Примечания:
Если Ваши ключи имели неправильный код клавиши и были починены этим подходом, следуйте инструкциям в /usr/share/doc/udev/README.keymap.txt.gz
(можно открыть это, не извлекая использование zless
) и отправьте Вашим результатам адрес электронной почты, упомянутый туда, затем изменения могут быть включены в следующий выпуск. Многие пользователи извлекут выгоду!
Большое спасибо этому полезному сообщению Vaidas Jablonskis.
Согласно man-страницам halevt
является универсальным обработчиком событий HAL. Он устарел и заменен на udev
, но, поскольку я недостаточно знаю о udev
, я дам решение halevt
.
РЕДАКТИРОВАТЬ: после некоторого серьезного пота мне удалось сделать это в udev
. См. мой другой ответ .
Я буду использовать vim
для редактирования файлов, но если вы не знаете vim
, вы можете заменить его на nano
или gedit
.
Установка halevt
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 снова
sudo /etc/init.d/halevt start
И он должен работать!