Клавиши крышки на ThinkPad X41t не работают, когда устройство «трансформируется»

Клавиши крышки на ThinkPad X41t не работают, когда устройство «трансформируется»

У меня ThinkPad X41t под управлением ArchLinux32. На крышке есть несколько кнопок. Я назначил им коды клавиш с помощью setkeycodes. Устройство можно «трансформировать» — т. е. повернуть на 180 градусов вокруг шарнира и закрыть таким образом. Проблема в том, что когда устройство трансформируется, эти кнопки на крышке не работают — они по-прежнему выдают коды клавиш (как сообщает showkey), но ничего не делают. С помощью evtest, я определил две вещи:

  1. Кнопки на крышке относятся к тому же устройству событий, что и обычные кнопки клавиатуры, к «клавиатуре AT Translated Set 2».
  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, и все должно быть готово!

Связанный контент