Comment changer le clavier de la console sous Linux?

36

Je voudrais échanger Escet CapsLocken console (pas en X, et utiliser xev), comment puis-je le faire?

Mon système d'exploitation est Ubuntu.

Vayn
la source

Réponses:

60

Les outils permettant de manipuler la disposition du clavier sur les consoles virtuelles sont loadkeys, dumpkeyset showkey. Lisez leurs pages de manuel et renseignez-vous sur leurs subtilités.

Notez que ces outils ne fonctionnent que dans une console virtuelle, pas dans un émulateur de terminal dans un environnement graphique tel que gnome. Pour en savoir plus sur la différence, lisez cette question et ses réponses: https://askubuntu.com/questions/14284/why-is-a-virtual-terminal-virtual-and-what-why-where-is-the-real-terminal .

Voici un petit guide pour faire ce que vous voulez:

  1. Enregistrez votre configuration de clavier actuelle:

    $ dumpkeys > backup.kmap
    

    En cas de problème, vous pourrez restaurer votre clavier en utilisant la commande suivante:

    $ sudo loadkeys backup.kmap
    

    Si le clavier est tellement encrassé que vous ne pouvez même pas le faire, alors votre seule option ne faisant pas appel à la magie du noyau ancien est de redémarrer.

  2. Vérifiez quels codes clés sont attribués à vos clés:

    $ showkey
    

    Maintenant, appuyez sur la touche ESC et la touche CAPSLOCK. Les codes d'activation doivent apparaître à l'écran. Notez les codes clés. Sur mon système, l’ESC a le code clé 1 et CAPSLOCK, le code clé 58. showkeys’arrêtera au bout de 10 secondes d’inactivité (du moins sur mon Ubuntu 10.04).

  3. Notez les noms des clés ESC et CAPSLOCK des dumpkeys:

    $ dumpkeys | grep 1
    ...
    keycode   1 = Escape
    ...
    $ dumpkeys | grep 58
    ...
    keycode  58 = CtrlL_Lock
    ...
    
  4. Notez la ligne de clavier de dumpkeys:

    $ dumpkeys | head -1
    keymaps 0-127
    
  5. Créez un fichier de clavier qui permute ESC et CAPSLOCK:

    keymaps 0-127
    keycode   1 = CtrlL_Lock
    keycode  58 = Escape
    
  6. Chargez le keymap:

    $ sudo loadkeys swap_esc_capslock.kmap
    
  7. Test: Le test de la touche CAPSLOCK est évident. Appuyez simplement sur leur touche CAPSLOCK et vérifiez si les autres clés sont capitalisées. Pour tester la touche ÉCHAP, vous pouvez utiliser CTRL + V suivi de ÉCHAP. Il faut imprimer ^[. CTRL + V fait en sorte que le shell imprime la clé suivante mot à mot au lieu de l'interpréter.

Pour que cette modification soit chargée à chaque redémarrage, placez la ligne suivante dans votre /etc/rc.localfichier:

/usr/bin/loadkeys /path/to/swap_esc_capslock.kmap

Informations recueillies à partir de différentes pages, y compris, mais sans s'y limiter:

lesmana
la source
5
Vous pouvez également utiliser sudo setupcon --savepour rendre les modifications permanentes, plutôt que pour éditer rc.local. C'est essentiellement la même chose quedumpkeys < /dev/tty1 | gzip > /etc/console-setup/cached.kmap.gz
bukzor
Il est plus sûr d'utiliser /usr/bin/loadkeysen /etc/rc.localcar la variable d'environnement de chemin n'est pas garanti d'être fixé à ce stade. Et sudon'est pas nécessaire dans rc.local.
August Karlstrom
@AugustKarlstrom La commande in rc.locals'exécute à chaque démarrage du système. @ de bukzor sudo setupconest pas dans rc.local, il est une commande de configuration unique, qui remplace le keymap par défaut du système, sans ajout de code de démarrage d'exécution. En ajoutant loadkeys à rc.local, ajoute du code de démarrage supplémentaire et duplique ce qui était déjà fait par les loadkeys par défaut du système. La rc.localméthode pourrait en réalité être moins sûre, car elle dépend d’un chemin non standard vers le clavier.
RobertL
@RobertL s'il vous plaît élaborer la setupconméthode. Ajoutez votre propre réponse ou modifiez la mienne si vous le souhaitez.
Lesmana
Je ne peux pas vérifier la déclaration de @ bukzor à propos de setupcon. Il semble que Août a fait l'hypothèse que le sudo setupcon --saveentrais dans rc.locallequel je ne pense pas est vrai, mais si elle le fait, vous n'avez pas besoin sudodans rc.local. Je pense que nous avons besoin de plus d'informations avant de mettre à jour votre réponse. La question principale est "Comment installer le clavier modifié pour qu'il soit chargé automatiquement pendant le processus de démarrage?" Je ne sais vraiment pas quelle est la meilleure solution, rc.localinstaller un clavier, ou même si l’installation d’un clavier fonctionnera. Je fais des recherches à ce sujet récemment et je vais vérifier ici.
RobertL
4

Utilisez 'ctrl: nocaps' au lieu de 'ctrl: swapcaps' si vous voulez juste avoir deux touches majuscules (la majuscule sous un autre nom est toujours super inutile).

X11: (voir aussi: /usr/share/X11/xkb/rules/base.lst)

sudo vim /etc/default/keyboard
    XKBOPTIONS="ctrl:swapcaps"
udevadm trigger --subsystem-match=input --action=change
sudo restart lightdm

Console texte: (volé à la setupcon)

#!/bin/sh
. /etc/default/console-setup 
. /etc/default/keyboard
ckbcomp $acm_option $rules_option -model "$XKBMODEL" \
            "$XKBLAYOUT" "$XKBVARIANT" "$XKBOPTIONS" \
            | gzip -9 2>/dev/null >/etc/console-setup/cached.kmap.gz
loadkeys /etc/console-setup/cached.kmap.gz
bukzor
la source