Remplacez quelques codes clés avec XKB

10

Je veux mélanger quelques touches avec XKB. (Pourquoi? Sur un ordinateur portable où certaines touches sont mal placées.) J'utilise actuellement xmodmap:

keycode 110 = Prior
keycode 115 = Delete
keycode 112 = Next
keycode 117 = Insert
keycode 119 = End
keycode 118 = Home

Au lieu de cela, je veux utiliser XKB et attribuer des noms symboliques différents pour certaines clés physiques, plutôt que d'attribuer des noms de clés différents à certains codes clés. ( C'est pourquoi.) Je veux que le code de touche 110 envoie à la PGUPplace de HOME, le code de clé 115 à envoyer à la DELEplace END, etc. Le reste de la configuration ne doit pas être affecté (il en PGUPva de même pour l'envoi de la Priorclé de clavier, etc. comme ils sont).

Comment puis-je modifier l'attribution de ces codes clés spécifiques? Je vais charger un fichier avec xkbcomp somefile.xkb $DISPLAY, que dois-je mettre somefile.xkb?

Gilles 'SO- arrête d'être méchant'
la source

Réponses:

13

Créez un fichier contenant vos modifications de code clé et enregistrez-le sous (par exemple) ~/.xkb/keycodes/local. (Le keycodesrépertoire est codé en dur; le répertoire de base peut être autre chose, et le nom de fichier aussi.) Cela contiendra dans votre cas

xkb_keycodes {
  <PGUP> = 110;
  <PGDN> = 112;
  <DELE> = 115;
  <INS> = 117;
  <HOME> = 118;
  <END> = 119;
};

Pour charger cela, exécutez

setxkbmap -print | sed -e '/xkb_keycodes/s/"[[:space:]]/+local&/' | xkbcomp -I${HOME}/.xkb - $DISPLAY

Cela génère vos paramètres actuels, ajoute +localà l' xkb_keycodes includeinstruction et la charge dans le compilateur XKB, en l'ajoutant ~/.xkbau chemin d'inclusion. (Si vous avez nommé votre fichier autrement que ~/.xkb/keycodes/local, vous devrez évidemment changer +localet -I${HOME}/.xkb}.) De cette façon, tous les autres paramètres sont conservés.

Stephen Kitt
la source
1
Donc , c'est le chemin prévu et moyen de passer à l' interrupteur! Merci, je n'ai pas pu comprendre cela à partir de la page de manuel. -I
L. Levrel
travaillé comme un charme! cela a fonctionné si vous voulez mettre à jour xkb_symbols, remplacez simplement xkb_keycodes par celui-ci, a fonctionné
zw963
5

Vous pouvez commencer par setxkbmap -print > somefile.xkbobtenir le clavier que vous utilisez comme base, puis redéfinir les noms de clés que vous souhaitez dans la xkb_keycodessection comme ceci:

xkb_keymap {
 xkb_keycodes {
  include "evdev+aliases(azerty)"
  // Custom <key name> = keycode
  <INS> = 117;
  <HOME> = 118;
  <PGUP> = 110;
  <DELE> = 115;
  <END> = 119;
  <PGDN> = 112;
 };
 xkb_types { include "complete"};
 xkb_compatibility { include "complete"};
 xkb_symbols { include "pc+fr+inet(evdev)"};
 xkb_geometry { include "pc(pc104)"};
};

Cela génère des avertissements selon lesquels certains noms de clés sont attribués plusieurs fois, mais cela fonctionne car seul le dernier compte (il est donc important de mettre les paramètres personnalisés après l'inclusion). Et le fichier a l'avantage d'être lisible.

Une autre façon est de vider le clavier que vous utilisez dans un fichier: xkbcomp $DISPLAY somefile.xkbet de modifier les mêmes lignes (c'est le même clavier avec les inclusions évalués). De cette façon, il n'y a pas d'avertissement pour plusieurs définitions, mais c'est moins lisible.

Leiaz
la source
1
D'où viennent tous ces noms ( evdev+aliases(azerty), etc.)? Je veux explicitement effectuer un changement relatif, pas une reconfiguration complète. Les clés autres que les 6 énumérées dans les questions ne doivent pas être affectées, elles doivent rester dans l'état où elles étaient lorsque j'ai émis la commande.
Gilles 'SO- arrête d'être méchant'
1
Ils viennent du setxkbmap -print, ce sont des fichiers /usr/share/X11/xkb/. Je pense que vous devez donner un schéma complet, xkbcompmais je peux me tromper ...
Leiaz