Le modifiche con xinput tornano in modo casuale ai valori predefiniti

4

Sto usando Kubuntu 16.04 (xenial) su un laptop con un touchscreen ELAN insieme a uno stilo attivo DELL 750-AAHC. Uno dei pulsanti sullo stilo si comporta come un pulsante centrale del mouse e lo voglio invece come pulsante destro.

Posso ottenere ciò facendo

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

(cioè, mappare la funzione del pulsante 3, che deve corrispondere al pulsante destro, al pulsante fisico 2).

Questo fa quello che voglio, ma il cambiamento non è permanente.

Ho aggiunto il comando in ~/.xsessionrc (secondo la risposta su questo post ), quindi viene eseguito automaticamente al riavvio, ma il mapping del pulsante" casualmente "torna automaticamente a quello predefinito: funziona come previsto per un po ', e improvvisamente scopro che no, quindi ho

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

e devo rimapparlo manualmente.

Ho provato alcune cose "sospette" per vedere cosa potrebbe essere responsabile del ripristino, ma non riuscivo a capirlo.

non è causato da
  • sospensione del laptop o spegnimento dello schermo
  • rotazione dello schermo (questo era sospetto perché xinput è usato in rotazione per trasformare la matrice di input.)
  • attivazione / disattivazione dello schermo tattile, del touchpad o dello stilo (anche con xinput).

AGGIORNAMENTO IMPORTANTE :

Ho scoperto che questo problema non è specifico per lo stilo: ho disabilitato la funzionalità touch-screen dello schermo ("ELAN Touchscreen") in precedenza per qualche motivo facendo:

$ xinput disable "ELAN Touchscreen"

e ho appena scoperto che è tornato da solo (e lo stilo con il tasto destro del mouse è stato nuovamente ripristinato). Quindi sembra che tutte le modifiche di xinput tornino ai valori predefiniti per questo motivo sconosciuto.

UPDATE 2

Ho trovato alcune voci sospette in /var/log/syslog quando questo è successo di nuovo. I timestamp erano durante un periodo in cui in realtà non usavo il portatile da un po 'di tempo, quindi le funzioni di risparmio energetico erano probabilmente attivate (ho "oscuramento" a 9 minuti e "spegni" a 10 minuti; salvataggio e aggiornamento di conseguenza).

Il modello qui sotto è effettivamente ripetuto molte volte, con solo pochi secondi di differenza tra ogni blocco.

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

In ogni blocco, quasi tutto è uguale tranne alcuni numeri che aumentano. Ecco il prossimo blocco per il confronto:

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

I numeri dei dispositivi si sovrappongono a 128.

Sistema :

  • KDE Plasma 5.5.5
  • Qt 5.5.1
  • Kernel 4.13.0-32-generic # 35 ~ 16.04.1-Ubuntu 64-bit
  • xinput versione 1.6.2

    Versione XI sul server: 2.3

  • X.Org X Server 1.19.5

    Data di rilascio: 2017-10-12

    X Protocol Version 11, Revision 0

posta Ratler 16.02.2018 - 03:31

1 risposta

1

Questo sembra essere un bug (il fatto che il dispositivo touchscreen si disconnetta casualmente e si ricolleghi come un nuovo dispositivo, che ha l'effetto collaterale di ripristinare tutte le impostazioni predefinite).

Per risolvere il problema, puoi creare la tua regola udev (nome del file basato su questi suggerimenti di Daniel Drake ) che eseguirà uno script che applica nuovamente le modifiche xinput ogni volta che il touchscreen si ricollega:

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

e aggiungi questa riga che contiene "idVendor" e "idProduct" (dal tuo syslog ). È necessario utilizzare il percorso assoluto per "elan.sh" .

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

(che si traduce approssimativamente in "" quando viene trovato un dispositivo che corrisponde agli attributi specificati, eseguire lo script designato ").

Quindi crea lo script effettivo per eseguire xinput :

nano /home/username/elan.sh 

con le seguenti linee:

#!/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 ovviamente rendilo eseguibile:

chmod +x /home/username/elan.sh

Senza le righe export , lo script funziona quando viene chiamato dall'utente (l'utente attivo) direttamente, ma non funziona quando viene chiamato da udev (l'utente root). I dettagli possono essere trovati in questo e questa risposta, ma ecco un breve riassunto:

Per avviare un programma grafico sul desktop di un utente, sono necessari due elementi: l'indirizzo (su cui viene visualizzato il desktop dell'utente) e l'autorizzazione. Quando un utente effettua l'accesso, il gestore di accesso autorizza una connessione al server X generando un cookie, aggiungendolo al server e passandolo all'utente scrivendolo su $ HOME / .Xauthority. L'utente root dovrebbe, quindi, essere in grado di connettersi conoscendo il display utilizzato dall'utente e avendo accesso al cookie Xauthority. Questo è ciò che le linee export raggiungono.

Nota : il fatto che il numero del display sia hardcoded potrebbe causare un problema in alcune circostanze, ma in questo scenario di utilizzo (utente singolo di un laptop personale) sarà probabilmente OK.

    
risposta data stumblebee 20.02.2018 - 04:16

Leggi altre domande sui tag