Je branche souvent un clavier USB à mon ordinateur portable (en plus du moniteur et de la souris externes, qui convertissent tous virtuellement mon ordinateur portable en ordinateur de bureau) et je préfère utiliser une disposition de clavier différente.
Je dois changer manuellement la disposition actuelle du clavier chaque fois que je branche ce clavier USB.
Et j'aimerais utiliser une méthode automatisée pour cela, si possible.
La réponse de Radu à la question ici donne quelques indices, mais il semble que j'aurai besoin d'un script de démarrage pour cette tâche car l'ID de périphérique de mon clavier USB change à chaque démarrage de l'ordinateur.
Ce script de démarrage inclura probablement d'abord la commande xinput -list | grep "USB Keyboard"
, et une autre commande pour saisir le premier numéro d'identification du clavier USB affiché, puis l'utiliser dans la commande finale pour définir la disposition choisie pour ce clavier USB comme ci-dessous:
setxkbmap -device <NUMBER> -layout <LAYOUT>
Réponses:
Après quelques recherches, j'ai trouvé une solution, même si je suis toujours ouvert à d'autres réponses (probablement meilleures).
Voici un script de démarrage (qui peut être ajouté à des applications de démarrage ) , qui fixera la saisie maually usbkbd_layout variable au usbkbd dispositif ID de la Trouvées de xinput -list :
Ce script est très utile (et plus stable) pour les scénarios où l'utilisateur commence à utiliser l'ordinateur portable sur une configuration de bureau (avec clavier, souris et moniteur externes, etc.), et il peut également être exécuté manuellement chaque fois que le clavier USB externe est branché ...
================================================== ========================
LA MEILLEURE (presque parfaite) SOLUTION - trouvée grâce à MinimusHeximus et aux contributeurs respectifs au fil qu'il a mentionné dans son commentaire ci-dessous:
Je peux maintenant simplement brancher mon clavier USB et appliquer automatiquement sa disposition de clavier différente (TR-F) tout en conservant la disposition de clavier par défaut (TR-Q) sur mon ordinateur portable!
Voici les fichiers et leur contenu qui rendent cela possible:
/etc/udev/rules.d/00-usb-keyboard.rules
/home/sadi/.bin/usb-keyboard-in_udev
/home/sadi/.bin/usb-keyboard-in
/home/sadi/.bin/usb-keyboard-out_udev
/home/sadi/.bin/usb-keyboard-out
Remarques:
chmod - 755 /home/sadi/.bin/usb-keyboard-*
AFIN D'ADAPTER CETTE CONFIGURATION AUX DIFFÉRENTES EXIGENCES:
lsusb
(par exemple, malsusb
sortie ont pour mon clavier USB:Bus 001 Device 006: ID 09da:0260 A4 Tech Co., Ltd
)xinput -list | grep "USB Keyboard"
me donne deux lignes;↳ USB Keyboard id=14 [slave keyboard (3)]
et↳ USB Keyboard id=16 [slave keyboard (3)]
; qui sont ensuite filtrées enawk
utilisant "=" comme délimiteur de champ et en capturant la deuxième partie; puis en coupant uniquement le deux premiers chiffres, puis en utilisant uniquement la valeur de la première ligne)la source
IF
j'ai dû utiliser unFOR
. Cela fonctionne pour moi maintenant, merci! gist.github.com/zvictor/193b567c14b5b6a679feOn peut spécifier les options du pilote X11 dans la règle udev, aucun script personnalisé n'est nécessaire. À titre d'exemple, voici le contenu de mon /etc/udev/rules.d/99-usb-kbd.rules
Cette règle garantit qu'un clavier USB particulier utilise la disposition américaine dans Xorg (le clavier interne de mon ordinateur portable est allemand, et c'est également ma disposition principale). Les points importants:
idVendor
et connaîtreidProduct
votre appareil en utilisantlsusb
ouevtest
/usr/share/X11/xkb/symbols
. Faites attention à spécifier à la fois une mise en page valide et une variante valide./lib/udev/rules.d/64-xorg-xkb.rules
la source
/var/log/Xorg.0.log
d'éventuels problèmes. Vous pouvez également utiliserudevadm info
pour vérifier que les paramètres sont appliqués correctement.gsettings set org.gnome.settings-daemon.plugins.keyboard active false
. Si vous ajoutez également une telle note, je vais essayer de marquer la vôtre comme la réponse (au lieu de cette route maladroite, longue et sinueuse ;-)/usr/share/X11/xkb/rules/evdev.lst
Je viens d'améliorer cette solution pour un clavier bépo Typematrix (version française d'un excellent dvorak optimisé) et dans un contexte système large (cela suppose que vous ayez un accès root à la machine). Il n'a besoin que de 3 fichiers pour fonctionner. Vous pouvez consulter un fichier journal en cas d'échec pour comprendre ce qui échoue.
/etc/udev/96-usb-keyboard.rules
/etc/udev/bepo-typematrix-kbd.sh (absolument nécessaire pour utiliser un script d'arrière-plan intermédiaire)
/ etc / udev / bepo-typematrix-kbd
la source
Après avoir beaucoup tripoté, c'est ce que j'ai pour l'instant. Je vais peut-être écrire un article complet et publier le code dans un référentiel, si cela vous intéresse.
Configurez un nouvel ensemble de règles pour udev comme celui-ci:
La règle est censée appeler un script shell chaque fois qu'une action est déclenchée par un appareil avec la combinaison donnée d'ID de fournisseur et de produit.
Après avoir ajouté le nouvel ensemble de règles, redémarrez le service udev:
Remarque: Je n'ai pas pu obtenir de résultats fiables en fournissant des règles de correspondance plus spécifiques dans ce fichier. Plus important encore, l'ajout d'une
ACTION
règle de correspondance n'a pas fonctionné. Autant que je sache, le script a quand même été déclenché. Lors de l'ajoutACTION=="add"
, le script sera toujours appelé lors de la suppression du périphérique. Très étrange et déroutant.Cependant l'action qui a déclenché la règle udev sera disponible pour le script appelé comme indiqué ci-dessous.
Ensuite, le script lui-même. Enfin, pas tout à fait. Notez le
wrapper
suffixe dans le nom de fichier. Cela indique qu'il ne s'agit pas du script réel mais d'un wrapper qui appelle le script et l'exécute en arrière-plan afin que udev puisse terminer son processus.~/.bin/switch-kb-layout-wrapper.sh
:La variable
ACTION
contient l'action udev déclenchée par le périphérique. Il donne des valeurs commeadd
(le périphérique a été branché) etremove
(le périphérique a été supprimé). Nous les utiliserons plus tard.~/.bin/switch-kb-layout.sh
:Remplacez mon nom d'utilisateur par le vôtre lors de la définition de la
HOME
variable ($(whoami)
ne fonctionnera pas ici, car cela ne sera pas appelé par votre utilisateur mais parroot
).À des fins de test, j'ai ajouté quelques lignes qui enregistrent certains événements dans un fichier de mon répertoire personnel pour voir si tout fonctionne. Vous pouvez les supprimer en toute sécurité.
Enfin, ces scripts doivent avoir des autorisations d'exécution. Il peut également être important de noter que ces scripts seront appelés par l'
root
utilisateur, alors faites attention à ce que vous y faites.la source
gsettings set org.gnome.settings-daemon.plugins.keyboard active false
ne fonctionne pas comme prévu, car le script est exécuté parroot
. Dans mes tests, la ligne n'a pas eu d'effet sur ce paramètre.gsettings set org.gnome.settings-daemon.plugins.keyboard active false
tant qu'utilisateur une fois pour toutes, puis d'utiliser ce script sans lesgsettings set
commandes ...J'ai eu un problème de permission avec le script exécuté par udev. J'ai résolu avec sudo comme suit:
Définissez la carte du clavier pour chaque appareil
la source
Vous pouvez également le définir dans un fichier de configuration Xorg.
Il est présenté dans cette réponse stackexchange: /superuser//a/946575/437492
la source
/etc/X11/xorg.conf.d/
(c'est l'endroit où aller).