
У меня ThinkPad X41t под управлением ArchLinux32. На крышке есть несколько кнопок. Я назначил им коды клавиш с помощью setkeycodes
. Устройство можно «трансформировать» — т. е. повернуть на 180 градусов вокруг шарнира и закрыть таким образом. Проблема в том, что когда устройство трансформируется, эти кнопки на крышке не работают — они по-прежнему выдают коды клавиш (как сообщает showkey
), но ничего не делают. С помощью evtest
, я определил две вещи:
- Кнопки на крышке относятся к тому же устройству событий, что и обычные кнопки клавиатуры, к «клавиатуре AT Translated Set 2».
«Трансформация» — это узнаваемое событие. Вот отчет от evtest:
Event: time ..., type 5 (EV_SW), code 1 (SW_TABLET_MODE), value 1 Event: time ..., -------------- SYN_REPORT ------------ Event: time ..., type 5 (EV_SW), code 1 (SW_TABLET_MODE), value 0 Event: time ..., -------------- SYN_REPORT ------------
Я также пробовал нажимать клавиши клавиатуры, когда событие трансформации уже произошло, используя маленький джойстик, и они также ничего не делали.
Итак, я подозреваю, что когда событие трансформации запускает что-то, это заставляет ОС игнорировать любые нажатия клавиш с этого конкретного устройства. Есть ли способ определить, что и как это делает, и как мне добавить кнопки Lid в исключение из этой штуки, чтобы я мог использовать их, когда устройство трансформируется?
Заранее спасибо.
решение1
Исправлено в libinput. Теперь трансформация не отключает обычную клавиатуру, но крышка не давит на клавиши, так что это не проблема.
решение2
Для тех, кто столкнулся с такой же проблемой, есть простое решение, на которое я только что наткнулся.
Сначала найдите идентификатор устройства xinput кнопок вашего планшета, запустив xinput
. Это должно выглядеть примерно так:
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ TPPS/2 IBM TrackPoint id=10 [slave pointer (2)]
⎜ ↳ Wacom Serial Penabled Pen stylus id=12 [slave pointer (2)]
⎜ ↳ Wacom Serial Penabled Pen eraser id=13 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Sleep Button id=8 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=9 [slave keyboard (3)]
↳ ThinkPad Extra Buttons id=11 [slave keyboard (3)]
Я не уверен, что эти идентификаторы одинаковы во всех случаях, но в моем случае искомая запись имеет идентификатор 11. Как только вы его получите, отключите его, введя xinput disable 11
, и все должно быть готово!