Как к ключу перекарты XF86Sleep для интервала---xmodmap, xkbcomp и сбоя udev

Я запускаю Ubuntu 16.04.1 LTS. У меня есть удаленное подобное одному здесь (хотя мой просто называют "Дистанционным управлением MCE Vista"), который действует как клавиатура, наряду с реальной клавиатурой. Я пытаюсь повторно отобразить кнопку на удаленном, которое отправляет XF86Sleep для отправки пространства вместо этого, но xkbcomp и xmodmap не ведут себя, как я ожидаю.

Во-первых, я попробовал xkbcomp, поскольку я мог дать ему устройство с-i опцией:

xid=`xinput list | grep 05a4:9881 | grep keyboard | perl -pe 's/^.*=([0-9]+).*/\1/'`
xkbcomp -i $xid ~/remote.xkb $DISPLAY

Я смог изменить ключ, который отправляет KP_Multiply, чтобы не отправить подчеркиванию проблему путем изменения:

 key <KPMU> {
     type= "CTRL+ALT",
     symbols[Group1]= [     KP_Multiply,     KP_Multiply,     KP_Multiply,     KP_Multiply,   XF86ClearGrab ]
 };

кому:

 key <KPMU> {
     type= "CTRL+ALT",
     symbols[Group1]= [      underscore,      underscore,      underscore,      underscore,   XF86ClearGrab ]
 };

Но когда я изменил строку, которая сказала:

 key <I150> {         [       XF86Sleep ] };

кому:

 key <I150> {         [           space ] };

это не имело никакого эффекта; нажатие кнопки сна все еще поместило мой компьютер для сна, даже при том, что xev сообщает, что ключ отправляет пространство (после того, как я бужу его):

KeyRelease event, serial 29, synthetic NO, window 0x1a00001,
     root 0x1d7, subw 0x0, time 1621457, (99,102),  root:(1797,144),
     state 0x0, keycode 150 (keysym 0x20, space), same_screen YES,
     XKeysymToKeycode returns keycode: 65
     XLookupString gives 1 bytes: (20) " "
     XFilterEvent returns: False

Затем я попробовал xmodmap, как это:

% xmodmap -e 'keycode 150 = space'

(Это влияло бы на реальную клавиатуру также, но это хорошо, поскольку моя клавиатура не имеет кнопки сна, и если бы она сделала то я хотел бы отключить ее так или иначе.) После этого кнопка сна ничего не делает в программах как emacs, и консоль---компьютер не засыпает, но нет сгенерированного---никакого пространства, в то время как xev все еще сообщает о пространстве (точно так же, как вышеупомянутый).

Еще более странный, я попробовал это то же самое другим ключом, ключом "домашней страницы". xkbcomp вид схемы работ, но любое время, я использую свою реальную клавиатуру, ключ, возвращается к XF86HomePage, пока я не использую, другой включает удаленное. (Этого не происходит с ключом XF86Sleep; неважно, как может клавиши, которые я нажал на удаленном, это все еще поместило компьютер для сна, если я не делаю команду xmodmap также.), С другой стороны, в этом случае команда xmodmap действительно работает, по незначительной стоимости наличия кнопки "Домой" на моей клавиатуре также отправляют пространство.

Какая-либо идея, что продолжается здесь, или как я мог повторно отобразить фактический ключ сна к пространству? Я посмотрел на различные подобные вопросы здесь, но ни один, кажется, не соответствует. (Кроме этого, который не имеет ответа.)

править:

Наконец имел шанс попробовать ответ от ssokolow ниже. На основе ссылок, если, это должно работать. К сожалению, это не делает. Нет никаких сообщений об ошибках, но нет никаких изменений в кодах клавиши или keysysms, который я вижу в (например). xev.

Вот то, что я сделал:

(1) Используйте lsusb для нахождения рассматриваемого устройства:

Bus 005 Device 002: ID 05a4:9881 Ortek Technology, Inc. IR receiver [VRC-1100 Vista MCE Remote Control]

(2) Используйте evtest для нахождения кодов MSC_SCAN для нескольких ключей:

sudo evtest ... /dev/input/event5: HID 05a4:9881 /dev/input/event6: HID 05a4:9881 ... (Заметьте два отдельных/dev/input/events. Они ключи, которыми я интересуюсь в данный момент, находятся на № 6, но попытка включает event5, не работают ни один). Они - ключи "домашней страницы" и "питания":

Event: time 1514752612.650320, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0223 Event: time 1514752612.650320, type 1 (EV_KEY), code 172 (KEY_HOMEPAGE), value 1 Event: time 1514752612.650320, -------------- SYN_REPORT ------------ Event: time 1514752612.690312, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0223 Event: time 1514752612.690312, type 1 (EV_KEY), code 172 (KEY_HOMEPAGE), value 0 Event: time 1514752612.690312, -------------- SYN_REPORT ------------ Event: time 1514752615.826339, type 4 (EV_MSC), code 4 (MSC_SCAN), value 10082 Event: time 1514752615.826339, type 1 (EV_KEY), code 142 (KEY_SLEEP), value 1 Event: time 1514752615.826339, -------------- SYN_REPORT ------------ Event: time 1514752615.826366, type 1 (EV_KEY), code 142 (KEY_SLEEP), value 0 Event: time 1514752615.826366, -------------- SYN_REPORT ------------

Создайте файл/etc/udev/hwdb.d/99-vrc1100-remote.hwdb, тщательно удостоверившись, что на строках KEYBOARD_KEY существует только одно пространство:

evdev:input:b0003v05a4p9881* KEYBOARD_KEY_10082=playpause KEYBOARD_KEY_C0223=q

У меня есть udev версия 229, таким образом, в одной из ссылок в ответе говорится, что это - правильный формат (evdev:input:).

Выполненный:

sudo systemd-hwdb update

Если я работаю

sudo systemd-hwdb query 'evdev:input:b0003v05a4p9881*'

Я возвращаю последние две строки своего файла, таким образом, это, кажется, работало.

Я затем работаю:

sudo udevadm trigger --verbose

и я действительно вижу то, что, кажется, распечатанные соответствующие устройства:

... /sys/devices/pci0000:00/0000:00:1a.2/usb5/5-1/5-1:1.0/0003:05A4:9881.0005/input/input8/event5 /sys/devices/pci0000:00/0000:00:1a.2/usb5/5-1/5-1:1.1/0003:05A4:9881.0006/input/input9/event6 ...

Но ключи все еще не работают. Ключ домашней страницы все еще производит:

KeyPress event, serial 28, synthetic NO, window 0x4600001, root 0x1d7, subw 0x0, time 8089976, (127,61), root:(998,540), state 0x10, keycode 180 (keysym 0x1008ff18, XF86HomePage), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False

Событие KeyRelease, последовательные 28, синтетический продукт нет, окно 0x4600001, базируется 0x1d7, subw 0x0, время 8090016, (127,61), корень: (998,540), состояние 0x10, код клавиши 180 (keysym 0x1008ff18, XF86HomePage), same_screen ДА, XLookupString дает 0 байтов: возвраты XFilterEvent: Ложь

Питание (сон) ключ, кажется, ничего не делает. (В какой-то момент я думаю, что мне удалось отключить сон, хотя я не помню как.)

Я также пытался перезагрузить, который не помог также. Я пытался работать:

sudo udevadm control --log-priority=debug

После этого я просмотрел/var/log/syslog, но я не нашел ничего, что выглядело полезным.

0
задан 31 December 2017 в 14:35

1 ответ

Вещь понять состоит в том, который вводил обрабатывающие работы как это на Ubuntu:

hardware --scancode--> kernel --keycode--> X11 --> keysym --> application

Я имел подобную проблему и волновал обход моего пути вниз стек и назад вовремя, пока я не нашел решение, которое работало на мои 14.04 LTS.

Я не мог заставить уровень X11 изменять вещи, таким образом, я просто спустился по используемому слою udev переопределять, как ядро отображает scancodes на коды клавиши.

Так как Вы находитесь на 16,04, Вы не должны должны быть идти насколько я сделал

(14.04 находится в странном промежуточном состоянии, где оно имеет последнюю версию udev, перечисленного как требование внешнего помощника, но оно не включает того внешнего помощника и что-то, что я нашел, позже предполагает, что оно может на самом деле поддерживать внутренний путь через бэкпортированные патчи..., но только с некоторыми дополнительными командами для принуждения обновления конфигурации.)

Вот сводка подхода, который должен работать в 16,04:

  1. Создайте /etc/udev/hwdb.d/whatever.hwdb файл согласно формату, полученному в итоге в любой из этих ссылок: [1] [2] [3] [4] [5]
  2. Выполненный sudo systemd-hwdb update если у Вас есть он и sudo udevadm hwdb --update иначе.
  3. Выполненный sudo udevadm trigger, отключите и повторно включите устройство или перезагрузку.

ВАЖНЫЙ: Только используйте одно пространство для расположения с отступом KEYBOARD_KEY_ строки или это перестанут работать тихо.

0
ответ дан 7 November 2019 в 02:15

Другие вопросы по тегам:

Похожие вопросы: