Mousepad não funciona no Lenovo Thinkpad

4

Eu tive um problema estranho aqui - o mouse sináptico integrado / o mouse de borracha não funciona no Linux.

O mouse / mousepad integrado só funciona enquanto o Windows os ativa primeiro. Eu posso fazer muitas reinicializações no Linux e eles continuam trabalhando. Eles serão reconhecidos desde que o notebook não tenha perdido o poder.

Se o notebook esgotar toda a bateria, só poderei usar o mouse / mouse novamente se eu inicializar no Windows primeiro .

Então eu posso reproduzir o bug facilmente, retirando a bateria enquanto o Linux está rodando. Dessa forma, o mousepad não será reconhecido até que inicialize no Windows novamente. Portanto, parece que os drivers de código aberto não são capazes de reconhecer o dispositivo quando o hardware está em um estado desconhecido (inicialização).

Estou usando o Debian 9 / Antix 17.1 em um Lenovo ThinkPad E560 de 2016, CPU i7-6500U a 2.50GHz, 16GB de RAM e um disco SSD.

A máquina tem uma placa dupla, no entanto eu desativei a radeon com radeon.modeset=0 nos parâmetros do kernel. Então os parâmetros relevantes são:

$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 520 (rev 07)

Meus pacotes relevantes de xserver-xorg são:

xserver-xorg - 7.7+19
xserver-xorg-core - 1.19.2-1.0nosystemd2
xserver-xorg-input-libinput - 0.23.0-2
xserver-xorg-input-synaptics - 1.9.0-1+b1
xserver-xorg-video-intel - 2.99.917+git20161206-1

Eu já tentei executar os kernels da Debian presentes nos repositórios Antix, 4.10.5-antix.3-amd64-smp e 4.18.4-antix.1-amd64-smp sem nenhuma mudança nos sintomas; como @StephenKitt me disse que havia mudanças no tratamento de sinápticos em versões mais recentes.

Meus parâmetros atuais do kernel são:

$ cat /proc/cmdline 
BOOT_IMAGE=/boot/vmlinuz-4.18.4-antix.1-amd64-smp root=UUID=00c17984-859f-4197-8bd8-b346ddd092bd ro iommu=1 intel_iommu=on iommu=pt ipv6.disable=1 intremap=no_x2apic_optout radeon.modeset=0

Eu também segui algumas recomendações on-line para alterar no xorg o manuseio de mousepad de xserver-xorg-input-synaptics para xserver-xorg-input-libinput, instalando o último e fazendo:

 cd /etc/X11/xorg.conf.d
 ln -s /usr/share/X11/xorg.conf.d/40-libinput.conf 

Os sintomas permanecem inalterados.

Eu também fui no Gerenciador de Dispositivos no Windows 10 para ver o nome do dispositivo / driver e é um dual-mouse mouse / teclado de borracha thingy chamado "Ultranav". libinput-list-devices também nomeia como "AlpsPS / 2 ALPS DualPoint TouchPad". Alguns outros também chamam em outros modelos da Lenovo este mouse Elantech.

Eu também instalei libinput-tools para depurar a situação. Curiosamente, executando o comando libinput-list-devices o mouse é visto depois de ter executado o Windows, e antes é como ele não existe.

Eu já tenho sugestões de preencher um bug com a equipe do kernel.

O que fazer?

Os dados relevantes de dmidecode sobre o criador e modelo são:

# dmidecode -s system-manufacturer
LENOVO
# dmidecode -s system-product-name
20EV000YPG
# dmidecode -s system-version
ThinkPad E560

A diferença em libunput-list-devices antes e depois de inicializar o Windows 10.

$ diff libunput-list-devices-before_windows.txt after-windows.txt
2c2
< Kernel:           /dev/input/event8
---
> Kernel:           /dev/input/event10
20c20
< Kernel:           /dev/input/event10
---
> Kernel:           /dev/input/event12
38c38
< Kernel:           /dev/input/event7
---
> Kernel:           /dev/input/event9
128c128
< Kernel:           /dev/input/event18
---
> Kernel:           /dev/input/event20
163,164c163,164
< Device:           ThinkPad Extra Buttons
< Kernel:           /dev/input/event9
---
> Device:           AlpsPS/2 ALPS DualPoint Stick
> Kernel:           /dev/input/event6
165a166,202
> Seat:             seat0, default
> Capabilities:     pointer 
> Tap-to-click:     n/a
> Tap-and-drag:     n/a
> Tap drag lock:    n/a
> Left-handed:      disabled
> Nat.scrolling:    disabled
> Middle emulation: disabled
> Calibration:      n/a
> Scroll methods:   *button
> Click methods:    none
> Disable-w-typing: n/a
> Accel profiles:   flat *adaptive
> Rotation:         n/a
> 
> Device:           AlpsPS/2 ALPS DualPoint TouchPad
> Kernel:           /dev/input/event7
> Group:            7
> Seat:             seat0, default
> Size:             97.50x53.87mm
> Capabilities:     pointer 
> Tap-to-click:     disabled
> Tap-and-drag:     enabled
> Tap drag lock:    disabled
> Left-handed:      disabled
> Nat.scrolling:    disabled
> Middle emulation: disabled
> Calibration:      n/a
> Scroll methods:   *two-finger edge 
> Click methods:    *button-areas clickfinger 
> Disable-w-typing: enabled
> Accel profiles:   none
> Rotation:         n/a
> 
> Device:           ThinkPad Extra Buttons
> Kernel:           /dev/input/event11
> Group:            8
    
por Rui F Ribeiro 06.09.2018 / 05:04

1 resposta

4

Curiosamente, pesquisando variações de palavras do bug, incluindo Lenovo, Alps e Ultranav, encontrei um artigo sugerindo parâmetros do kernel no post no wiki do Arch Linux libinput

Touchpad not detected at all

Notes: Not a libinput issue. An explanation of the parameters is linked in Touchpad_Synaptics#No_Multi-touch_in_some_Elantech_touchpads, which is much better than saying "try some of these".

If a touchpad device is not detected and shown as a device at all, a possible solution might be using one or more of these kernel parameters.

i8042.noloop i8042.nomux i8042.nopnp i8042.reset

Fiz então alguns testes e descobri que no meu caso foi suficiente adicionar o parâmetro do kernel i8042.reset to GRUB_CMDLINE_LINUX_DEFAULT no arquivo /etc/grub/default e executar:

update-grub2

Depois disso, tirei a bateria para tentar replicar o bug. Depois que a máquina morreu e reinicializou o Linux, o mouse interno Ultranav / Elantech já era reconhecido e funcionava no começo, sem a necessidade de inicializar o Windows 10 primeiro.

Eu diria que isso se qualifica como um bug do kernel.

Similarmente a outros portáteis, o Lenovo Thinkpad precisa ser adicionado à lista de dispositivos redefinidos do i8042 no kernel do Linux, onde há uma lista de máquinas familiares que precisam da redefinição do chipset i8042 a fim de detectar consistentemente o seu Elantech TouchPad.

Eu encontrei este requisito depois de encontrar essas entradas de bugs. Entrada: i8042 - adicione Lenovo LaVie Z à lista de reinicialização do i8042 e Entrada: i8042: adicione o Lenovo ThinkPad L460 à i8042 lista de reinicialização

A partir da inspeção visual do código-fonte do kernel do Linux, o código-fonte para adicionar o Lenovo ThinkPad E560 à lista de redefinição do i8042 também não está presente nas fontes de kernel 4.19-rc2 mais recentes.

Então, para adicioná-lo, eu escrevi um diff / patch simples que pode ser usado em vez de usar o parâmetro do kernel i8042.reset no grub:

--- drivers/input/serio/i8042-x86ia64io.h.old   2018-09-06 04:53:36.460003164 +0100
+++ drivers/input/serio/i8042-x86ia64io.h   2018-09-06 04:57:16.833465129 +0100
@@ -655,6 +655,14 @@
            DMI_MATCH(DMI_PRODUCT_NAME, "P65xRP"),
        },
    },
+   {
+                /* Lenovo ThinkPad E560 */
+                .matches = {
+                        DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+                        DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad E560"),
+                },
+        },
+
    { }
 };

PS. Seguindo a sugestão do @StephenKitt, eu tentei enviar este post como um relatório de bug do kernel do Linux para [email protected]

    
por 06.09.2018 / 05:04