web-dev-qa-db-fra.com

Comment utiliser libinput au lieu de xinput?

Le clavier de mon ordinateur portable ne fonctionne plus. J'ai donc écrit un script qui désactivait le clavier intégré avec xinput float ID. Sur la nouvelle version d'Ubuntu (17.10), cela ne fonctionne plus à cause de la mise à jour de wayland.

Lorsque je lis mes appareils avec Sudo libinput list-devices, je reçois:

[...]
Device:           Rapoo E6100
Kernel:           /dev/input/event13
Group:            6
Seat:             seat0, default
Capabilities:     keyboard
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Accel profiles:   n/a
Rotation:         n/a
[...]
Device:           AT Translated Set 2 keyboard
Kernel:           /dev/input/event4
Group:            9
Seat:             seat0, default
Capabilities:     keyboard
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Accel profiles:   n/a
Rotation:         n/a
[...]

Rapoo E6100 est le clavier de travail et AT Translated Set 2 keyboard est le clavier clavier brisé à bord.

J'ai lu que pour ignorer un périphérique, les fonctionnalités peuvent en être retirées ( https://wayland.freedesktop.org/libinput/doc/latest/udev_config.html#udev_device_type ). Comment cela peut-il être réalisé avec libinput?

Ou est-il possible d'ignorer simplement le groupe 9?

2
user796678

Un moyen rapide et dangereux de désactiver le clavier peut être d'utiliser evtest pour saisir le. Les événements sont ensuite transmis au programme de test et ne sont plus transmis au serveur graphique.

$ Sudo evtest --grab /dev/input/event4 >/dev/null

Vous devez laisser ce programme en cours d'exécution tout le temps.


Un moyen plus difficile de désactiver le périphérique consiste à lui ajouter une règle udev qui définit ID_INPUT pour le vider de sorte que libinput l'ignore. Je n'ai pas essayé ce qui suit, alors utilisez-le comme un guide à explorer plutôt que comme une solution définitive.

Commencez par répertorier les informations udev du périphérique d’événement qui est le clavier, par exemple:

$ udevadm info /dev/input/event4
...
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_INPUT_KEYBOARD=1
E: ID_SERIAL=05f3_0007

Vous devez maintenant trouver quelque chose qui identifiera votre appareil de manière unique. En règle générale, il s'agit d'un fournisseur USB et d'un ID de produit (comme dans le ID_SERIAL ci-dessus). Le préfixe E: signifie que cette variable est définie dans l'environnement udev. Par conséquent, dans une règle udev, vous devez indiquer que vous souhaitez faire correspondre ENV{ID_SERIAL}=="05f3_0007".

Cependant, pour votre ordinateur portable, vous aurez probablement besoin de trouver autre chose. Vous pouvez rechercher plus haut dans l'arborescence des périphériques pour trouver un parent avec un attribut plus facile à faire correspondre pour:

$ udevadm info -a /dev/input/event4
...
looking at parent device '/devices/pci0000:00/.../input/input4':
  KERNELS=="input4"
  SUBSYSTEMS=="input"
  ATTRS{name}=="HID 05f3:0007"
  ...

Donc, à la place d'une règle udev correspondant à ID_SERIAL, vous pouvez faire correspondre à ATTRS{name}=="HID 05f3:0007" à la place. Dans votre cas, j'attendrais quelque chose comme ATTRS{name}=="AT Translated Set 2 keyboard".

Une fois que vous avez trouvé une correspondance appropriée, créez votre propre fichier /etc/udev/rules.d/99-my.rules (commencez par 99 pour que votre règle dure enfin) avec votre règle prioritaire pour réinitialiser la valeur ID_INPUT à vide. Soyez strict avec le format de ce fichier. Notez que toutes les conditions sont des comparaisons avec == sauf la dernière, qui est une affectation avec un seul =.

ACTION=="add|change", ENV{ID_SERIAL}=="05f3_0007", ENV{ID_INPUT}=""

ou plus probablement pour vous:

ACTION=="add|change", ATTRS{name}=="AT Translated Set 2 keyboard", ENV{ID_INPUT}=""

Normalement, la modification d'un fichier devrait être remarquée automatiquement par udev, mais sinon, faites Sudo udevadm control --reload. Vous pouvez ensuite essayer de déclencher un changement d'appareil:

$ Sudo udevadm trigger --action=change /dev/input/event4

Je ne suis pas sûr de savoir comment cela fonctionne pour un périphérique fixe, comme d'habitude pour les périphériques USB vous pouvez simplement le débrancher et le rebrancher, de sorte que vous devrez peut-être redémarrer.

Vous pouvez surveiller ce que fait udev avec udevadm monitor.

0
meuh