Я запускаю 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, но я не нашел ничего, что выглядело полезным.
Вещь понять состоит в том, который вводил обрабатывающие работы как это на Ubuntu:
hardware --scancode--> kernel --keycode--> X11 --> keysym --> application
Я имел подобную проблему и волновал обход моего пути вниз стек и назад вовремя, пока я не нашел решение, которое работало на мои 14.04 LTS.
Я не мог заставить уровень X11 изменять вещи, таким образом, я просто спустился по используемому слою udev
переопределять, как ядро отображает scancodes на коды клавиши.
Так как Вы находитесь на 16,04, Вы не должны должны быть идти насколько я сделал
(14.04 находится в странном промежуточном состоянии, где оно имеет последнюю версию udev, перечисленного как требование внешнего помощника, но оно не включает того внешнего помощника и что-то, что я нашел, позже предполагает, что оно может на самом деле поддерживать внутренний путь через бэкпортированные патчи..., но только с некоторыми дополнительными командами для принуждения обновления конфигурации.)
Вот сводка подхода, который должен работать в 16,04:
/etc/udev/hwdb.d/whatever.hwdb
файл согласно формату, полученному в итоге в любой из этих ссылок: [1] [2] [3] [4] [5]sudo systemd-hwdb update
если у Вас есть он и sudo udevadm hwdb --update
иначе.sudo udevadm trigger
, отключите и повторно включите устройство или перезагрузку.ВАЖНЫЙ: Только используйте одно пространство для расположения с отступом KEYBOARD_KEY_
строки или это перестанут работать тихо.