Z jakiegoś powodu mój laptop utknął w Caps Lock. Mam Caps Lockklucz odwzorowaną przez xmodmap
się hyper_l
, więc ja nie mam caps_lock
klucza, aby go wyłączyć. Czy istnieje sposób, aby to wyłączyć za pomocą wiersza poleceń? Byłoby miło, gdybym mógł zresetować stan blokady bez resetowania komputera, szczególnie na przyszłość. Stało się to wcześniej, ale tym razem chciałbym wiedzieć, jak zrobić to właściwie.
command-line
xmodmap
capslock
Echogen
źródło
źródło
Odpowiedzi:
Nie znam żadnego narzędzia wiersza poleceń do tego w Ubuntu. (W przypadku Num Lock istnieje numlockx .) Oto linijka, którą można skopiować i wkleić do okna terminala:
Tutaj znów jest w bardziej rozszerzonej formie. Używamy Pythona biblioteki ctypes do wywoływania funkcji C z biblioteki X bezpośrednio. Funkcja
XkbLockModifiers
zmienia stan blokowania klawiatury na klawiaturze podstawowej (XkbUseCoreKbd
= 0x0100), wpływając na Caps Lock (2), ustawiając go na 0 (wyłączony).Jeśli masz zablokowany modyfikator, zmień 2 na maskę modyfikatorów, które chcesz wyłączyć. Modyfikatory to 1 = Shift, 2 = Lock (Caps Lock), 4 = Control, 8 = Mod1, 16 = Mod2, 32 = Mod3, 64 = Mod4, 128 = Mod5. Uruchom,
xmodmap -pm
aby zobaczyć, co odpowiadają Mod1 do Mod5. Na przykład, aby wyłączyć wszystkie modyfikatory, zadzwońX11.XkbLockModifiers(display, c_uint(0x0100), c_uint(255), c_uint(0))
. Aby włączyć Num Lock, który jest włączony w Mod2 i jednocześnie wyłączyć Caps Lock, zadzwońX11.XkbLockModifiers(display, c_uint(0x0100), c_uint(2 | 16), c_uint(16))
.Oto wersja C, jeśli chcesz zrobić mały plik binarny zamiast wywoływać Pythona. Kompiluj z
gcc -O -Wall -o caps_lock_off caps_lock_off.c -lX11
pakietamibuild-essentials
ilibx11-dev
zainstalowanymi.Być może zainteresuje Cię również sposób na tymczasowe zignorowanie Caps Lock:
Następnie Caps Lock będzie trwale wyłączony, dopóki go nie włączysz ponownie
xkbset nullify -lock
.źródło
xtrace
uruchomxtrace python -c 'from ctypes import *; X11 = cdll.LoadLibrary("libX11.so.6"); buf = (c_char*16)(); display = X11.XOpenDisplay(None); X11.XkbLockModifiers(display, c_uint(0x0100), c_uint(2), c_uint(0)); X11.XkbGetState(display, 0x0100, buf); X11.XCloseDisplay(display)'
i opublikuj kilka ostatnich wierszy, zaczynając od tego zawierającegoQueryExtension name='XKEYBOARD'
. Nie twierdzę, że zrozumiem wynik, ale spróbuję.Narzędzia X do automatyzacji można wykorzystać do wysyłania wymaganych kluczowych zdarzeń.
Za pomocą
xdotool
Zainstaluj to
Wyślij zdarzenie CAPS down / up
Innym narzędziem jest
xte
Zainstaluj to
Wyślij zdarzenie blokowania / podnoszenia CAPS
Bibliografia:
man xdotool
man xte
źródło
Jeśli chodzi o wersję Gilles Python, która nie działa w nowszym systemie Ubuntus, ustawienie poprawnego zwrotu dla otwartego ekranu wydaje się załatwić:
(Kod zaadaptowany z https://stackoverflow.com/questions/29638210/how-can-i-use-python-xlib-to-generate-a-single-keypress )
źródło
Jeśli nie możesz uzyskać dostępu do CAPS, ponieważ odwzorowałeś go w .bashrc, tak jak ja, to po prostu przełączenie na terminal wirtualny (alt + ctl + fN), a następnie przełączenie z powrotem działało dla mnie.
źródło
Miałem ten problem i byłem w stanie go naprawić za pomocą klawiatury OnBoard (w Ubuntu Mate, w Universal Access).
Po włączeniu powinieneś zobaczyć, że klawisz CapsLock jest czerwony lub w jakiś sposób wskazać, że jest zablokowany. Następnie możesz nacisnąć, aby wyłączyć.
źródło