Jak ponownie włączyć klawisz Caps Lock?

12

Obecnie konfiguruję domyślny układ klawiatury w następujący sposób:

setxkbmap -layout us -variant dvorak -option ctrl:nocaps,[...]

Wyłącza klawisz Caps Lock i czyni go dodatkowym klawiszem Ctrl wraz z mnóstwem innych opcji.

Chciałbym wykonać następujące czynności, aby zmienić układ klawiatury:

setxkbmap -layout us -variant dvorak-l -option ctrl:swapcaps

Nie powoduje to jednak ponownego włączenia klawisza Caps Lock; Zarówno lewy klawisz kontrolny, jak i klawisz Caps pozostają jak dotąd klawiszami kontrolnymi.

Wiem, że mogę wyczyścić całą listę opcji, ale ze względu na łatwość konserwacji wolałbym nie kopiować tych opcji. Jak ponownie włączyć Caps Lock?

Aktualizacja: Patrząc na naciśnięcia klawiszy za pomocą xev (1), wydaje się, że ctrl: nocaps daje znak Control_Ldla obu klawiszy, a ctrl: swapcaps „przywraca” klawisz Caps Lock (naciśnięcie klawisza daje Caps_Lock). Jednak dioda LED Caps Lock nie świeci ani nie działa.

Przejrzenie xkeyboard-config/symbols/ctrlpliku w źródłach X.org wskazuje na problem:

xkb_symbols "nocaps" {
    replace key <CAPS>  {  [ Control_L, Control_L ] };
    modifier_map  Control { <CAPS>, <LCTL> };
};
xkb_symbols "swapcaps" {
    replace key <CAPS>  {  [ Control_L ] };
    replace key <LCTL>  {  [ Caps_Lock ] };
};

Ta ostatnia opcja nie ma linii modifier_map, cokolwiek by to zrobiło

Hhaamu
źródło
Zgaduję, że wszyscy, którzy próbowali mi pomóc, utknęli na klawiaturze dvorak = (
hhaamu,
4
X jest teraz tak stary i złożony, że niewiele osób naprawdę rozumie różne mechanizmy wewnętrzne. Na stronie podręcznika znajdują się nawet sekcje, które mówią (i cytuję): „ Nikt nie chce powiedzieć, jak to działa. Może nikt nie wie ... ”. Jestem również zainteresowany odpowiedzią na to pytanie, ale być może nikt nie wie ...
jw013,

Odpowiedzi:

14

Następujące polecenia powinny działać:

xmodmap -e 'keycode 0x42 = Caps_Lock'

lub

setxkbmap -option

Powyższe polecenia działają dobrze, aby przywrócić domyślne zachowanie, którego na szczęście prawie nigdy nie potrzebuję.

Zwykle mapuję Capslock do Control (na szczęście VI / VIM obsługuje CTRL-C zamiast ESC) za pomocą następującego polecenia:

setxkbmap -option ctrl:nocaps -layout gb
Alex
źródło
„Opcja setxkbmap” do wyczyszczenia ustawień jest dokładnie tym, czego szukałem. Próbowałem zmienić swoje zachowanie, ale dodawałem sprzeczne elementy do listy opcji.
m0j0
2

Próbować setxkbmap -option -layout us -variant dvorak-l -option ctrl:swapcaps

Z strony podręcznika:

[...] If you want to
replace all previously specified options, use the -option  flag
with an empty argument first.

Ironia polega na tym, że tutaj -option ctrl:swapcapsfaktycznie zastępuje -option ctrl:nocaps- myślę, że zachowanie się zmieniło.

Edycja: Jak stwierdził PO, chce uniknąć wyczyszczenia opcji (jak to zrobiono w powyższy sposób).

/usr/share/X11/xkb/rules/xorg.lstpokazuje opcję ctrl:aa_ctrl(kontrola w lewym dolnym rogu), która wydaje się tutaj resetować Caps Lock nocaps.

Wydaje mi się, że warto spróbować. Możesz także spojrzeć na listę ( grep ctrl\:) i sprawdzić, czy może coś jeszcze zadziałać, na wypadek gdyby to nie zadziałało.

Jeśli nie ma takiej opcji, myślę, że rozwiązaniem jest zhakowanie bieżącej mapy klawiszy, poprzez ponowne skojarzenie Caps Lock z klawiszem Caps Lock (ale nie mam z tym doświadczenia, poza przekonaniem, że istnieje narzędzie, które pozwala ci to zrobić to z jednowarstwową).

njsg
źródło
To rzeczywiście usuwa listę opcji, ale chcę zachować opcje niezwiązane z literami (jak powiedziałem w pytaniu), takie jak komponowanie kluczy.
hhaamu
Przepraszam, źle odczytałem pytanie. Nie jestem pewien, czy to zadziała (jak już powiedziałem, swapcapsfaktycznie ponownie włącza tutaj blokadę Caps), ale z /usr/share/X11/xkb/rules/xorg.lst, widzę, że jest opcja ctrl:aa_ctrl(kontrola w lewym dolnym rogu), która wydaje się resetować blokadę Caps po nocapstym.
njsg
Myślę, że ten magiczny program jest, xmodmapale nie jestem pewien, jak go używać
hhaamu,
0

istnieje opcja „caps: capslock” (która odwzorowuje dodanie „+ capslock (capslock)” do xkb_symbols), która włącza capslock.

Jednak ta opcja (może wszystkie wielkie litery: xxxxx?) Jest dodawana przed istniejącymi ctrl: xxxxx; ponieważ ctrl: swapcaps redefiniuje klawisz Capslock, ta opcja nie działa.

Tak więc absolutnie musisz usunąć wszystkie opcje i faktycznie umieścić te, które chcesz; sposób, w jaki istnieją opcje, nie powinien cofać działania poprzedniej, a mając sprzeczne opcje (np. dwie (lub więcej), które definiują ten sam klucz), nie można zdefiniować ich kolejności.

Pablo Saratxaga
źródło