Ever since I first dual-booted Ubuntu 16.04 on my Surface Pro 3, my caps lock indicator LED on my keyboard hasn't worked. I decided to try and do something about it recently. When I type the command
echo 1 | sudo tee /sys/class/leds/input45\:\:capslock/brightness
The light comes on, so it is at least accessible. I'm not sure what to do to make the light go on or off depending on the state of caps lock though. Any help would be greatly appreciated.
21 Answer
Apparently, somehow the led is not set automatically. The background- patch below will take care of that:
#!/usr/bin/env python3
import subprocess
import time
led = "/sys/class/leds/input45::capslock/brightness"
while True: time.sleep(1) ledstate = open(led).read().strip() == "1" capstate = "Caps Lock: on" in \ subprocess.check_output(["xset", "-q"]).decode("utf-8") if ledstate != capstate: newled = "0" if capstate == False else "1" open(led, "wt").write(newled)How to use:
- Copy the script into an empty file, save it as
fix_led(no extension) in/usr/local/binand make it executable. - Since you need to edit the file
/sys/class/leds/input45::capslock/brightnessyou need to add the script to the sudoers file, as explained e.g. here. Test- run the script by running
sudo /usr/local/bin/fix_ledin a terminal, test your Caps Lock key.
Now add the script to your startup applications: Dash > Startup Applications > Add. Add the command:
/bin/bash -c "sleep 10 && sudo /usr/local/bin/fix_led"
That's it. On next restart (log in), it should work.
Notes
Of course, the patch should work in all situations where the led is not functioning. the exact location of the file
capslock/brightnessmay vary however. Set, if necessary, the location in the line:led = "/sys/class/leds/input45::capslock/brightness"in the head of the script (don't escape the
:inpython). I tested the script by making it set the led the wrong way :) (led off when Caps Lock was on, on when it was off).- The extra load of the script is none.
Explanation
Information on the current Caps Lock state can be fetched by the command:
xset -qOnce per second, the script checks if Caps Lock: on is in the output. The script also checks if the current state matches the led state (either 1 or 0), as read from the capslock/brightness file.
If these two do not match, the script sets the led state according to the real Caps Lock state.
3