Zamapuj ponownie CapsLock, aby uciec i kontrolować cały system
18
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?
Wydaje się, że byłoby to bardzo trudne. Na przykład nie można wygenerować zdarzeń powodujących wyłączenie klawisza, ponieważ nie wiadomo, który klawisz został właśnie naciśnięty. Jeśli zostanie zwolniony bez naciśnięcia innego klawisza, to będzie to Escape, w przeciwnym razie będzie to Control.
cjm
Odpowiedzi:
16
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 xmodmapi 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.
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 .profilepliku w katalogu domowym.
ZAKTUALIZOWANA METODA:
Ponieważ różne menedżery wyświetlania (gdm / kdm / sddm / etc) zachowują się w dziwny sposób i resetują setxbmappo 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 xcapeuruchomionych, co zostało rozwiązane w nowym skrypcie poniżej.
Najpierw zmodyfikuj konfigurację klawiatury za pomocą sudo gedit /etc/default/keyboardi ustaw, XKBOPTIONS="ctrl:nocaps"a następnie ~/.xprofilewstaw jeden wiersz poniżej.
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 xcaperobi, to mapowanie Ctrl na Esc, jest to bezpieczne, a następnie ta hashczęść 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.
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
Odpowiedzi:
Znalazłem bardzo dobre rozwiązanie o nazwie xcape . Z pliku README:
źródło
Zamapowałem Caps na Escape, aby wygodniej było pisać w Vimie. Użyłem
xmodmap
i włożyłem to~/.Xmodmap
.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
.źródło
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
źródło
W tym celu zbudowałem narzędzie w C, które rozwiązuje wiele problemów związanych z rozwiązaniem xcape / xmodmap :
źródło
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.ZAKTUALIZOWANA METODA:
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 kopiixcape
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.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 tahash
część zapewnia, żexcape
zainstalowałeś, w przeciwnym razie system może się zawiesić podczas próby zalogowania, ponieważ wszystkie uruchamiają się skrypty powinny zostać poprawnie zamknięte.Stara droga:
Sergij:
Louis:
źródło