Intereting Posts
Как сделать logrotate для копирования truncate исходный файл только после новой строки Как установить переменную среды JAVA_HOME, которая будет сохранена при выходе? ModSecurity по умолчанию использует index.html в POST конвертировать формат даты в журнал Предотвращение apt-get обновления от использования определенных репозиториев Создание пакета RPM без источника странное поведение vi на OSX Debian ssh terminal Запустить узел и хром после загрузки системы Добавление виртуального сетевого адаптера в centos 7, не работающего в облаке Как использовать: cat << EOF XFCE: как удалить опцию «Всегда сверху» XFCE, как показывать всплывающие окна при использовании функциональных клавиш Как предотвратить команду HP-UX «меньше» от испортить мое приглашение? Настройте сервер мониторинга для получения предупреждений при сбое hw / sw и хотите определить определенные правила для мониторинга в работе сервера ssh из порта 80 в порт 22?

Захват ключевого ввода из устройства событий и его отображение (кнопка переключения сенсорной панели не отображается)

У меня есть Lenovo IdeaPad Yoga 13 с установленной Ubuntu 13.10. Устройство имеет кнопку «Toggle TouchPad» на клавиатуре ( F5 ). Кнопки F * на клавиатуре меняются на противоположные (для получения F5 мне нужно нажать Fn + F5 , а F5 – это ключ переключения).

Я узнал, что кнопка фактически читается клавиатурой (а не TouchPad, как некоторые устройства), которая находится на /dev/input/event3 . Поэтому, используя sudo input-events 3 я смог выяснить, что кнопка отправляет код сканирования 190:

Выходной sudo lsinput :

 /dev/input/event3 bustype : BUS_I8042 vendor : 0x1 product : 0x1 version : 43907 name : "AT Translated Set 2 keyboard" phys : "isa0060/serio0/input0" bits ev : EV_SYN EV_KEY EV_MSC EV_LED EV_REP 

Выходные данные sudo input-events 3 :

 23:13:03.849392: EV_MSC MSC_SCAN 190 23:13:03.849392: EV_SYN code=0 value=0 23:13:03.855413: EV_MSC MSC_SCAN 190 23:13:03.855413: EV_SYN code=0 value=0 

Никакие другие программы (например, xev ), похоже, не умеют читать, кроме input-events . Есть ли способ нарисовать эту кнопку, чтобы переключить TouchPad на моем ноутбуке? Если да, то как я могу это сделать?

Как выясняется, ядро ​​его подбирало, но продолжало жаловаться, что оно не признано.

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

Откройте терминал и запустите dmesg | grep -A 1 -i setkeycodes dmesg | grep -A 1 -i setkeycodes . Это даст вам несколько записей:

 [ 9.307463] atkbd serio0: Unknown key pressed (translated set 2, code 0xbe on isa0060/serio0). [ 9.307476] atkbd serio0: Use 'setkeycodes e03e <keycode>' to make it known. 

Нам интересно шестнадцатеричное значение после «setkeycodes», в этом случае это e03e . Если у вас их несколько, вы можете запустить tail -f /var/log/kern.log . Как только вы это сделаете, вы можете нажать кнопку, которую вы ищете, и это даст вам ту же строку, что и выше, и снова нам нужно только шестнадцатеричное значение. Запомните это.

Теперь запустите xmodmap -pke | less xmodmap -pke | less и найти соответствующее сопоставление. В моем случае мне нужно было сопоставить это, чтобы переключить мою сенсорную панель, что означает, что меня заинтересовала следующая строка:

 keycode 199 = XF86TouchpadToggle NoSymbol XF86TouchpadToggle 

Если вы не можете найти то, что вас интересует, прочитайте также ответ @Gilles, так как вы также можете определить пользовательские сопоставления, затем прочитайте (если ядро ​​его прочитает, вам не нужно будет добавлять его в xorg.conf. г)

Теперь я sudo setkeycodes [hexadecimal] [keycode] следующую команду: sudo setkeycodes [hexadecimal] [keycode] , поэтому в моем случае это стало: setkeycodes e03e 199 .

Теперь вы можете использовать следующую строку, чтобы проверить, работает ли она и / или у вас есть правильное отображение:

 xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p' 

Когда вы запустите эту команду, вам нужно сосредоточиться на вновь открывшемся окне ( xev ) и проверить вывод консоли. В моем случае он читается следующим образом:

 207 NoSymbol 

Очевидно, это было неправильно, поскольку я запросил код 199 , поэтому он отображается на XF86TouchpadToggle . Я снова проверил xmodmap -pke и заметил, что keycode 207 на самом деле сопоставлен с NoSymbol , и я заметил, что разница в setkeycodes 8, поэтому я снова попробовал команду setkeycodes , но ключ сопоставлен с keycode 191 .

 sudo setkeycodes e03e 191 

Это сработало отлично.

EDIT – решение, которое я предоставил, чтобы работать над запуском, нет. Я подумаю об этом завтра и уточню этот ответ. На данный момент, я полагаю, вы можете запустить это при запуске вручную.

По внешнему виду устройство представляет собой клавиатуру (распознанную в программном обеспечении отдельно от «основной» клавиатуры), но X-сервер ее не слушает.

Попробуйте добавить раздел ввода в /etc/X11/xorg.conf.d . То есть, создайте каталог /etc/X11/xorg.conf.d если он еще не существует, и создайте файлы с extra-keyboard-buttons в этом каталоге, содержащие

 Section "InputClass" Identifier "extra-keyboard-buttons" Driver "kbd" MatchProduct "AT Translated Set 2 keyboard" EndSection 

Я не уверен в этой строке MatchProduct ; если он не работает, попробуйте MatchXXX директивами MatchXXX .

Как только этот файл настроен правильно, при запуске X-сервера он должен обрабатывать события с этой клавиатуры, и вы должны видеть события в xev и в других местах. Обратите внимание на код ключа (я не уверен, что в этом случае код ключа X11 будет таким же, как и код аппаратного ключа) и связать с ним keyym. Вы можете сделать это через файл с именем .Xmodmap в домашнем каталоге, содержащий

 keycode 190 = XF86_Launch5 

Теперь вы можете определить сочетания клавиш с помощью этих клавиш.

Для переключения тачпада используйте команду xinput . Запустите xinput list чтобы узнать, какие устройства ввода доступны, и обратите внимание на название своего сенсорного планшета (я назову его Touchpad ниже). Запустите xinput list-props Touchpad чтобы перечислить его свойства; один из них должен называться «Устройство включено» рядом с ним рядом (например, 135). Следующий скрипт переключит тачпад:

 #!/bin/sh device_name='Touchpad' property=135 flipped_state=$(xinput list-props "$device_name" | awk "/\\($property\\)/ {print 1 - \$NF}") xinput set-prop "$device_name" "$property" "$flipped_state" 

Сохраните это в файле ~/bin/toggle-touchpad и сделайте его исполняемым ( chmod +x ~/bin/toggle-touchpad ). Чтобы связать его с ключом, установите xbindkeys и настройте его для запуска своего скрипта, поместив следующие строки в ~/.xbindkeysrc :

 "toggle-touchpad" XF86_Launch5