Jak sprawić, aby klawisz Caps Lock był trzecim klawiszem Shift?

19

Jak sprawić, aby klawisz Caps Lock działał tak jak inny klawisz Shift?

Tutaj jest mnóstwo pytań dotyczących ponownego przypisania lub uruchomienia niestandardowego polecenia. Chcę tylko, żeby działało jak kolejny klawisz Shift. Nie chcę, aby inne klucze zmieniały to, co robią, tylko ten jeden.

Układ klawiatury / Caps Lock nie działa, nie rozumiem, jak zmienić mapowanie w CCSM.

Używam teraz klawiatury brytyjskiej, ale nauczyłem się pisać na klawiaturze amerykańskiej, mniejszy lewy klawisz Shift to DRIVING ME NUTS.

Tom Brossman
źródło
1
@ David-yourfriend OP specjalnie powiedział, xmodmapże nie działa.
TheWanderer
1
W xkb wydaje się, że ma to coś wspólnego z mapami kompatybilności, które tłumaczą niektóre kombinacje klawiszy na działania, a nie na symbole. Zajmie to więcej czasu na badania i testy niż w tej chwili mam. Jeśli zdobędę szansę, zagłębię się w to dalej, jeśli nie okruchy chleba poprowadzą kogoś innego we właściwym kierunku.
Elder Geek

Odpowiedzi:

14

Rozwijanie odpowiedzi @ Zacharee1:

wykonaj kopię zapasową za pomocą cp /usr/share/X11/xkb/symbols/pc ~/pckeybak

następnie edytuj za pomocą gksu gedit /usr/share/X11/xkb/symbols/pclub swojego ulubionego edytora.

Znajdź linię (22), która mówi:

key <CAPS> { [ Caps_Lock ] };

i zmień na

key <CAPS> { [ Shift_L ] };

oraz wiersz (36), który mówi:

modifier_map Lock { Caps_Lock };

i zmień na

//modifier_map Lock { Caps_Lock }; (co powinno to skomentować, w efekcie wyłączając blokadę)

Testy wskazują, że Num Locknadal działa zgodnie z oczekiwaniami. Dalsze testy wskazują, że wskaźniki klawiatury wydają się być nieco dysleksyjne w 16.04 nawet w niezmodyfikowanym systemie. Wskaźnik Scroll Lock włączony przy logowaniu, ale Scroll Lock wyłączony i Num Lock zgaszony, ale Num Lock włączony. Stuknięcie w lewy Ctrlklawisz wydaje się rozwiązać ten problem i nie jestem pewien, czy jest to związane z moim użyciem przełącznika KVM (co jest możliwe)

Uwaga: dalsze testy pokazują, że lampka kontrolna NumLock jest niestabilna nawet bez przełącznika KVM i musi zostać dwukrotnie stuknięta, aby ponownie zsynchronizować się z NumLock. Jeśli zawsze ją pozostawisz, możesz zignorować lampkę lub jeśli przeszkadza, możesz ją stuknąć dwa razy, aby odzyskać synchronizację. Dlaczego tak się dzieje, prawdopodobnie stanowi podstawę nowego pytania ...

Innym prostym rozwiązaniem oryginalnego problemu byłoby po prostu uzyskanie niedrogiej klawiatury amerykańskiej i użycie mapowania klawiatury amerykańskiej.

Źródła: @ Zacharee1 odpowiedź i analiza /usr/share/X11/xkb/symbols/pcoraz testy i testy błędów

Starszy Geek
źródło
Więc musiałeś wyłączyć tę linię 36? Wystarczy zmienić na Shift_L, by całkowicie wyłączyć dla mnie Capslock.
Wędrowiec
@ Zacharee1 Myślałem, że może to być przyczyną wpływu na Numlock, o którym wspomniał Tom Brossman w komentarzu do twojego postu i wyjąłem go tylko z tego powodu.
Elder Geek
Hmm To może być to. Widzę, czy mogę zmusić Zannę do przetestowania maszyny wirtualnej, ponieważ ma ona brytyjską tablicę.
TheWanderer
@ Zacharee1 To byłoby fajne, ponieważ nie mam dostępnego sprzętu do testowania i często polegam na logice w przypadkach, w których pełne testowanie nie jest możliwe.
Elder Geek
To się wreszcie udało, przetestowano i działało (przynajmniej na razie). Dziwne jest to, że lampka Num Lock na mojej klawiaturze zgasła, ale dodatkowe klawisze numeryczne są domyślnie włączone, gdy się loguję, i tego właśnie szukałem. Dzięki!
Tom Brossman,
10

Możesz się tam dostać, dostosowując Jak zmienić klawisz CapsLock, aby uzyskać „a”? (na przykład).

Usuń Lockmodyfikator (= Caps Lock) z Caps Lockklucza i zadeklaruj, że ten klucz wysyła klucz Shift_L.

remove Lock = Caps_Lock
keysym Caps_Lock = Shift_L

Alternatywnie możesz usunąć Lockmodyfikator i dodać Shiftmodyfikator.

remove Lock = Caps_Lock
add Shift = Caps_Lock

Tak czy inaczej, te wiersze przechodzą do pliku ~/.Xmodmap. Przetestuj, ładując go xmodmap ~/.Xmodmap; plik jest odczytywany automatycznie, gdy logujesz się w domyślnym środowisku (lub przynajmniej w dniach Gnome).

Gilles „SO- przestań być zły”
źródło
2
Idealnie, działało. Zrobiłem nowy pusty dokument w moim katalogu domowym o nazwie „.Xmodmap” i wkleiłem w nim swój pierwszy przykład. Następnie wpisałem „xmodmap ~ / .Xmodmap” w terminalu, aby natychmiast zadziałało. Oba zostały wyjaśnione w powiązanej odpowiedzi. Dziękuję Ci.
Tom Brossman
Drugi zestaw poleceń nie działa dla mnie, ale pierwszy działa świetnie. Naciśnięcie Caps Lock nawet nie włącza podświetlenia klawiatury, więc nawet nie wyzwala mojego ukrytego OCD.
Waldir Leoncio
Dobra odpowiedź, Gilles! Aby dodać do swojej odpowiedzi, można to zrobić również jako jedno polecenie: xmodmap -e "clear Lock" -e "keysym Caps_Lock = Shift_L" i cofnąć setxkbmap -option , co nie zapisuje do ~/.Xmodmappliku, ale można go użyć w razie potrzeby i dodać do aplikacji startowych. Bardzo dobra odpowiedź!
Sergiy Kolodyazhnyy
7

Ignorując moje poprzednie próby odpowiedzi, które nie powiodły się, znalazłem coś, co całkowicie zamienia Capslock w lewą zmianę. Bez przełączania, myślę, że jest trwały i całkiem prosty.

Po pierwsze, zalecam wykonanie kopii zapasowej, zanim przedstawię, jak to zmienić.

Biegać sudo cp /usr/share/X11/xkb/symbols/pc ~/pckeybak

Teraz, gdy jest kopia zapasowa, przejdźmy do edycji.

Użyj swojego ulubionego edytora tekstu, aby edytować ten plik jako root:

/usr/share/X11/xkb/symbols/pc

Znajdź segment, który wygląda tak (jest u góry, linia 22 dla mnie):

key  <TAB> {    [ Tab,  ISO_Left_Tab    ]   };
key <RTRN> {    [ Return                ]   };

key <CAPS> {    [ Caps_lock             ]   };
key <NMLK> {    [ Num_Lock              ]   };

edytować

key <CAPS>  {   [ Caps_lock             ]   };

być

key <CAPS> {    [ Shift_L, Caps_Lock    ]   };

zamiast. ( Caps_LockPóźniej Shift_L,może być niepotrzebne).

Zrestartuj menedżera ekranu (zwykle sudo service lightdm restart), a Capslock zostanie teraz przesunięty w lewo. ( Uwaga: moja maszyna testowa używa GNOME, więc musiałem zrestartować gdm. Jednak spowodowało to dziwne migotanie w rezerwowym TTY i gdmnigdy się nie zrestartowałem. Musiałem całkowicie zrestartować.)

Ten, który faktycznie mogłem przetestować i mogę potwierdzić, że działa.

Zaadaptowano z Permanent xmodmap w Ubuntu 13.04

Wędrowiec
źródło
Dzięki, ale przeszkadza to Num Lockowi, który zostawiam na stałe. Podczas mojego wczesnego rozwiązywania problemów zmiana Caps_lock> Shift_L na /usr/share/X11/xkb/symbols/capslockingerowała również w Num Lock. Jest coś innego w 16.04, na przykład lampka Num Lock pozostawała włączona podczas uruchamiania, ale teraz gaśnie przy logowaniu LightDM. Kiedy testuję twoje rozwiązanie, zmienia Caps Lock na Shift, ale po pierwszym naciśnięciu Caps Lock Num Lock wyłącza się i muszę nacisnąć Num Lock DWUKROTNIE, aby go ponownie włączyć (tylko za pierwszym razem). Dziwaczny. Naprawdę doceniam dotychczasową pomoc.
Tom Brossman
Być może muszę zadać nowe pytanie „Jak zapobiegać ingerencji Caps Lock w mapowanie Num Lock 16.04?” ale chciałbym znaleźć tutaj główną przyczynę. Albo to, albo nadszedł czas, aby otworzyć klawiaturę i wprowadzić w niej jakieś fizyczne modyfikacje ...
Tom Brossman,
To jest dziwne. Czy numlock znów działa, jeśli biegniesz xkbset nullify lock?
Wędrowiec
@TomBrossman Nie wiem, czy to coś dla ciebie zmienia, ale działa dla mnie. Zamiast po prostu Shift_Lwstawić Shift_L, Caps_Lock. Upewnij się, że wsporniki są wyrównane.
Wędrowiec
1
@TomBrossman Lubię używać sudo, jeśli nie jest niebezpieczne, tylko dla pewności: str. Kiedy edytowałem plik, L for shift było duże, podobnie jak Caps Lock. Dziwne. NumLock jest również dziwny, ponieważ działa dla mnie dobrze. Cała ta sprawa jest dziwna: p
TheWanderer
3

14.04

Jednowarstwowy:

xmodmap -e 'keycode 66=Shift_L'

ALE , w nieoczekiwanym przypadku 66kod nie jest prawidłowy, najpierw uruchom xevkonsolę i naciśnij CapsLock. Wtedy zobaczysz coś takiego:

KeyPress event, serial 27, synthetic NO, window 0x1200001,
    root 0x101, subw 0x0, time 6417361, (340,373), root:(342,393),
    state 0x0, keycode XX (keysym 0x0207, Caps_Lock), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

Prawidłowy kod to ten wskazany w XX.

Starszy Geek
źródło
1
Spójrz na wiadomości nagród: Xmodmap trick no longer works and xkb handles this now..
Wędrowiec
O mój! czy to z powodu 16.04? Działa na moim 14.04. Komentarz do nagrody wydaje się nieokreślony.
Nie dostałem nagrody, więc tak naprawdę nie wiem.
TheWanderer
Przepraszamy, dotyczy to nowej instalacji 16.04. Lewy lub prawy klawisz Shift byłby w porządku, wybrałem lewy do pytania, ponieważ jest obok i xevwidzi je jako różne klawisze.
Tom Brossman,