Wie ändere ich die Tastaturbelegung der Konsole unter Linux?


36

Ich möchte tauschen Escund CapsLockin der Konsole (nicht in X und verwenden xev), wie kann ich das tun?

Mein Betriebssystem ist Ubuntu.

Antworten:


60

Die Werkzeuge des Tastaturlayouts auf den manipulieren virtuellen Konsolen sind loadkeys, dumpkeysund showkey. Lesen Sie ihre Hilfeseiten und informieren Sie sich über ihre Feinheiten.

Beachten Sie, dass diese Tools nur in einer virtuellen Konsole und nicht in einem Terminalemulator in einer grafischen Umgebung wie gnome funktionieren. Lesen Sie diese Frage und die Antworten, um mehr über den Unterschied zu erfahren: https://askubuntu.com/questions/14284/why-is-a-virtual-terminal-virtual-and-what-where-is-the-real-terminal .

Hier ist eine kurze Anleitung, um zu tun, was Sie wollen:

  1. Speichern Sie Ihr aktuelles Tastaturlayout:

    $ dumpkeys > backup.kmap
    

    Falls etwas schief geht, können Sie möglicherweise Ihre Tastaturbelegung mit dem folgenden Befehl wiederherstellen:

    $ sudo loadkeys backup.kmap
    

    Wenn die Tastatur so durcheinander ist, dass Sie dies nicht einmal tun können, besteht Ihre einzige Option, die keine alte Kernelmagie beinhaltet, darin, einen Neustart durchzuführen.

  2. Überprüfen Sie, welche Schlüsselcodes Ihren Schlüsseln zugeordnet sind:

    $ showkey
    

    Drücken Sie nun die ESC-Taste und die CAPSLOCK-Taste. Die Tastencodes sollten auf dem Bildschirm angezeigt werden. Notieren Sie die Schlüsselcodes. Auf meinem System hat der ESC den Schlüsselcode 1 und CAPSLOCK den Schlüsselcode 58. showkeyWird nach 10 Sekunden Inaktivität beendet (zumindest auf meinem Ubuntu 10.04).

  3. Notieren Sie sich die Namen der ESC- und CAPSLOCK-Tasten von dumpkeys:

    $ dumpkeys | grep 1
    ...
    keycode   1 = Escape
    ...
    $ dumpkeys | grep 58
    ...
    keycode  58 = CtrlL_Lock
    ...
    
  4. Beachten Sie die Keymap-Zeile von dumpkeys:

    $ dumpkeys | head -1
    keymaps 0-127
    
  5. Erstellen Sie eine Keymap-Datei, die ESC und CAPSLOCK umschaltet:

    keymaps 0-127
    keycode   1 = CtrlL_Lock
    keycode  58 = Escape
    
  6. Laden Sie die Keymap:

    $ sudo loadkeys swap_esc_capslock.kmap
    
  7. Test: Das Testen der CAPSLOCK-Taste ist offensichtlich. Drücken Sie einfach die FESTSTELLTASTE und prüfen Sie, ob andere Tasten mit einem Großbuchstaben ausgegeben werden. Zum Testen der ESC-Taste können Sie STRG + V gefolgt von ESC verwenden. Es sollte drucken ^[. STRG + V bewirkt, dass die Shell den nächsten Schlüssel wörtlich ausgibt, anstatt ihn zu interpretieren.

Fügen Sie die folgende Zeile in Ihre /etc/rc.localDatei ein, damit diese Änderung bei jedem Neustart geladen wird :

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

Informationen, die von verschiedenen Seiten gesammelt wurden, einschließlich, aber nicht beschränkt auf:


5
Sie können auch sudo setupcon --saveÄnderungen dauerhaft vornehmen, anstatt rc.local zu bearbeiten. Das ist im Wesentlichen dasselbe wiedumpkeys < /dev/tty1 | gzip > /etc/console-setup/cached.kmap.gz
bukzor

Es ist sicherer in der Anwendung /usr/bin/loadkeysin /etc/rc.localda der Pfad - Umgebungsvariable nicht gewährleistet ist zu diesem Zeitpunkt festgelegt werden. Und sudowird in nicht benötigt rc.local.
August Karlstrom

@AugustKarlstrom Der Befehl in rc.localwird bei jedem Systemstart ausgeführt. @ bukzor's sudo setupconist nicht in rc.local, es ist ein einmaliger Setup-Befehl, der die Standardschlüsselzuordnung des Systems ersetzt, ohne dass ein Laufzeit-Startcode hinzugefügt wird. Durch Hinzufügen loadkeys zu rc.localwird zusätzlicher Startcode hinzugefügt und das dupliziert, was bereits von den Standardladeschlüsseln des Systems ausgeführt wurde. Die rc.localMethode ist möglicherweise weniger sicher, da sie von einem nicht standardmäßigen Pfad zur Keymap abhängt.
RobertL

@RobertL bitte die setupconMethode ausarbeiten . Füge deine eigene Antwort hinzu oder bearbeite meine, wenn du möchtest.
Lesmana

Ich kann die Aussage von @ bukzor über nicht bestätigen setupcon. Es scheint , dass August der Annahme, dass die sudo setupcon --savewürde in rc.localdem ich glaube nicht wahr ist, aber wenn es der Fall ist, brauchen Sie nicht sudoin rc.local. Ich denke, wir brauchen mehr Informationen, bevor wir Ihre Antwort aktualisieren können. Die Hauptfrage lautet: "Wie installiere ich die geänderte Keymap, damit sie während des Startvorgangs automatisch geladen wird?" Ich weiß wirklich nicht, welcher Weg der rc.localbessere ist, oder ob die Installation einer Keymap funktioniert oder nicht. Ich habe das in letzter Zeit recherchiert und ich werde hier nachsehen.
RobertL

4

Verwenden Sie 'ctrl: nocaps' anstelle von 'ctrl: swapcaps', wenn Sie nur zwei Feststelltasten haben möchten (Feststellen mit einem anderen Namen ist immer noch überflüssig).

X11: (siehe auch: /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

Textkonsole: (von setupcon gestohlen)

#!/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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.