Alterações com o xinput retornam aleatoriamente ao padrão

4

Estou usando o Kubuntu 16.04 (xenial) em um laptop com uma ELAN Touchscreen junto com uma caneta ativa DELL 750-AAHC. Um dos botões da caneta se comporta como um botão do meio do mouse, e eu quero que seja um botão direito.

Eu posso conseguir isso fazendo

$ xinput set-button-map "ELAN Touchscreen Pen" 1 3 2

(isto é, mapeando a função do botão 3, que deve corresponder ao botão direito, ao botão físico 2).

Isso faz o que eu quero, mas a mudança não é permanente.

Eu adicionei o comando em ~/.xsessionrc (de acordo com a resposta nesta postagem ), então ele é executado automaticamente quando eu reinicializo, mas o mapeamento de botões" aleatoriamente "volta ao padrão sozinho: ele está funcionando como esperado por um tempo, e de repente eu descobri que isso não acontece, então eu pego

$ xinput get-button-map "ELAN Touchscreen Pen"
1 2 3 4 5

e eu tenho que remapear manualmente.

Eu tentei algumas coisas "suspeitas" para ver o que poderia ser responsável pela reversão, mas não consegui descobrir. Não é causado por

  • suspendendo o laptop ou desligando a tela
  • girando a tela (isso era suspeito porque xinput é usado em rotação para transformar a matriz de entrada).
  • alternando entre touchscreen, touchpad ou entrada de caneta on / off (também com xinput).

ATUALIZAÇÃO IMPORTANTE :

Descobri que esse problema não é específico da caneta stylus: desativei a capacidade de toque no dedo da tela ("ELAN Touchscreen") anteriormente por algum motivo:

$ xinput disable "ELAN Touchscreen"

e eu acabei de descobrir que ele voltou sozinho (e o botão direito do mouse voltou a ser revertido). Assim, parece que todas as alterações no xinput são revertidas para o padrão por esse motivo desconhecido.

UPDATE 2

Encontrei algumas entradas suspeitas em /var/log/syslog quando isso aconteceu novamente. Os timestamps eram durante um tempo em que eu não estava usando o laptop há algum tempo, então recursos de economia de energia provavelmente foram ativados (eu tenho "dim screen" a 9 minutos e "desligue" a 10 minutos; vou experimentar energia salvar e atualizar de acordo).

O padrão abaixo é na verdade repetido muitas vezes, com apenas alguns segundos de diferença entre cada bloco.

usb 1-8: USB disconnect, device number 18
usb 1-8: new full-speed USB device number 19 using xhci_hcd
usb 1-8: New USB device found, idVendor=04f3, idProduct=2073
usb 1-8: New USB device strings: Mfr=4, Product=14, SerialNumber=0
usb 1-8: Product: Touchscreen
usb 1-8: Manufacturer: ELAN
input: ELAN Touchscreen Pen as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EE/input/input7548
input: ELAN Touchscreen as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EE/input/input7549
input: ELAN Touchscreen Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EE/input/input7552
hid-multitouch 0003:04F3:2073.04EE: input,hiddev0,hidraw0: USB HID v1.10 Keyboard [ELAN Touchscreen] on usb-0000:00:14.0-8/input0

Em cada bloco, quase tudo é o mesmo, exceto alguns números que aumentam. Aqui está o próximo bloco para comparação:

usb 1-8: USB disconnect, device number 19
usb 1-8: new full-speed USB device number 20 using xhci_hcd
usb 1-8: New USB device found, idVendor=04f3, idProduct=2073
usb 1-8: New USB device strings: Mfr=4, Product=14, SerialNumber=0
usb 1-8: Product: Touchscreen
usb 1-8: Manufacturer: ELAN
input: ELAN Touchscreen Pen as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EF/input/input7554
input: ELAN Touchscreen as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EF/input/input7555
input: ELAN Touchscreen Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:04F3:2073.04EF/input/input7558
hid-mul itouch 0003:04F3:2073.04EF: input,hiddev0,hidraw0: USB HID v1.10 Keyboard [ELAN Touchscreen] on usb-0000:00:14.0-8/input0

Os números dos dispositivos estão em 128.

Sistema :

  • KDE Plasma 5.5.5
  • Qt 5.5.1
  • Kernel 4.13.0-32-generic # 35 ~ 16.04.1-Ubuntu 64 bits
  • xinput versão 1.6.2

    Versão XI no servidor: 2.3

  • X.Org X Server 1.19.5

    Data de lançamento: 2017-10-12

    Protocolo X Versão 11, Revisão 0

por Ratler 16.02.2018 / 03:31

1 resposta

1

Isso parece ser um bug (o fato de o dispositivo touchscreen desconectar aleatoriamente e se reconectar como um novo dispositivo, o que tem o efeito colateral de redefinir todas as configurações para o padrão).

Como solução alternativa, você pode criar sua própria regra udev (nome do arquivo com base em essas sugestões por Daniel Drake ) que executará um script que reaplique as alterações do xinput sempre que a tela sensível ao toque for reconectada:

sudo nano /etc/udev/rules.d/10-custom-elan.rules

e adicione esta linha que contém "idVendor" e "idProduct" informação (do seu syslog ). O caminho absoluto para "elan.sh" deve ser usado.

ATTRS{idVendor}=="04f3", ATTRS{idProduct}=="2073", RUN+="/home/username/elan.sh"

(que se traduz em "" quando um dispositivo que corresponde aos atributos especificados é encontrado, execute o script designado ").

Em seguida, crie o script real para executar xinput :

nano /home/username/elan.sh 

com as seguintes linhas:

#!/usr/bin/env bash

#These lines allow the script to be called by udev rules
export DISPLAY=":0"
export XAUTHORITY="/home/username/.Xauthority"

#Command to remap buttons
xinput set-button-map "ELAN Touchscreen Pen" 1 3 2 4 5

E, claro, torná-lo executável:

chmod +x /home/username/elan.sh

Sem as linhas export , o script funciona quando chamado por você (o usuário ativo) diretamente, mas não funciona quando chamado pelo udev (o usuário root). Detalhes podem ser encontrados em este e esta resposta, mas aqui está um breve resumo:

Para iniciar um programa gráfico na área de trabalho de um usuário, você precisa de duas coisas: o endereço (em que a área de trabalho do usuário é exibida) e a autorização. Quando um usuário efetua login, o gerenciador de login autoriza uma conexão com o servidor X, gerando um cookie, adicionando-o ao servidor e passando-o ao usuário, escrevendo-o para $ HOME / .Xauthority. O usuário root deve, então, poder se conectar sabendo a exibição usada pelo usuário e tendo acesso ao cookie Xauthority. Isto é o que as linhas de exportação alcançam.

Observação : o fato de o número de exibição ser codificado pode causar um problema em algumas circunstâncias, mas neste cenário de uso (usuário único de um laptop pessoal) provavelmente será OK.

    
por stumblebee 20.02.2018 / 04:16