Last night I finished a fun mini project as part of Unix Tutorials Projects. I have writted a basic enough script that can be added as root cronjob for automatically controlling keyboard backlight on my Dell XPS 9380.
Bash Script for Keyboard Backlight Control
As I've written just a couple of days ago, it's actually quite easy to turn keyboard backlight on or off on a Dell XPS in Linux (and this probably works with other Dell laptops).
Armed with that knowledge, I've written the following script:
#!/bin/bash WORKDIR=/home/greys/scripts/backlight LOCKFILE=backlight.kbd LOGFILE=${WORKDIR}/backlight.log KBDBACKLIGHT=`cat /sys/devices/platform/dell-laptop/leds/dell::kbd_backlight/brightness` HOUR=`date +%H` echo "---------------->" | tee -a $LOGFILE date | tee -a $LOGFILE if [ $HOUR -lt 4 -o $HOUR -gt 21 ]; then echo "HOUR $HOUR is rather late! Must turn on backlight" | tee -a $LOGFILE BACKLIGHT=3 else echo "HOUR $HOUR is not too late, must turn off the backlight" | tee -a $LOGFILE BACKLIGHT=0 fi if [ $KBDBACKLIGHT -ne $BACKLIGHT ]; then echo "Current backlight $KBDBACKLIGHT is different from desired backlight $BACKLIGHT" | tee -a $LOGFILE FILE=`find ${WORKDIR} -mmin -1440 -name ${LOCKFILE}` echo "FILE: -$FILE-" if [ -z "$FILE" ]; then echo "No lock file! Updating keyboard backlight" | tee -a $LOGFILE echo $BACKLIGHT > /sys/devices/platform/dell-laptop/leds/dell::kbd_backlight/brightness touch ${WORKDIR}/${LOCKFILE} else echo "Lockfile $FILE found, skipping action..." | tee -a $LOGFILE fi else echo "Current backlight $KBDBACKLIGHT is the same as desired... No action needed" | tee -a $LOGFILE fi
How My Dell Keyboard Backlight Script Works
This is what my script does when you run it as root (it won't work if you run as regular user):
- it determines the WORKDIR (I defined it as /home/greys/scripts/backlight)
- it starts writing log file backlight.log in that $WORKDIR
- it checks for lock file backlight.kbd in the same $WORKDIR
- it confirms current hour and checks if it's a rather late hour (when it must be dark). For now I've set it between 21 (9pm) and 4 (4am, that is)
- if checks current keyboard backlight status ($KDBBACKLIGHT variable)
- it compares this status to the desired state (based on which hour that is)
- if we need to update keyboard backlight setting, we check for lockfile.
- If a recent enough file exists, we skip updates
- Otherwise, we set the backlight to new value
- all actions are added to the $WORKDIR/backlight.log file
Log file looks like this:
greys@xps:~/scripts $ tail backlight/backlight.log ----------------> Tue May 28 00:10:00 BST 2019 HOUR 00 is rather late! Must turn on backlight Current backlight 2 is different from desired backlight 3 Lockfile /home/greys/scripts/backlight/backlight.kbd found, skipping action... ----------------> Tue May 28 00:15:00 BST 2019 HOUR 00 is rather late! Must turn on backlight Current backlight 2 is different from desired backlight 3 Lockfile /home/greys/scripts/backlight/backlight.kbd found, skipping action...
How To Activate Keyboard Backlight cronjob
I have added this script to the root user's cronjob. In Ubuntu 19.04 running on my XPS laptop, this is how it was done:
greys@xps:~/scripts $ sudo crontab -e [sudo] password for greys:
I then added the following line:
*/5 * * * * /home/greys/scripts/backlight.sh
Depending on where you place similar script, you'll need to update full path to it from /home/greys/scripts. And then update WORKDIR variable in the script itself.
Keyboard Backlight Unix Tutorial Project Follow Up
Here are just a few things I plan to improve:
- see if I can access Ubuntu's Night Light settings instead of hardcoding hours into the script
- fix the timezone – should be IST and not BST for my Dublin, Ireland location
- Just for fun, try logging output into one of system journals for journalctl
See Also
Leave a Reply