Czy możliwe jest ponowne mapowanie systemu klawiszy CapsLock tak, aby po naciśnięciu przycisku CapsLock sam działał jak klawisz Escape, a po naciśnięciu innego klawisza działa jak klawisz sterujący?
Czy możliwe jest ponowne mapowanie systemu klawiszy CapsLock tak, aby po naciśnięciu przycisku CapsLock sam działał jak klawisz Escape, a po naciśnięciu innego klawisza działa jak klawisz sterujący?
Odpowiedzi:
Znalazłem bardzo dobre rozwiązanie o nazwie xcape . Z pliku README:
xcape działa jako demon i przechwytuje klawisz Control. Jeśli klawisz Control zostanie naciśnięty i zwolniony sam, wygeneruje zdarzenie Escape.
Ma to większy sens, jeśli przypisałeś klawisz Caps Lock do Control. Przyszłe wersje tego programu mogą zrobić to dla ciebie, ale na razie jest to coś, co musisz zrobić sam.
Zamapowałem Caps na Escape, aby wygodniej było pisać w Vimie. Użyłem xmodmap
i włożyłem to ~/.Xmodmap
.
clear Lock
keycode 0x42 = Escape
Aby ubiegać się: xmodmap ~/.Xmodmap
. Możesz umieścić to w pliku takim jak ~ / .bash_profile (wstawiam ~ / .xinitrc, ponieważ nie używam menedżera logowania.
Aby zmapować CapsLock + [inny klucz], rozważ użycie xbindkeys
.
Jedynym w Linuksie rozwiązaniem do mapowania kluczy w całym systemie jest napisanie prostej reguły udev. Nie będzie zależeć od X, będzie działać na dowolnym terminalu lub aplikacji i można go przenosić między ostatnimi instalacjami Linuksa, po prostu kopiując dwa pliki.
Musisz napisać 2 pliki: jeden zawierający regułę udev, która mówi jądru, aby ponownie mapował klucze, a drugi zawiera potrzebne mapowania.
Korzystając z tej metody odwzorowałem całą klawiaturę, być może kod jest przydatny jako inspiracja http://git.adirat.com/carpalx-keyboard
W tym celu zbudowałem narzędzie w C, które rozwiązuje wiele problemów związanych z rozwiązaniem xcape / xmodmap :
Na AskUbuntu natknąłem się na inaczej sformułowane pytanie, które miało dobrą odpowiedź , ale musiałem je nieco zmodyfikować, aby działało na moich systemach.
Na podstawie komentarzy Louisa i Sergiiego opracowałem rozwiązanie, które działa dla mnie na Ubuntu 16.04 (Xenial) i przyniosę je ze sobą na inne systemy Linux, których używam.
Zainstalowałem xcape i umieściłem następujące wiersze kodu w moim .profile
pliku w katalogu domowym.
Ponieważ różne menedżery wyświetlania (gdm / kdm / sddm / etc) zachowują się w dziwny sposób i resetują setxbmap
po zawieszeniu / wznowieniu lub zablokowaniu / odblokowaniu, odkryłem, jak ustawić opcje w taki sposób, aby dziedziczyły to i nie t cały czas go resetuj. Ponieważ dużo zawieszam i wznawiam, musiałem upewnić się, że nie otrzymałem wielu kopii xcape
uruchomionych, co zostało rozwiązane w nowym skrypcie poniżej.
Najpierw zmodyfikuj konfigurację klawiatury za pomocą sudo gedit /etc/default/keyboard
i ustaw, XKBOPTIONS="ctrl:nocaps"
a następnie ~/.xprofile
wstaw jeden wiersz poniżej.
ps aux | grep -i '[x]cape' && killall -9 xcape; hash xcape 2>&1 >/dev/null && xcape -e 'Control_L=Escape' -t 100 &
Mamy nadzieję, że różne sekcje skryptu oszczędzą ci trochę czasu / kłopotów i zapobiegną blokowaniu logowania. Najpierw sprawdza, czy instancja jest już uruchomiona i zabija ją, ponieważ jedyne, co xcape
robi, to mapowanie Ctrl na Esc, jest to bezpieczne, a następnie ta hash
część zapewnia, że xcape
zainstalowałeś, w przeciwnym razie system może się zawiesić podczas próby zalogowania, ponieważ wszystkie uruchamiają się skrypty powinny zostać poprawnie zamknięte.
setxkbmap -option 'caps:ctrl_modifier'; xcape -e '#66=Escape'
Sergij:
Użyłem gnome-tweak-tool do mapowania Caps Lock na Ctrl, ponieważ w Ustawieniach systemu w Ubuntu 14.04 nie ma układu klawiatury. Wtedy xcape -e „Control_L = Escape” nie działał, ale po użyciu xcape -d odkryłem, że Caps Lock generuje kod klucza 66 i odpowiednio go odwzorowałem: xcape -e '# 66 = Escape'. - Sergiy Byelozyorov 4 września 14 o 10:08
Louis:
Zgodnie z tym postem na blogu można to zrobić za pomocą samego Xcape: setxkbmap -option 'caps: ctrl_modifier'; xcape -e 'Caps_Lock = Escape' setxkbmap -option 'caps: ctrl_modifier'; xcape -e 'Caps_Lock = Escape; Control_L = Escape; Control_R = Escape' - Louis Simoneau 4 sierpnia 2015 o 10:06