For some reason my laptop is stuck in Caps Lock. I have the Caps Lock key mapped by xmodmap
to hyper_l
, so I don't have a caps_lock
key to turn it off. Is there a way I can turn it off by command line? It would be nice if I could reset the lock state without resetting my computer, especially for future reference. This has happened before, but I would like to know now how to do it properly this time.
Ubuntu – How to turn off Caps Lock (the lock, not the key) by command line
capslockcommand linexmodmap
Best Answer
I don't know of any command line tool for that in Ubuntu. (For Num Lock, there is numlockx .) Here's a one-liner that you can copy-paste into a terminal window:
Here it is again in a more expanded form. We use the Python ctypes library to call C functions from the X library directly. The function
XkbLockModifiers
changes the state of the keyboard locks, on the core keyboard (XkbUseCoreKbd
= 0x0100), affecting Caps Lock (2), setting it to 0 (off).If you have a stuck modifier, change 2 to the mask of the modifiers you want to turn off. The modifiers are 1=Shift, 2=Lock (Caps Lock), 4=Control, 8=Mod1, 16=Mod2, 32=Mod3, 64=Mod4, 128=Mod5. Run
xmodmap -pm
to see what Mod1 through Mod5 correspond to. For example, to turn off all modifiers, callX11.XkbLockModifiers(display, c_uint(0x0100), c_uint(255), c_uint(0))
. To turn on Num Lock which is on Mod2 and at the same time turn off Caps Lock, callX11.XkbLockModifiers(display, c_uint(0x0100), c_uint(2 | 16), c_uint(16))
.Here's a C version if you want to make a small binary instead of invoking Python. Compile with
gcc -O -Wall -o caps_lock_off caps_lock_off.c -lX11
, with the packagesbuild-essentials
andlibx11-dev
installed.Also possibly of interest is a way to temporarily ignore Caps Lock:
After this, Caps Lock will effectively be permanently off, until you reenable it with
xkbset nullify -lock
.