Co robi „Klawisz, aby wybrać 5 poziom” we właściwościach gnome-keyboard?


18

Istnieje możliwość określenia klucza, który będzie używany do uzyskania dostępu do 5. poziomu na klawiaturze w gnome-keyboard-properties(„Klawiatura” w części Sprzęt w Ustawieniach systemu):

Zrzut ekranu wspomnianego okna dialogowego

Ale jeśli ustawię 5. poziom na, AltGra trzeci poziom na Right Ctrli jeśli ustawię klucz 54 w następujący sposób:

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

Otrzymuję następujące wyniki po naciśnięciu różnych odmian:

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. Więc co robi modyfikator 5. poziomu?

  2. W jaki sposób skonfigurować go tak, że mogę dostać 5 lub sześć różnych postaci z jednego klucza (modyfikowanego Shift, Alt Gra Right Ctrlna przykład)?

Odpowiedzi:


15

„1. Więc co robi modyfikator 5. poziomu? ”

Wybiera piąty poziom. Modyfikator drugiego poziomu (zwykłe przesunięcie) wybiera drugi poziom, a trzeci poziom wybiera trzeci poziom.

Powodem, dla którego modyfikator 5. poziomu wybiera piąty poziom zamiast czwartego poziomu (zaraz po modyfikatorze 3. poziomu) jest to, że te trzy modyfikatory można łączyć na różne sposoby, aby wybrać osiem różnych poziomów (w tym nie używać żadnego z modyfikatorów, który po prostu naciska klawisz bez takich modyfikatorów). Istnieje osiem kombinacji od 2 ↑ 3 = 8. Dla pierwszych dwóch modyfikatorów istnieją cztery kombinacje:

  • Bez modyfikatorów (poziom 1)
  • Modyfikator 2. poziomu, aka shift (poziom 2)
  • Modyfikator 3. poziomu (poziom 3)
  • 2. + 3. modyfikator (poziom 4)

Dodanie trzeciego modyfikatora (5 poziom) dodaje cztery kolejne poziomy.

„2. Jak mogę ustawić go tak, że mogę dostać 5 lub sześć różnych postaci z jednego klucza (zmodyfikowanej przez Shift Alt Gri Right Ctrlna przykład)?”

Przede wszystkim potrzebujesz układu, który używa pięciu lub więcej znaków na klawisz. Możesz wybrać istniejący układ, ale jeśli chcesz po prostu dodać więcej poziomów do aktualnie używanego układu, może to nie być optymalne. Na przykład istnieje układ klawiatury Neo († 1), ale jest on „zoptymalizowany pod kątem języka niemieckiego”, więc nie jest tak świetny dla większości osób posługujących się językiem angielskim.

Mimo to warto pouczyć się, jakie klawisze Neo wybrał dla modyfikatora poziomu 5.

Układ Neo

Neo najwyraźniej nazywa modyfikator poziomu 5 dla „Mod4”. Jak widać, używa klawisza po prawej stronie lewego klawisza Shift ( LSGT) i prawego klawisza / AltGrklawisza Alt . Jest to na klawiaturze europejskiej (105 klawiszy), która w porównaniu z klawiaturą amerykańską (104 klawisze) ma wąski lewy shift oraz wysoki i cienki klawisz powrotu. W przypadku układu klawiatury opartego na klawiaturze amerykańskiej konieczne może być wybranie innych klawiszy.

Wybór klawisza modyfikującego poziom 5

W odpowiedzi sup wybiera Xmodmap. W dzisiejszych czasach narzędzia takie jak Setxkbmap są zalecane zamiast Xmodmap. Xkb zawiera wiele predefiniowanych opcji, takich jak wybór modyfikatora poziomu 5. Jeśli skonsultujesz się z man xkeyboard-config i lv5szukasz, znajdziesz następujące opcje:

┌──────────────────────┬───────────────────────────────────────────────────┐
│ 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                                           │
└──────────────────────┴───────────────────────────────────────────────────┘

Udokumentowane opcje to LSGTklucz, prawy klawisz Alt, prawy klawisz Windows i lewy klawisz Windows. Jak widzieliśmy, Neo korzysta z dwóch pierwszych opcji.

Powiedz, że chcesz użyć tej lv5:ralt_switch_lockopcji z pewnym układem. To polecenie konfiguruje usukład za pomocą tego klawisza modyfikującego poziom 5:

setxkbmap -option "lv5:ralt_switch_lock" us

Tak więc dla każdej z opcji, które są udokumentowane man xkeyboard-config, użyj tego jako argumentu -optionpodczas korzystania z Setxkbmap.

Jeśli te opcje nie są wystarczające i chcesz zdefiniować inny klucz, który będzie modyfikatorem poziomu 5, warto przyjrzeć się deklaracjom tych opcji. Wydaje się, że są w środku /usr/share/X11/xkb/symbols/level5. Deklaracja dla lv5:ralt_switch_lockwygląda następująco:

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 ]
  };
};

Prawa strona symbols[Group1]deklaruje, jaki klucz lub znak powinien generować każdy poziom klucza. Wykorzystuje wszystkie osiem możliwych poziomów, ponieważ ma blokować modyfikator poziomu 5, gdy jest naciśnięty razem z innym klawiszem Shift poziomu 5. Tak więc emitowane są poziomy 5–8, ISO_Level5_Lockponieważ dostęp do wszystkich tych poziomów uzyskuje się przez przytrzymanie klawisza Shift poziomu 5 i kombinacji innych klawiszy Shift (brak dla wszystkich). Jeśli chcesz tylko zachowania shift, a nie blokowania dwukrotnego naciśnięcia, możesz złożyć prostszą deklarację (z tego samego pliku):

// 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)"
};

Dodawanie dodatkowych poziomów do układu

Układy Xkb są dość modułowe. Możesz dołączyć istniejące układy i zmienić je. Możemy więc wybrać istniejący układ z mniej niż 5 poziomami i dodać do niego kilka poziomów.

Możesz tworzyć nowe układy, kopiując plik ze swoimi układami do /usr/share/X11/xkb/symbols/, lub gdziekolwiek to jest, że twoje narzędzia Xkb szukają układów. Ale to wymaga uprawnień sudo, więc nie jest to najlepsze rozwiązanie. Alternatywnie możesz skopiować strukturę katalogów xkb/ i umieścić swoje układy w odpowiednim katalogu xkb/, mianowicie symbols/. Powiedzmy, że utworzyłeś plik xkb-tree/symbols/my-layouts. Aby użyć układów zdefiniowanych w tym pliku, możesz użyć -print opcji, setxkbmapa następnie potokować dane wyjściowe xkbcomp. Ten skrypt otoki przyjmuje układy jako dane wejściowe:

#!/bin/sh

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

Jeśli chodzi o plik z układem, powiedzmy, że chcemy rozszerzyć układ „US international”, który wykorzystuje cztery poziomy. Po pierwsze, ustawiamy klawisze Shift poziomu 3 i poziomu 5 w taki sam sposób, jak 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)"
};

Teraz chcemy dodać dodatkowe postacie. Jako przykładu wykorzystajmy cztery pierwsze klucze układów Qwerty. Klawisze te są Qna R, które odpowiadają <AD01>na <AD04>. Najpierw musimy sprawić, aby klucze mogły korzystać z maksymalnie ośmiu poziomów:

key.type[Group1] = "EIGHT_LEVEL";

Dla pierwszych czterech poziomów, aby ich nie przedefiniować, mapujemy je na NoSymbol. Następnie dodajemy dwa poziomy. Na poziomie 5 dodajemy strzałki ←↓↑→(† 2). Na poziomie 6 dodajemy klawisze kierunkowe. Nasz układ wygląda następująco:

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
    ] };

};

Aby go użyć, możemy użyć skryptu opakowania, który wykonaliśmy:

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

† 1: Neo jest de(neo)w Xkb; setxkbmap "de(neo)".

† 2: Aby znaleźć nazwy symboliczne używane przez Xkb, wyszukaj plik o nazwie keysymdef.h. Powinien znajdować się w katalogu o nazwie X11/. Możesz także użyć nazw Unicode, na przykład U2192dla U + 2192.


1
Dziękujemy za poświęcenie czasu na skomponowanie tej odpowiedzi. Od jakiegoś czasu szukałem sposobu, aby używać moich klawiszy JKLI jako klawiszy strzałek, więc przydało się to niezwykle przydatne. Proszę skorzystać z dodatkowych 50 punktów! (Powinienem być w stanie przypisać nagrodę jutro.)
Glutanimate,

1
Cóż, dzięki, to świetna odpowiedź, nawet jeśli przyjdzie nieco później, ale właśnie tego szukałem wstecz (ale teraz GNOME faktycznie nie obsługuje ustawiania modyfikatora - ale dopóki działa przy użyciu plików konfiguracyjnych, wszystko jest dobrze).
sup

8

Cóż, po odrobinie kopania:

(1) Klucz do wyboru 5. poziomu robi dziwne rzeczy (dotyczące niektórych francuskich układów), które nie mają związku z tym, co chciałem zrobić. Zasadniczo określa, który klucz będzie działał jako ISO_Level5_Shift. ISO_Level5_Shift jest używany w niektórych niejasnych układach. Ta odpowiedź jest oparta na liczbie wyników, jakie Google daje podczas wyszukiwania „ISO_Level5_Shift” i na tych linkach .

(2) Nie można go użyć do uzyskania 6 symboli z jednego klucza fizycznego. Jednym ze sposobów na osiągnięcie tego jest użycie pliku .xmodmap umieszczonego w katalogu $ HOME.

Po pierwsze, rozkaz

xmodmap -pm

podaje, jakie symbole klawiszy działają jako różne modyfikatory. W moim systemie wyglądało to następująco:

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 musi zostać skonfigurowany, aby używać 6 symboli z jednym kluczem. To musi zostać umieszczone w pliku .xmodmap:

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

Następnie xmodmap -pm dał mi:

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)

Tam, gdzie klucz 94 jest kluczem, wybrałem działanie jako mod3. Kody różnych fizycznych kluczy można znaleźć za pomocą narzędzia wiersza polecenia xev (po prostu uruchom je i naciśnij różne klawisze, pojawią się kody).

Następnie, jeśli wstawię do pliku .xmodmap

keycode 54 = 1 2 3 4 5 6

lub biegnij

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

Otrzymuję sześć różnych symboli z jednego klawisza przy użyciu altgr, shift i keycode 94 (jest to bezużyteczny klawisz obok lewego klawisza shift na moim fizycznym układzie).

AKTUALIZACJA: jeśli potrzebujesz tylko pięciu symboli, wygodnie jest ustawić go w następujący sposób:

keycode 54 = 1 2 3 3 5 6

Czasami zdarza mi się, że w przeciwnym razie dostaję 4 zamiast 3.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.