Tippen mit Tastenkombinationen?

12

Ich bin ein Ubuntu 10.04-Benutzer, der nach einer Möglichkeit sucht, beispielsweise meinen Computer zum "+" zu machen, wenn ich die WindowsTaste gedrückt halte (ich glaube, sie wird Superin der Linux-Welt aufgerufen ) und die KTaste drücke . Ich brauche das für alle Anwendungen. (Ich bin eine Person mit einer Tippbehinderung und muss Ubuntu an meine Bedürfnisse anpassen.) Danke!

Kris Harper
quelle

Antworten:

15

Da Sie die Schlüssel für alle Anwendungen neu zuordnen möchten, ist die Verwendung von xmodmap die beste Option. Es ist flexibel und sehr leistungsfähig, erfordert jedoch die Eingabe einiger Befehle in ein Terminal.

Schritt 0 - Der Ansatz

Der X-Server verwaltet die Tastatur und alle Tastenereignisse und übersetzt diese in Schlüsselcodes für alle Anwendungen.

Der Ansatz wäre, eine Modifikatortaste (wie die Super- oder die rechte Alt-Taste) als "Modusschalter" -Taste zuzuordnen und dem X-Server mitzuteilen, je nachdem, ob eine Taste bei gedrückter Modustaste gedrückt wird oder nicht, unterschiedliche Codes zu generieren.

Standardmäßig ist keine Modusschaltertaste definiert und alle Tasten sind so konfiguriert, dass sie denselben Code generieren, wenn sie mit oder ohne Modusschalter gedrückt werden. Dies ist gut, da dies bedeutet, dass sich außer den Schlüsseln, die Sie explizit überschreiben, keine anderen Schlüssel anders verhalten oder eine zusätzliche Konfiguration erfordern.

Ich möchte Sie jedoch bitten, die rechte Alt-Taste als Modusschalter zu verwenden, insbesondere wenn Sie auch Compiz verwenden, da einige Compiz-Plugins Super-Tastenkombinationen (z. B. Fensterauswahl, Umschalter usw.) zuordnen. Wenn Sie nicht daran interessiert sind, Compiz über die Tastatur zu steuern, ist Super in Ordnung.

In xmodmap werden die Superschlüssel als Super_L oder Super_R identifiziert. Sie müssen einen auswählen, der als Modusumschalttaste verwendet werden soll. Alternativ ist die rechte Alt-Taste Alt_R. Sie können dies bestätigen, indem Sie xev ausführen und die erforderlichen Tasten auf Ihrer Tastatur drücken. Siehe diesen Beitrag für die Schritte.

Schritt 1 - Einrichten der Modifikatorkarte

  1. Öffnen Sie ein Terminal ( Applications -> Accesories -> Terminal) und führen Sie den folgenden Befehl aus, um eine Datei mit den aktuellen Tastenkombinationen zu erstellen . Wir werden dies als Ausgangspunkt verwenden.

    xmodmap -pke > curkeys.map
    xmodmap -pm >> curkeys.map
    
  2. Öffnen Sie dies in Ihrem bevorzugten Texteditor. gedit curkeys.map &öffnet es in gedit. Gegen Ende der Datei sehen Sie einige Zeilen wie diese:

    keycode 253 =
    keycode 254 =
    keycode 255 =
    xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
    
    shift       Shift_L (0x32),  Shift_R (0x3e)
    lock        Caps_Lock (0x42)
    control     Control_L (0x25),  Control_R (0x69)
    mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
    mod2        Num_Lock (0x4d)
    mod3      
    mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
    mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
    
  3. Löschen Sie die Zeile beginnend mit "xmodmap: bis 4 ..."

  4. Bearbeiten Sie die Modifikatorkarte so, dass sie so aussieht. Fügen Sie das Wort "add" am Anfang jeder Zeile ein und fügen Sie "=" nach dem Namen des Modifikators ein. Entfernen Sie dann die Codes in Klammern und Kommas. Beachten Sie auch, dass ich Mode_switchvon mod5Zeile zu mod3Zeile gewechselt bin , da es leer war. Die geänderte Tabelle sollte so aussehen - der tatsächliche Inhalt weicht in Ihrem Fall geringfügig von den unten aufgeführten ab (abhängig von Ihrem Tastaturlayout).

    add shift =      Shift_L  Shift_R
    add lock  =      Caps_Lock
    add control =    Control_L  Control_R
    add mod1    =    Alt_L Meta_L Alt_R 
    add mod2    =    Num_Lock
    add mod3    =    Mode_switch
    add mod4    =    Super_L Super_R Super_L Hyper_L 
    add mod5    =    ISO_Level3_Shift
    
  5. Ordnen Sie die Taste für den physischen Moduswechsel neu zu. Fügen Sie am Ende eine Zeile wie diese hinzu (ersetzen Sie Super_L durch Super_R oder Alt_R, falls erforderlich).

    keysym Super_L = Mode_switch
    
  6. Entfernen Sie den Schlüsselnamen (Super_L) aus jeder Modifikatordefinition. Für Super_L bedeutet dies, dass es aus der mod4-Zeile entfernt wird.

    add mod4    =    Super_R Hyper_L 
    

    Jetzt fungiert die rechte "Super" -Taste weiterhin als normale Super-Taste, während die linke Taste spezielle Eigenschaften hat.

  7. Jetzt müssen wir die Tasten neu zuordnen, um unterschiedliche Codes zu erzeugen, unabhängig davon, ob sie gedrückt werden, während Sie Super_L gedrückt halten oder nicht. Jede Zeile in unserer Datei, die mit beginnt, keycodegibt 4 Schlüsselwörter für jede zu erzeugende Taste an, je nachdem, ob Mod1 (Umschalttasten) und Modusumschalttasten gedrückt werden. ( Link )

    !...........................................................................
    !        Key            Base              Shift           Mode    Mode+Shift
    !---------------------------------------------------------------------------
    keycode  13             = 4               dollar          4       quotedbl
    keycode  14             = 5               percent         5       colon
    keycode  15             = 6               asciicircum     6       comma
    keycode  16             = 7               ampersand       7       period
    ...
    keycode  45             = k               K               k       K
    

    Wenn Super_L + k eine "+" - Taste erzeugen soll, müssen wir diese ändern, um dies zu lesen

    keycode  45 = k K plus plus
    

    Das letzte Plus ordnet auch Shift + Super_L + k plus zu, dies kann jedoch auf etwas anderes abgebildet werden. Für jede Taste muss genau 1 Zeile geändert werden. Bearbeiten Sie mehr Zeilen, um mehr Tasten neu zuzuordnen - lassen Sie die ersten 2 Einträge intakt, um das normale Tastendruckverhalten beizubehalten.

  8. Speichern Sie die Datei und beenden Sie den Editor.

  9. Installieren Sie die Tastaturbelegung, indem Sie die folgenden Befehle in einem Terminal ausführen. Der erste richtet es für diese Sitzung ein, der zweite macht es dauerhaft für zukünftige Sitzungen.

    xmodmap curkeys.map
    cp curkeys.map ~/.Xmodmap
    
  10. Sie können dies sofort testen, indem Sie die geänderten Tasten (z. B. Super_L + k) drücken.

Schritt 3 - Hinzufügen / Überarbeiten der Karte

Sobald die geänderte Karte installiert ist, können ganz einfach neue Schlüssel hinzugefügt werden.

  1. Verwenden Sie xev , um die Schlüsselcodes und Schlüsselwörter zu finden

  2. Testen Sie es, indem Sie diesen Befehl ausführen, um den Schlüssel zuzuordnen:

    xmodmap -e "keycode <code> = <base> <shift> <new-mapping> <new-shift-mapping>"
    

    Ersetzen Sie Elemente in spitzen Klammern (wie <code> <base>usw.) durch entsprechende Werte.

  3. Sichern Sie die curkeys.mapDatei.

  4. Öffnen Sie die curkeys.mapund bearbeiten Sie die Zeile für den entsprechenden Schlüsselcode.
  5. Wenden Sie die folgenden Befehle erneut an (der erste Befehl ist nicht erforderlich, wenn Sie Schritt 2 ausgeführt haben)

    xmodmap curkeys.map
    cp curkeys.map ~/.Xmodmap
    

Hinweis: 1 : Änderungen, die über Tastaturkürzel (z. B. System -> Preferences -> Keyboard Shortcuts) vorgenommen werden, wirken sich auf die Modifikatorzuordnung aus und gehen bei der nächsten Anmeldung in der Regel verloren. Also bitte vermeide das.

Hinweis: 2 : Ich erhalte manchmal solche Fehlermeldungen, wenn ich diese Methode verwende. Ich weiß nicht, was das bedeutet, aber diese sind im Allgemeinen harmlos.

X Error of failed request:  BadValue (integer parameter out of range for operation)
Major opcode of failed request:  118 (X_SetModifierMapping)
Value in failed request:  0x17
Serial number of failed request:  263
Current serial number in output stream:  263

Eine ausführliche Hilfe zu xmodmap finden Sie hier .

koushik
quelle
Hast du Glück damit? Wenn dies nicht hilft oder in irgendeiner Weise unklar ist, werde ich es überarbeiten und nützlicher machen.
Koushik
1
Bitte beachten Sie , dass in Linux Mint 17 Xfce (oder zumindest dort), es sein muss ~/.Xmodmap, ~/.xmodmapwird ignoriert.
zbr
2
Vergessen Sie nicht cleardie Schlüssel, die gemäß unix.stackexchange.com/a/4526/2512
Andy