web-dev-qa-db-fra.com

Les modifications avec xinput reviennent de manière aléatoire à la valeur par défaut

J'utilise Kubuntu 16.04 (xenial) sur un ordinateur portable doté d'un écran tactile ELAN et d'un stylet actif Dell 750-AAHC. L'un des boutons du stylet se comporte comme un bouton central de la souris, et je veux que ce soit plutôt un bouton droit.

Je peux y arriver en faisant

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

(c’est-à-dire mapper la fonction du bouton 3, qui doit correspondre au bouton droit, au bouton physique 2).

Cela fait ce que je veux, mais le changement n'est pas permanent.

J'ai ajouté la commande dans ~/.xsessionrc (selon la réponse sur cet article ), il est donc exécuté automatiquement au redémarrage, mais le mappage du bouton "de manière aléatoire" revient automatiquement à sa valeur par défaut: c'est travaille comme prévu pendant un moment, et tout à coup je découvre que ce n’est pas le cas, alors je reçois

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

et je dois le remapper manuellement.

J'ai essayé quelques "suspects" pour voir ce qui pourrait être responsable de revenir, mais je ne pouvais pas le comprendre. Ce n'est pas causé par

  • suspendre l'ordinateur portable ou éteindre l'écran
  • rotation de l'écran (cela était suspect car xinput est utilisé en rotation pour transformer la matrice d'entrée).
  • activer/désactiver la saisie à l’écran tactile, au pavé tactile ou au stylet (également avec xinput).

MISE À JOUR IMPORTANTE :

J'ai découvert que ce problème n'était pas spécifique au stylet: j'ai précédemment désactivé la fonctionnalité tactile de l'écran ("ELAN Touchscreen") pour une raison quelconque:

$ xinput disable "ELAN Touchscreen"

et je viens de découvrir qu’il revenait tout seul (et que le clic droit du stylet était de nouveau revenu). Il semble donc que toutes les modifications de xinput reviennent aux valeurs par défaut pour cette raison inconnue.

UPDATE 2

J'ai trouvé des entrées suspectes dans /var/log/syslog lorsque cela s'est reproduit. Les horodatages ont eu lieu pendant une période où je n'utilisais plus l'ordinateur portable depuis un certain temps. Les fonctions d'économie d'énergie ont probablement été activées (j'ai "écran sombre" à 9 minutes et "éteint" à 10 minutes; je vais expérimenter l'énergie. enregistrer et mettre à jour en conséquence).

Le motif ci-dessous est en fait répété plusieurs fois, avec seulement quelques secondes de différence entre chaque bloc.

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

Dans chaque bloc, presque tout est pareil sauf quelques chiffres qui augmentent. Voici le prochain bloc pour la comparaison:

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

Les numéros d’appareil se terminent à 128.

Système :

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

    Version XI sur le serveur: 2.3

  • X.Org X Server 1.19.5

    Date de sortie: 2017-10-12

    Protocole X version 11, révision 0

4
Ratler

Cela semble être un bogue (le fait que le périphérique à écran tactile se déconnecte de manière aléatoire et se reconnecte en tant que nouveau périphérique, ce qui a pour effet secondaire de réinitialiser tous les paramètres par défaut).

Pour contourner le problème, vous pouvez créer votre propre règle udev (nom de fichier basé sur ces suggestions de Daniel Drake ) qui sera exécutée. un script qui réapplique les modifications xinput chaque fois que l'écran tactile se reconnecte:

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

et ajoutez cette ligne qui contient "idVendor" et "idProduct" (à partir de votre ) syslog ). Le chemin absolu à "elan.sh" doit être utilisé.

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

(qui se traduit approximativement par "" lorsqu'un appareil correspondant aux attributs spécifiés est trouvé, exécutez le script désigné ").

Ensuite, créez le script à exécuter xinput :

nano /home/username/elan.sh 

avec les lignes suivantes:

#!/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

Et bien sur le rendre exécutable:

chmod +x /home/username/elan.sh

Sans les lignes d'exportation , le script fonctionne lorsqu'il est appelé directement par vous (l'utilisateur actif), mais ne fonctionne pas lorsqu'il est appelé par udev (l'utilisateur racine). Les détails peuvent être trouvés dans les réponses this et this , mais voici un bref résumé:

Pour lancer un programme graphique sur le bureau d'un utilisateur, vous avez besoin de deux éléments: l'adresse (l'affichage du bureau de l'utilisateur) et l'autorisation. Lorsqu'un utilisateur se connecte, le gestionnaire de connexion autorise une connexion au serveur X en générant un cookie, en l'ajoutant au serveur et en le transmettant à l'utilisateur en l'écrivant dans $ HOME/.Xauthority. L'utilisateur root devrait alors pouvoir se connecter en connaissant l'affichage utilisé par l'utilisateur et en ayant accès au cookie Xauthority. C'est ce que les lignes d'exportation réalisent.

Remarque : le fait que le numéro d'affichage soit codé en dur peut poser problème dans certaines circonstances, mais dans ce scénario d'utilisation (utilisateur unique d'un ordinateur portable personnel), il sera probablement OK.

1
stumblebee