web-dev-qa-db-fra.com

Quel fichier est-ce que l'option setxkbmap -rules est censée prendre, et comment puis-je ajouter des variantes de clavier à ce fichier?

J'essaie d'installer une disposition de clavier personnalisée sans accès Sudo, comme je l'ai décrit dans Est-il possible d'utiliser une disposition de clavier personnalisée sans accès Sudo? Si oui, comment? , et j'ai une question spécifique à propos de la commande setxkbmap que la réponse actuelle dit pourrait bien fonctionner.

Plus précisément, la page de manuel de la commande vous permet de spécifier un fichier de règles:

- rules fichier

Spécifie le nom du fichier de règles utilisé pour résoudre la présentation et le modèle demandés en un ensemble de noms de composants.

Cependant, il ne dit pas exactement quel type de fichier on est censé mettre là-bas, et j'ai du mal à comprendre cette option.

Autant que je sache, il s’agit de soit /usr/share/X11/xkb/rules/xorg, soit de son alias /usr/share/X11/xkb/rules/base, et même si je copie tout /usr/share/X11/xkb/ dans ~/xkb/, puis que je le lance quelque chose comme

setxkbmap -model pc105 -layout "gb" -variant "extd" -rules ~/xkb/rules/base

alors cela semble fonctionner.

Cependant, je ne suis pas du tout sûr de savoir comment modifier ce fichier. Sur les machines sur lesquelles j'ai un accès Sudo, je suis ce tutoriel : je crée une variante du clavier gb à l'intérieur de xkb/symbols/gb, et j'ajoute la variante à xkb/rules/evdev.xml via

<variant>
  <configItem>
    <name>custom</name>
    <description>English (UK, custom)</description>
  </configItem>
</variant>

Sur le fichier xkb/rules/base, cependant, il n’ya pas d’endroit évident pour inclure une telle variante, et en fait d’autres variantes de clavier gb connexes, telles que extd ou intl, qui apparaissent par exemple. dans xkb/rules/evdev.lst, ne sont visibles nulle part.

Alors, comment puis-je spécifier un fichier dans l'option de fichier -rules qui me permet de définir ma propre variante? (sans accès Sudo, malheureusement)

6
E.P.

La base de données de configuration du clavier du système XKB est stockée dans /usr/share/X11/xkb. Les mises en forme XKB sont définies dans un modèle RMLVO: règles, modèle, mise en forme, variante, options. Le fichier de règles principal utilisé de nos jours est en fait evdev; vous pouvez voir ceci avec setxkbmap:

$ setxkbmap -query -verbose 10
...
Trying to load rules file /usr/share/X11/xkb/rules/evdev...
Success.
Applied rules from evdev:
rules:      evdev
model:      pc105
layout:     us
variant:    altgr-intl
options:    caps:hyper,compose:menu
Trying to build keymap using the following components:
keycodes:   evdev+aliases(qwerty)
types:      complete
compat:     complete
symbols:    pc+us(altgr-intl)+inet(evdev)+capslock(hyper)+compose(menu)
geometry:   pc(pc105)

Chacun des composants mentionnés dans les dernières lignes ci-dessus est un sous-répertoire de la base de données système dans /usr/share/X11/xkb, et les valeurs indiquées sont noms de fichiers dans ce sous-répertoire (séparés par +) qui seront consultés pour créer cette carte de clé particulière. Les parenthèses marquent une clause particulière dans le fichier spécifié (généralement des variantes et des options).

Les outils XKB (setxkbmap, xkbcomp, etc.) peuvent utiliser un argument pour rechercher les fichiers dans un autre emplacement, mais cet emplacement personnalisé doit être au même format que la base de données système. Voici à quoi ressemble la base de données système. Voir le README dans chaque répertoire pour plus de détails, et

/usr/share/X11/xkb/
├── compat       # ??? dark magic here, avoid
├── geometry     # as in physical, eg for generating layout maps
├── keycodes     # helpful for translating keycodes (from xev) to <FOO>
├── rules        # "evdev" is the important one; *.lst & *.xml are descriptions
├── symbols      # main layouts, variants, optional overrides
└── types        # ??? dark magic here, avoid

Si vous souhaitez remplacer ces fichiers ou fournir vos propres dispositions, sans les fusionner dans la base de données système, vous allez créer une structure de répertoires similaire pour vos propres fichiers. Vous n'aurez probablement rien à faire avec geometry ou keycodes sauf si vous construisez vos propres claviers à partir de rien.

$HOME/.xkb/ ou $HOME/.config/xkb/ sont parfaits pour une configuration par utilisateur:

$HOME/.config/xkb/
...
├── rules
│   ├── evdev-local
│   ├── evdev-local.lst
│   └── evdev-local.xml
├── symbols
│   ├── my-fun-capslock-options
│   ├── my-US-Dvorak-layout
│   └── my-ZWERTY-layout
...

Une fois que votre structure de répertoires est en place, vous pouvez charger vos personnalisations avec le paramètre -I /path/to/local/xkb:

setxkbmap -I $HOME/.config/xkb \
  -rules evdev-local           \
  -layout my-ZWERTY-layout     \
  -option myZWERTY:option1,compose:menu,fun:caps_is_insert

Vous pouvez combiner des options locales telles que fun:caps_is_insert avec des options système telles que compose:menu, à condition que le fichier de règles spécifié les définisse. (Les fichiers de symboles peuvent inclure d'autres fichiers de symboles, mais je n'ai pas trouvé de syntaxe d'inclusion pour les fichiers de règles. Vous devrez probablement copier l'intégralité des règles système evdev dans votre version locale et ajouter vos modifications.)


L'utilisation d'emplacements personnalisés peut ne pas être utilisable avec d'autres systèmes de configuration XKB tels que localectl, le démon des paramètres de GNOME ou des compositeurs Wayland non configurables avec setxkbmap.

Ressources:

12
quixotic