How do I light up the Caps Lock light with xset?

user903115 picture user903115 · Oct 9, 2011 · Viewed 7.3k times · Source

I wrote a little fetchmail script that checks the remote server and plays an audio file when I have new mail. I also wanted to also light up one of my keyboard lights when the mail was available but I ran into a problem. I am able to light up the scroll lock light with this:

/usr/bin/xset led named "Scroll Lock"

But I can't light up the Caps Lock in the same way:

/usr/bin/xset led named "Caps Lock"

I tried specifying the key with a number (1-6) but despite changing the mysterious 'LED mask' (visible with 'xset q') I saw no change to the lights.

Is this broken because I've mapped my Caps Lock key as another Ctrl?

In ~/.Xmodmap I've got:

keycode 66 = Control_L
clear Lock
add Control = Control_L

I don't want to toggle caps lock, just the light. Is there a way to do this?

Further Explanation

This is on a x86 kubuntu lucid machine but I will migrate to debian later. I'm running the script as a unprivileged user in a python daemon. Running the same script as root won't work because fetchmail is configured for myself as a user. And finally, this is all run in a tmux session.

When I began this process I read about setleds but it seems to be restricted to terminals in non x sessions.

Logging in as root and running 'setleds -D +caps < /dev/tty7' works but running 'sudo setleds -D +caps < /dev/tty7' gives me a permission denied error.

The xset command seems perfect for my application, it just refuses to change the Caps Lock light.

Answer

dragonroot picture dragonroot · Oct 9, 2011

Execute under root:

setleds -D +caps < /dev/console

Hackish, but works for me :)