Was macht "Key to Choose 5th Level" in den Eigenschaften der Gnome-Tastatur?

17

Es gibt eine Option, um eine Taste für den Zugriff auf die 5. Ebene der Tastatur in gnome-keyboard-properties("Tastatur" unter Hardware in den Systemeinstellungen) anzugeben :

Screenshot des besagten Dialogs

Aber wenn ich die 5. Ebene auf AltGrund die 3. Ebene auf stelle Right Ctrlund wenn ich die Taste 54 wie folgt stelle:

xmodmap -e "keycode 54 = 1 2 3 4 5 6 7 8"

Ich erhalte folgende Ergebnisse durch Drücken verschiedener Variationen:

keycode 54 = 1
keycode 54 + right ctrl = 5
keycode 54 + right ctrl + shift = 6
keycode 54 + shift = 2
keycode 54 + AltGr = 1
keycode 54 + AltGr + shift = 2
  1. Was macht der 5th Level Modifier?

  2. Wie richte ich es so ein, dass ich 5 oder 6 verschiedene Zeichen aus einem einzigen Schlüssel herausholen Shiftkann Alt Gr( Right Ctrlzum Beispiel geändert von )?

sup
quelle

Antworten:

14

„1. Was macht der Modifikator der 5. Stufe? “

Es wählt die fünfte Ebene. Der Modifikator der 2. Ebene (nur reguläre Verschiebung) wählt die zweite Ebene und die 3. Ebene wählt die dritte Ebene.

Der Grund, warum der Modifikator der 5. Ebene die fünfte Ebene anstelle der vierten Ebene wählt (direkt nach dem Modifikator der 3. Ebene), ist, dass diese drei Modifikatoren auf unterschiedliche Weise kombiniert werden können, um acht verschiedene Ebenen auszuwählen (dies beinhaltet, dass keiner der Modifikatoren verwendet wird, das ist nur ein Tastendruck ohne solche Modifikatoren). Es gibt acht Kombinationen, da 2 ↑ 3 = 8. Für die ersten beiden Modifikatoren gibt es vier Kombinationen:

  • Keine Modifikatoren (Stufe 1)
  • 2nd Level Modifier, auch bekannt als Shift (Level 2)
  • 3rd Level Modifikator (Level 3)
  • 2. + 3. Modifikator (Stufe 4)

Durch Hinzufügen des dritten Modifikators (5. Stufe) werden vier weitere Stufen hinzugefügt.

„2. Wie richte ich es so ein, dass ich 5 oder 6 verschiedene Zeichen aus einer einzigen Taste herausholen kann Alt Gr( Right Ctrlzum Beispiel durch Umschalttaste geändert )? “

Zunächst benötigen Sie ein Layout, das fünf oder mehr Zeichen pro Taste verwendet. Sie können ein vorhandenes Layout auswählen. Wenn Sie dem derzeit verwendeten Layout jedoch einfach weitere Ebenen hinzufügen möchten, ist dies möglicherweise nicht optimal. Zum Beispiel gibt es das Neo- Tastaturlayout († 1), das jedoch für die deutsche Sprache optimiert ist, sodass es für die meisten Englischsprachigen nicht so gut ist.

Trotzdem kann es lehrreich sein, sich anzuschauen, welche Tasten Neo für den Level 5-Modifikator ausgewählt hat.

Neo-Layout

Neo nennt anscheinend den Level 5 Modifier für "Mod4". Wie Sie sehen können, wird die Taste rechts von der linken Umschalttaste ( LSGT) und die rechte Alt-Taste / AltGr-Taste verwendet. Dies ist bei einer europäischen Tastatur (105 Tasten) der Fall, die im Vergleich zur US-Tastatur (104 Tasten) eine schmale Linksverschiebung und eine große und dünne Eingabetaste aufweist. Für ein Tastaturlayout, das auf der US-Tastatur basiert, muss oder möchte man möglicherweise andere Tasten wählen.

Auswahl einer Modifizierertaste der Stufe 5

In der Antwort von sup wählt er Xmodmap. Heutzutage werden Tools wie Setxkbmap gegenüber Xmodmap empfohlen. Xkb enthält viele vordefinierte Optionen für die Auswahl des Level 5-Modifikators. Wenn Sie sich an man xkeyboard-config wenden und danach suchen lv5, finden Sie folgende Optionen:

┌──────────────────────┬───────────────────────────────────────────────────┐
│ Option               │ Description                                       │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lsgt_switch_lock │ <Less/Greater> chooses 5th level; acts as onetime │
│                      │ lock when pressed together with another 5th level │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:ralt_switch_lock │ Right Alt chooses 5th level; acts as onetime lock │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lwin_switch_lock │ Left Win chooses 5th level; acts as onetime lock  │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:rwin_switch_lock │ Right Win chooses 5th level; acts as onetime lock │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
└──────────────────────┴───────────────────────────────────────────────────┘

Die dokumentierten Optionen sind also die LSGTTaste, die rechte ALT-Taste, die rechte Windows-Taste und die linke Windows-Taste. Wie wir gesehen haben, verwendet Neo die ersten beiden Optionen.

Angenommen, Sie möchten die lv5:ralt_switch_lockOption mit einem bestimmten Layout verwenden. Dieser Befehl richtet das usLayout mit dieser Modifikatortaste der Ebene 5 ein:

setxkbmap -option "lv5:ralt_switch_lock" us

man xkeyboard-configVerwenden Sie daher für alle Optionen, die in dokumentiert sind , diese als Argument für die -optionVerwendung von Setxkbmap.

Wenn diese Optionen nicht ausreichen und Sie einen anderen Schlüssel als Modifikator der Ebene 5 definieren möchten, sollten Sie die Deklarationen für diese Optionen lesen. Sie scheinen in zu sein /usr/share/X11/xkb/symbols/level5. Die Deklaration für lv5:ralt_switch_locksieht so aus:

partial modifier_keys
xkb_symbols "ralt_switch_lock" {
  include "level5(lock)"
  key <RALT> {
    type[Group1] = "EIGHT_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift,
                        ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
  };
};

Die rechte Seite von gibt symbols[Group1]an, welche Taste oder welches Zeichen die einzelnen Ebenen der Taste erzeugen sollen. Diese nutzt alle acht möglichen Stufen , da es soll sperren die Stufe 5 Modifikator , wenn sie zusammen mit einer anderen Ebene 5 Shift - Taste gedrückt wird . Die Ebenen 5–8 werden ausgegeben, ISO_Level5_Lockda auf alle diese Ebenen zugegriffen wird, indem die Schicht 5 und eine Kombination der anderen Schichttasten (keine für alle) gedrückt gehalten wird. Wenn Sie nur das Shift-Verhalten und nicht auch das Lock-If-Two-Pressed-Verhalten möchten, können Sie eine einfachere Erklärung abgeben (aus derselben Datei):

// The right Alt key (while pressed) chooses the fifth shift level.
partial modifier_keys
xkb_symbols "ralt_switch" {
  key <RALT> {
    type[Group1]="ONE_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift ]
  };
  include "level5(modifier_mapping)"
};

Hinzufügen zusätzlicher Ebenen zu einem Layout

Xkb-Layouts sind ziemlich modular. Sie können umfassen bestehenden Layouts und sie verändern. So können wir ein vorhandenes Layout mit weniger als 5 Ebenen auswählen und einige Ebenen hinzufügen.

Sie können neue Layouts erstellen, indem Sie die Datei mit Ihren Layouts in kopieren /usr/share/X11/xkb/symbols/oder wo immer Ihre Xkb-Tools nach Layouts suchen. Dies erfordert jedoch das sudo-Privileg, sodass dies nicht die beste Lösung ist. Alternativ können Sie die Verzeichnisstruktur von kopieren xkb/ und Ihre Layouts in das entsprechende Verzeichnis unter stellen xkb/, nämlich symbols/. Angenommen, Sie haben eine Datei erstellt xkb-tree/symbols/my-layouts. Um in dieser Datei definierte Layouts zu verwenden, können Sie die -print Option von verwenden setxkbmapund dann die Ausgabe weiterleiten xkbcomp. Dieses Wrapper-Skript verwendet die Layouts als Eingabe:

#!/bin/sh

# `-option ""` resets all options.
setxkbmap -option "" -layout "$1" \
    -print |
    xkbcomp -I"<path-to-project>/xkb-tree" - "$DISPLAY"

In Bezug auf die Datei mit dem Layout möchten wir beispielsweise das Layout "US international" erweitern, das vier Ebenen verwendet. Zunächst richten wir die Shift-Tasten der Ebenen 3 und 5 auf dieselbe Weise ein wie Neo:

partial alphanumeric_keys
xkb_symbols "mine" {
    // US international
    include "us(intl)"
    // Set up level 3 modifiers.
    include "level3(modifier_mapping)"
    include "level3(bksl_switch)"
    include "level3(caps_switch)"
    // Set up level 5 modifiers.
    include "level5(modifier_mapping)"
    include "level5(lsgt_switch)"
    include "level5(ralt_switch)"
};

Jetzt wollen wir einige zusätzliche Zeichen hinzufügen. Verwenden wir nur die ersten vier Tasten von QWERTY-Layouts als Beispiel. Diese Tasten sind Qauf R, das entsprechen <AD01>zu <AD04>. Zuerst müssen wir die Tasten für die Verwendung von bis zu acht Ebenen einrichten:

key.type[Group1] = "EIGHT_LEVEL";

Um sie nicht neu zu definieren, ordnen wir sie den ersten vier Ebenen zu NoSymbol. Dann fügen wir zwei Ebenen hinzu. Auf Stufe 5 fügen wir die Pfeile ←↓↑→(† 2) hinzu. In Level 6 fügen wir die Richtungstasten hinzu. Unser Layout sieht dann so aus:

partial alphanumeric_keys
xkb_symbols "mine" {
    // US international
    include "us(intl)"
    // Set up level 3 modifiers.
    include "level3(modifier_mapping)"
    include "level3(bksl_switch)"
    include "level3(caps_switch)"
    // Set up level 5 modifiers.
    include "level5(modifier_mapping)"
    include "level5(lsgt_switch)"
    include "level5(ralt_switch)"

    // Make the following keys capable of using eight levels.
    key.type[Group1] = "EIGHT_LEVEL";

    key <AD01> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        leftarrow, Left
    ] };
    key <AD02> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        downarrow, Down
    ] };
    key <AD03> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        uparrow, Up
    ] };
    key <AD04> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        rightarrow, Right
    ] };

};

Um es zu benutzen, können wir das Wrapper-Skript benutzen, das wir gemacht haben:

./setxkbmap-wrapper "my-layouts(mine)"

† 1: Neo ist de(neo)in Xkb; setxkbmap "de(neo)".

† 2: Um die von Xkb verwendeten symbolischen Namen zu finden, suchen Sie nach einer Datei mit dem Namen keysymdef.h. Es sollte sich unter einem Verzeichnis mit dem Namen befinden X11/. Sie können auch Unicode-Namen verwenden, z. B. U2192für U + 2192.

Guildenstern
quelle
1
Vielen Dank, dass Sie sich die Zeit genommen haben, diese Antwort zu verfassen. Ich habe schon seit einiger Zeit nach einer Möglichkeit gesucht, meine JKLI-Tasten als Pfeiltasten zu verwenden. Dies war also unglaublich praktisch. Bitte genießen Sie diese zusätzlichen 50 Punkte! (Ich sollte morgen in der Lage sein, das Kopfgeld
zuzuteilen
1
Nun, danke, dies ist eine großartige Antwort, auch wenn es etwas spät ist, aber genau das habe ich damals gesucht (aber jetzt unterstützt GNOME eigentlich nicht das Setzen des Modifikators - aber solange es mit Konfigurationsdateien funktioniert, alle ist gut).
sup
8

Nun, nach ein bisschen Graben:

(1) Die Taste für die Auswahl der 5. Ebene erledigt einige seltsame Dinge (in Bezug auf einige französische Layouts), die für das, was ich tun wollte, nicht relevant sind. Grundsätzlich wird festgelegt, welcher Schlüssel als ISO_Level5_Shift fungieren soll. ISO_Level5_Shift wird in einigen undurchsichtigen Layouts verwendet. Diese Antwort basiert auf der Anzahl der Ergebnisse, die Google bei der Suche nach "ISO_Level5_Shift" und auf diesen Links gibt .

(2) Es kann nicht verwendet werden, um 6 Symbole aus einem physischen Schlüssel zu erhalten. Eine Möglichkeit, dies zu erreichen, ist die Verwendung der Datei .xmodmap, die sich im Verzeichnis $ HOME befindet.

Zuerst Befehl

xmodmap -pm

gibt an, welche Tastensymbole als verschiedene Modifikatoren fungieren. Auf meinem System war es wie folgt:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x9)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  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)

mod3 muss eingerichtet werden, um 6 Symbole mit einer Taste zu verwenden. Dies muss in der .xmodmap-Datei abgelegt werden:

clear mod3
clear mod5
keycode 94 = Mode_switch
add mod3 = Mode_switch
add mod5 = ISO_Level3_Shift

Dann gab mir xmodmap -pm:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x9)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        Mode_switch (0x5e),  Mode_switch (0xcb)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  ISO_Level3_Shift (0x6c)

Wobei der Schlüsselcode 94 der Schlüssel ist, den ich als Mod3 gewählt habe. Mit dem Kommandozeilen-Tool xev können Sie Schlüsselcodes für verschiedene physische Schlüssel finden (führen Sie es einfach aus und drücken Sie verschiedene Tasten, die Schlüsselcodes werden angezeigt).

Dann, wenn ich in .xmodmap-Datei platziere

keycode 54 = 1 2 3 4 5 6

oder laufe

xmodmap -e "keycode 54 = 1 2 3 4 5 6"

Ich bekomme sechs verschiedene Symbole aus einer Taste, wenn ich altgr, shift und keycode 94 benutze (es ist eine nutzlose Taste neben left shift in meinem physischen Layout).

UPDATE: Wenn Sie nur fünf Symbole benötigen, ist es praktisch, es so einzurichten:

keycode 54 = 1 2 3 3 5 6

Es kommt gelegentlich vor, dass ich 4 statt 3 bekomme.

sup
quelle