7

I recently purchased a backlit keyboard that requires Scroll Lock for toggling the lights. I quickly came into some issues that can be worked around with a few simple bash commands - See this thread.

In short, the command I found that fixed this issue was:

xset led named "Scroll Lock" 

To enabled Scroll Lock (and turn the lights on), and

xset -led named "Scroll Lock" 

To disable Scroll Lock and turn the lights off.

What options are available if I want to issue the former command if a Scroll Lock key event is received and the (Scroll Lock) function is turned off, and the latter in the other case? That is,

if(ScrollLockIsEnabled) systemCommand('xset -led named "Scroll Lock"); else systemCommand('xset led named "Scroll Lock"`); 

Or similar.

I was thinking, at the very least, perhaps doing some sort of a Bash script that kept a variable (if possible) that allowed me to retain the last state of Scroll Lock. I could then execute this script using xbindkeys (which issues commands based on key events input by the user).

3 Answers 3

4

Found this after searching for a similar problem. Since it is a year old I might as well answer it anyway.

As in the question if you use xset led named "Scroll Lock" it will enable leds and xset -led named "Scroll Lock" will disable the keyboard leds. If you examine the xset --help it mentions that xset q prints out the current status information.

Here is a truncated sample of the stdout in the terminal:

Keyboard Control: auto repeat: on key click percent: 0 LED mask: 00000002 XKB indicators: 00: Caps Lock: off 01: Num Lock: on 02: Scroll Lock: off 03: Compose: off 04: Kana: off 05: Sleep: off 06: Suspend: off 07: Mute: off 08: Misc: off 09: Mail: off 10: Charging: off 11: Shift Lock: off 12: Group 2: off 13: Mouse Keys: off 

The string Scroll lock: off will only be present in the output if and only if the Scroll Lock is off, so we can use grep to check for this string. xset q | grep "Scroll Lock: off" works just fine for our purposes. Then, in a shell script we can check for the null string to see when it is on.

#!/bin/sh result=$(xset q | grep "Scroll Lock: off") if [ -z "$result" ]; then # Scroll Lock must be on echo "Off" xset -led named "Scroll Lock" else echo "On" xset led named "Scroll Lock" fi 

Then if you want to, just use your window manager or desktop environment configuration to execute this script when you press scroll lock.

3

just using bash, U can do this, i use this on a scroll lock backlit keyboard. must be run as root

#!/usr/bin/env bash if [[ $EUID -ne 0 ]]; then echo "this program requires root user" 2>&1 exit 1 fi dir1=$(find /sys/devices/ -name brightness | grep scrolllock) while : do var1=`cat $dir1` if [ $var1 == 0 ] ; then echo 1 > $dir1 fi sleep 5 done 

I use this in root crontab

@reboot sh ~/sh/backlight.sh & 
0

This is an old issue, but here is a single line command:

xset q | grep -q 'Scroll Lock: off' && xset led named 'Scroll Lock' || xset -led named 'Scroll Lock' 

Use this with xbindkeys or with sxhkd (modern)

I hope this helps someone today, knowing these keyboards aren't that common anymore.

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.