web-dev-qa-db-fra.com

Comment puis-je changer automatiquement la disposition du clavier du système lorsque je branche un clavier externe?

J'ai un ordinateur portable de style américain, ce qui est correct, mais j'ai également un clavier USB ergonomique de style britannique.

En tant que tel, j'ai généralement la disposition de touches américaine, mais lorsque je m'installe à mon bureau et que j'utilise le clavier USB britannique, je me retrouve à faire des erreurs stupides sur les symboles (normalement, une bonne dactylographe sur touch erg ou kbd standard).

Quelqu'un peut-il penser à une manière propre de configurer la disposition du clavier en fonction de la disposition inférée/USBID de tout clavier branché?

Même en ayant un paramètre personnalisé tel que l'ajout d'un ID USB spécifique à un script d'exécution qui vérifie s'il est branché ou non. Cela peut-il être fait sans que l'utilisateur ait à se déconnecter/se connecter? Je me souviens de faire quelque chose de similaire avec xorg.conf, mais cela nécessitait une déconnexion.

4
Andrew Bolster

Vous pouvez essayer d'écrire une règle udev. Branchez votre clavier et tapez lsusb et notez votre ID de clavier, il devrait ressembler à quelque chose comme

Bus 001 Device 001: ID 13ab:001a name-of-the-keyboard

Dans ce cas, le 13ab est l'ID du fournisseur et le 001a, l'ID du produit. Vous pouvez déconnecter votre clavier maintenant.

Allez à /etc/udev/rules.d/ et créez un nouveau fichier, par exemple 80-keyboard.rules et écrivez (remplacez idVendor et idProduct dans cet exemple par l'id de votre clavier):

SUBSYSTEM=="input", ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="13ab", ATTRS{idProduct}=="001a", RUN+="/path/to/connect/script"
SUBSYSTEM=="input", ACTION=="remove", SUBSYSTEMS=="usb", ATTRS{idVendor}=="13ab", ATTRS{idProduct}=="001a", RUN+="/path/to/disconnect/script"

Vous ne pouvez pas simplement utiliser la commande setxkbmap d'UDev car elle ne contient pas les variables d'environnement nécessaires. Cette partie est empruntée à this aswer .

Connect script:

#!/bin/sh
/path/to/set-keyboard-layout.sh uk

Déconnecter le script:

#!/bin/sh
/path/to/set-keyboard-layout.sh us

set-keyboard-layout.sh

#!/bin/sh
sleep 1
DISPLAY=":0.0"
HOME=/home/your-username
XAUTHORITY=$HOME/.Xauthority
export DISPLAY XAUTHORITY HOME
setxkbmap -layout $1

N'oubliez pas d'utiliser chmod + x sur les trois scripts et de modifier le répertoire/home/votre-nom d'utilisateur en votre chemin de dossier personnel.

Maintenant, lancez Sudo service udev restart et branchez votre clavier pour voir si la disposition change lors de la connexion/déconnexion.

J'ai testé cela avec mon disque dur USB et cela fonctionne (sauf que j'avais bloqué au lieu d'entrée pour le sous-système).

2
jeremija