Como desabilitar / habilitar o touchpad para o Lenovo Yoga 900 13ISK2

1

Resolvido (2016-11-15) : Veja mais abaixo a pergunta.

Descrição detalhada do problema

Estou tentando desativar o touchpad quando pressiono a tecla Fn + F6 (na verdade eu não tenho que pressionar a tecla Fn por causa da minha configuração do BIOS) no meu Lenovo Yoga 900-13ISK2.

Antes de tentar qualquer coisa sempre que eu pressionasse a tecla Fn + F6, seguindo no dmesg :

atkbd serio0: Unknown key pressed (translated set 2, code 0xbf on isa0060/serio0).
atkbd serio0: Use 'setkeycodes e03f <keycode>' to make it known.
atkbd serio0: Unknown key released (translated set 2, code 0xbf on isa0060/serio0).
atkbd serio0: Use 'setkeycodes e03f <keycode>' to make it known.

Além disso, sempre que coloco o laptop no "modo tablet", posso ver seguindo no dmesg:

atkbd serio0: Unknown key pressed (translated set 2, code 0xbf on isa0060/serio0).
atkbd serio0: Use 'setkeycodes e03f <keycode>' to make it known.
ideapad_laptop: Unknown event: 1
atkbd serio0: Unknown key released (translated set 2, code 0xbf on isa0060/serio0).
atkbd serio0: Use 'setkeycodes e03f <keycode>' to make it known.

Parece que, quando colocado no modo tablet, é como pressionando / liberando a tecla Fn + F6 junto com outro evento. Que último evento parece estar relacionado com a luz de fundo do teclado pressionando Fn + Espaço para controlar a luz de fundo induz os mesmos registros o código%). Ao sair do modo tablet para o modo laptop, somente o dmesg é registrado.

Tudo isso acontece usando o Linux 4.8. Eu usei o Ubuntu ideapad_laptop: Unknown event: 1 como base para criar o arquivo config-4.4.0-43-generic (mostrado no link ).

Depois, criei .config :

evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO:pn*80UE*:pvr*YOGA*900-13ISK2*
 KEYBOARD_KEY_bf=touchpad_toggle

Após /etc/udev/hwdb.d/10-yoga.hwdb e udevadm hwdb -u (ou reinicialização), pressione o Fn + F6 pára de registrar os eventos chave desconhecidos e udevadm trigger mostra o chave:

Event: type 4 (EV_MSC), code 4 (MSC_SCAN), value bf
Event: type 1 (EV_KEY), code 530 (KEY_TOUCHPAD_TOGGLE), value 0

Mas o touchpad permanece ativado.

Consegui desativar / ativar o touchpad emitindo:

$ xinput set-prop "SYNA2B29:00 06CB:77C6" 'Device Enabled' 0
$ xinput set-prop "SYNA2B29:00 06CB:77C6" 'Device Enabled' 1

Neste momento, estou preso. Qual componente deve capturar o Evento KEY_TOUCHPAD_TOGGLE e fazer algo sobre isso?

Eu sei que o touchpad está sendo acionado pelo driver 'i2c_designware_platform'. O teclado parece ser movido por 'ideapad_laptop'. Isso é razoável?

Solução

A solução é alterar o arquivo evtest para:

evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO:pn*80UE*:pvr*YOGA*900-13ISK2*
 KEYBOARD_KEY_bf=f21

@dirkt forneceu informações sobre o arquivo /etc/udev/hwdb.d/10-yoga.hwdb . A leitura deste arquivo é clara e o X11 mapeia a chave F21 para XF86TouchpadToggle:

key <FK21>   {      [ XF86TouchpadToggle    ]       };

Portanto, em vez de mapear o scancode para /usr/share/X11/xkb/symbols/inet , mapeio-o apenas para a tecla de função F21.

Nenhum script é necessário.

Edições restantes

Este laptop envia esse evento quando você o coloca no modo tablet. Mas ao voltar para o modo laptop, ele não é enviado novamente, portanto, o touchpad permanece desativado.

Além disso, se você desativar o touchpad enquanto estiver no modo laptop, o modo tablet permite isso.

    
por manu 15.11.2016 / 05:20

2 respostas

1

Você já resolveu todas as partes difíceis do quebra-cabeça: -)

Você precisa executar um programa dedicado que reaja ao comando de alternância ou use um programa existente que esteja sendo executado de qualquer maneira e possa reagir às chaves. Alguns gerenciadores de janelas podem ser configurados com flexibilidade para reagir às teclas, por exemplo, estou usando fvwm para as teclas de brilho e volume do meu laptop. Então descubra o gerenciador de janelas que você está usando e como você pode configurá-lo.

Você pode descobrir o código-chave X em vez do código-chave do kernel executando xev , concentrando-o e pressionando Fn + F6.

O segundo problema é que para executar uma operação de alternância, você precisa saber o estado atual. A maneira mais simples é provavelmente escrever um pequeno script de shell para ler a propriedade Device Enabled com xinput e, em seguida, ativá-lo ou desativá-lo com xinput set-prop . Execute este script de shell a partir do gerenciador de janelas (se puder) sempre que receber o código X parecido que você descobriu.

Solução

A solução é alterar o arquivo /etc/udev/hwdb.d/10-yoga.hwdb para:

evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO:pn*80UE*:pvr*YOGA*900-13ISK2*
 KEYBOARD_KEY_bf=f21

@dirkt forneceu informações sobre o arquivo /usr/share/X11/xkb/symbols/inet . A leitura deste arquivo é clara e o X11 mapeia a chave F21 para XF86TouchpadToggle:

key <FK21>   {      [ XF86TouchpadToggle    ]       };

Portanto, em vez de mapear o scancode para touchpad_toggle , mapeio-o apenas para a tecla de função F21.

Nenhum script é necessário.

Edições restantes

Este laptop envia esse evento quando você o coloca no modo tablet. Mas ao voltar para o modo laptop, ele não é enviado novamente, portanto, o touchpad permanece desativado.

Além disso, se você desativar o touchpad enquanto estiver no modo laptop, o modo tablet permite isso.

    
por 15.11.2016 / 07:55
0

Usando synaptics sob o xorg, eu costumo usar:

 synclient touchpadoff=1 # for disable and =0 for enable
    
por 15.11.2016 / 09:52