Bonjour,
lordphoenix a écritJe m'aperçois que j'ai oublié de préciser que j'étais sous Linux…
Ça complique un peu l'option des claviers programmable je pense, par contre ça élargit le champ des bidouilles possibles non? #TrollInside 🙂
Disons que ça ouvre certaines perspectives. Mais que ce ne sera pas forcément simple.
Il est possible de définir une disposition de clavier personnalisée. Elle peut être complètement différente des dispositions classiques. Il faut la placer dans /usr/share/X11/xkb/symbols/ . J’y reviendrai ; par rapport à ton objectif, ce n’est pas le plus simple.
Il est possible d’affecter une disposition au clavier principal (ou à n’importe quel clavier) et une autre à un clavier spécifique, en tout cas avec X.org (avec Wayland, je ne sais pas si c’est possible et encore moins comment faire, et je n’exclus pas que la dernière version d’Ubuntu soit passée à Wayland par défaut dans sa version principale).
Je t’adapte vite fait mes notes :
Selon les identifiants
Lister les périphériques de X :
xinput list
Repérer sous Virtual core keyboard le clavier ciblé, récupérer son nom pour la directive MatchProduct.
Optionnellement, relever son id, puis (si c’est par exemple 9) :
xinput list-props 9 | grep 'Device Node'
Avec le chemin récupéré (pour l’exemple /dev/input/event0) :
udevadm info --query=property --name=/dev/input/event0
Récupérer le fabricant d’ID_VENDOR pour la directive MatchVendor (note : si le nom du fabricant contient originellement des espaces, ils sont remplacés par des soulignés).
Selon l’ID USB (pour des périphériques USB, surtout dans le cas où ils n’ont pas de nom de produit reconnu)
Lister les périphériques USB :
lsusb
Relever l’ID (deux séquences de quatre chiffres hexadécimaux (les lettres en minuscules), séparés par deux points).
Créer un fichier /etc/X11/xorg.conf.d/90-keyboards_layouts.conf avec un contenu du style :
Section "InputClass"
Identifier "Clavier classique"
MatchIsKeyboard "True"
Option "XkbLayout" "fr,fr"
Option "XkbVariant" "bepo,oss"
Option "XkbOptions" "grp:sclk_toggle,grp_led:scroll"
EndSection
Section "InputClass"
Identifier "Pave magique"
MatchIsKeyboard "True"
MatchProduct "Celui du pavé numérique"
Option "XkbLayout" "le_tien"
EndSection
ou selon l’ID USB :
Section "InputClass"
Identifier "Pave magique"
MatchIsKeyboard "True"
MatchUSBID "0123:4567"
Option "XkbLayout" "le_tien"
EndSection
À ce stade, il faut que ton environnement graphique utilise la définition clavier du système (je n’en connais pas qui soient capable de gérer deux dispositions de clavier différentes eux-mêmes), par exemple :
– avec LXDE, c’est simple, c’est ce qu’il fait tout le temps ;
– avec Xfce, dans le menu Paramètres, Clavier, onglet Disposition, il faut cocher « Utiliser les paramètres par défaut ».
– avec Gnome, il faut neutraliser le service de définition du clavier de Gnome (je ne me rappelle plus son nom ; l’idée serait de le renommer avec dpkg-divert et si ça génère des messages d’erreur de le remplacer par un lien vers /bin/true).
Je reviens sur la question de la définition de la disposition.
Le problème est d’envoyer une combinaison de touches pour la frappe d’une seule touche. À la base, la définition d’une disposition a plutôt pour but d’envoyer un caractère pour une combinaison de touches.
Quelques pistes :
– il existe pour certaines actions, notamment multimédia, des codes de touches spécialisés (il me semble qu’il en existe aussi pour copier, coller… mais je crains que tous les logiciels ne les supportent pas) ;
– définir tes touches avec un symbole non utilisé et faire tourner un utilitaire (je pense qu’il en existe, mais je n’ai pas de nom en tête) configuré pour intercepter ces codes et en envoyer d’autres à la place ;
– il y a peut-être une possibilité de faire exactement ce que tu veux avec les overlays, mais je ne maîtrise pas [MàJ : ça ne semble pas possible] ;
– essayer de définir par exemple C comme symbole et Ctrl comme modificateur.
Par exemple, pour la touche 1 du pavé numérique (note : il faut faire le reste d’une déclaration de disposition autour) :
key <KP1> { type = "ONE_LEVEL", [ C ] };
modifier_map Control { <KP1> };
[/s]
Je n’ai pas essayé, mais je pense que ça fonctionnera avec certains logiciels, bien que normalement, pour un modificateur, il faut le déclarer comme symbole de la touche et déclarer la touche dans les modificateurs. [MàJ : ne fonctionne pas]
Bon… il faut se dire que ça reste plus simple que de fabriquer son propre clavier et d’en créer le firmware…