
Eu tenho um ThinkPad X41t rodando ArchLinux32. Na tampa possui vários botões. Eu dei a eles códigos de acesso com setkeycodes
. O dispositivo pode ser "transformado" - ou seja, girado 180 graus em torno da dobradiça e fechado assim. O problema é que, quando o dispositivo é transformado, esses botões da tampa não funcionam - eles ainda produzem códigos de acesso (conforme relatado por showkey
), mas não fazem nada. Usando evtest
, determinei duas coisas:
- Os botões da tampa pertencem ao mesmo dispositivo de evento que os botões normais do teclado, ao "teclado AT Translated Set 2".
Ser 'transformado' é um evento reconhecível. Aqui está o relatório do 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 ------------
Também tentei pressionar as teclas do teclado quando o evento de transformação já acontecia com o bastão pequeno, e eles também não estavam fazendo nada.
Portanto, suspeito que quando o evento de transformação desencadeia algo, isso faz com que o sistema operacional ignore qualquer pressionamento de tecla deste dispositivo específico. Existe uma maneira de determinar o que e como isso acontece, e como adiciono botões de tampa como exceção, para que eu possa usá-los quando o dispositivo for transformado?
Desde já, obrigado.
Responder1
Corrigido em libinput. Agora, a transformação não desativa o teclado normal, mas a tampa não pressiona as teclas, então não é um problema.
Responder2
Para quem se depara com o mesmo problema, existe uma solução fácil que acabei de encontrar.
Primeiro, encontre o ID do dispositivo xinput dos botões do seu tablet executando xinput
. Deve ser algo assim:
⎡ 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)]
Não tenho certeza se esses IDs são iguais em todos os casos, mas no meu caso, a entrada que estou procurando tem um ID 11. Depois de fazer isso, desative-o digitando xinput disable 11
e você estará pronto para prosseguir !