From 5cadb52401f99028ebe566cccf18235d9d820b15 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Sun, 7 Apr 2024 14:26:06 +0300 Subject: [PATCH] fixed an issue with the sensor returning 0 randomly... Signed-off-by: Alex A. Naanou --- Makefile | 27 ++++++++++++++-- thinkpad-keyboard-brightness | 46 ++++++++++++++++++++++++++++ thinkpad-keyboard-brightness.conf | 11 +++++++ thinkpad-keyboard-brightness.service | 6 +--- 4 files changed, 82 insertions(+), 8 deletions(-) create mode 100755 thinkpad-keyboard-brightness create mode 100644 thinkpad-keyboard-brightness.conf diff --git a/Makefile b/Makefile index 8a00115..19a1bb6 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,30 @@ NAME := thinkpad-keyboard-brightness +SBIN_DIR := /usr/sbin +CONFIG_DIR := /etc/ SERVICE_DIR := /etc/systemd/system/ +SCRIPT := $(NAME) +CONFIG := $(NAME).conf TIMER := $(NAME).timer UNIT := $(NAME).service +SERVICE_FILES := \ + $(TIMER) \ + $(UNIT) + +FILES := \ + $(SERVICE_FILES) \ + $(SCRIPT) \ + $(CONFIG) .PHONY:install -install: $(TIMER) $(UNIT) - cp -f $? $(SERVICE_DIR) +install: $(FILES) + cp -f $(SERVICE_FILES) $(SERVICE_DIR) + cp -f $(SCRIPT) $(SBIN_DIR) + cp -f $(CONFIG) $(CONFIG_DIR) systemctl daemon-reload systemctl enable ${UNIT} systemctl enable ${TIMER} @@ -26,14 +40,21 @@ disable: $(TIMER) $(UNIT) systemctl disable ${UNIT} +# NOTE: this will not remove user config files... .PHONY:uninstall uninstall: disable $(TIMER) $(UNIT) rm -f \ $(SERVICE_DIR)/$(TIMER) \ - $(SERVICE_DIR)/$(UNIT) + $(SERVICE_DIR)/$(UNIT) \ + $(SBIN_DIR)/$(SCRIPT) systemctl daemon-reload +.PHONY:full-uninstall +full-uninstall: uninstall + rm -f $(CONFIG_DIR)/$(CONFIG) + + .PHONY:reinstall reinstall: uninstall install diff --git a/thinkpad-keyboard-brightness b/thinkpad-keyboard-brightness new file mode 100755 index 0000000..762a757 --- /dev/null +++ b/thinkpad-keyboard-brightness @@ -0,0 +1,46 @@ +#!/usr/bin/bash + +if [ -e /etc/thinkpad-keyboard-brightness.conf ] ; then + source /etc/thinkpad-keyboard-brightness.conf +fi + +if [ -z $SENSOR ] ; then + SENSOR=(/sys/bus/iio/devices/iio:device*/in_illuminance_raw) +fi +SENSOR=${SENSOR[0]} + +if [ -z $TRIGGER ] ; then + TRIGGER=(/sys/class/leds/*::kbd_backlight/brightness) +fi +TRIGGER=${TRIGGER[0]} + +THRESHOLD=${THRESHOLD:-2000} +HYSTERESIS=${HYSTERESIS:-200} +ATTEMPTS=${ATTEMPTS:-3} +VALUE=${VALUE:-1} + + + +# read the illuminance value... +# NOTE: the sensor sometimes randomly returns 0, this will make this +# less probabble to retult in backlight turning on/off randomly... +ATTEMPT=0 +ILLUMINANCE=0 +while (( $ATTEMPT < $ATTEMPTS )) && (( $ILLUMINANCE == 0 )) ; do + ILLUMINANCE=$(cat ${SENSOR}) + ATTEMPT=$((ATTEMPT + 1)) +done + +#echo "ILLUMINANCE: $ILLUMINANCE (attempt: $ATTEMPT)" + +STATE=$(cat "$TRIGGER") + +# NOTE: this needs root... +if (( $ILLUMINANCE < $THRESHOLD )) && (( $STATE == 0 )) ; then + echo "$VALUE" > "$TRIGGER" + +elif (( $ILLUMINANCE > $THRESHOLD + $HYSTERESIS )) ; then + echo 0 > "$TRIGGER" +fi + + diff --git a/thinkpad-keyboard-brightness.conf b/thinkpad-keyboard-brightness.conf new file mode 100644 index 0000000..bf54899 --- /dev/null +++ b/thinkpad-keyboard-brightness.conf @@ -0,0 +1,11 @@ +# +# SENSOR=/sys/bus/iio/devices/iio:device*/in_illuminance_raw +# +# TRIGGER=/sys/class/leds/tpacpi::kbd_backlight/brightness +# +# THRESHOLD=2000 +# +# HESTERISYS=200 +# +# VALUE=1 +# diff --git a/thinkpad-keyboard-brightness.service b/thinkpad-keyboard-brightness.service index 94480b1..c091f4d 100644 --- a/thinkpad-keyboard-brightness.service +++ b/thinkpad-keyboard-brightness.service @@ -3,12 +3,8 @@ Description="Turn keyboard backlight on/off based on light sensor" [Service] Type=exec -Environment=SENSOR=/sys/bus/iio/devices/iio:device*/in_illuminance_raw -Environment=TRIGGER=/sys/class/leds/tpacpi::kbd_backlight/brightness -Environment=THRESHOLD=2000 -Environment=VALUE=1 User=root -ExecStart=bash -c "(( $(cat ${SENSOR}) < ${THRESHOLD} )) && echo ${VALUE} > ${TRIGGER} || echo 0 > ${TRIGGER}" +ExecStart=/usr/sbin/thinkpad-keyboard-brightness [Install] WantedBy=multi-user.target