summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Rijpstra2024-09-03 14:04:24 +0200
committerThomas Rijpstra2024-09-03 14:04:24 +0200
commit8ab4d79ab03f237ae50d2a36d42e8e641ac8cfac (patch)
treeff67be5e75d89b13e8c6f4db4e7dee871409ab50
parentc2926eb19ab6e07b28859b171ed1acd493606770 (diff)
downloadaur-8ab4d79ab03f237ae50d2a36d42e8e641ac8cfac.tar.gz
feat: allow manually changing brightness when enabled
-rw-r--r--.SRCINFO4
-rw-r--r--PKGBUILD4
-rwxr-xr-xauto-brightness.sh193
3 files changed, 134 insertions, 67 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 8e2217a7dc90..35e33a333dda 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,6 +1,6 @@
pkgbase = auto-brightness
pkgdesc = A script to automatically adjust screen brightness based on ambient light
- pkgver = 1.0.2
+ pkgver = 1.0.3
pkgrel = 1
url = https://github.com/trijpstra-fourlights/auto-brightness
arch = any
@@ -12,7 +12,7 @@ pkgbase = auto-brightness
source = auto-brightness.service
source = auto-brightness.conf
source = wait-for-als-sensor.sh
- sha256sums = 62358fd73d1934261e3259c3075b64605540058c0b9eea92cf240a3b8d5ebf1e
+ sha256sums = 6c3f60a736cda1d9fe363253e4126ff408999e6479f8a41704f1c1ed268acf04
sha256sums = 0cb8db3700b878e82c42cdd2e95893d12dc926f106742d6bccfe1a7f395f2800
sha256sums = 4a2f4e4a331df6c2e3cda53b0cb38161fd5cff153253166d740d0c86b8d444a8
sha256sums = e208630a23360de4e336649c6bc0970b3c3dfecf5b906d3e334530dd279be9c6
diff --git a/PKGBUILD b/PKGBUILD
index cd78add2c1e1..a6b193398cf5 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,6 +1,6 @@
# Maintainer: Thomas Rijpstra <thomas at fourlights dot nl>
pkgname=auto-brightness
-pkgver=1.0.2
+pkgver=1.0.3
pkgrel=1
pkgdesc="A script to automatically adjust screen brightness based on ambient light"
arch=('any')
@@ -11,7 +11,7 @@ source=("auto-brightness.sh"
"auto-brightness.service"
"auto-brightness.conf"
"wait-for-als-sensor.sh")
-sha256sums=('62358fd73d1934261e3259c3075b64605540058c0b9eea92cf240a3b8d5ebf1e'
+sha256sums=('6c3f60a736cda1d9fe363253e4126ff408999e6479f8a41704f1c1ed268acf04'
'0cb8db3700b878e82c42cdd2e95893d12dc926f106742d6bccfe1a7f395f2800'
'4a2f4e4a331df6c2e3cda53b0cb38161fd5cff153253166d740d0c86b8d444a8'
'e208630a23360de4e336649c6bc0970b3c3dfecf5b906d3e334530dd279be9c6')
diff --git a/auto-brightness.sh b/auto-brightness.sh
index fd43bae2f606..256f354bc36a 100755
--- a/auto-brightness.sh
+++ b/auto-brightness.sh
@@ -9,10 +9,10 @@ DEFAULT_MAX_BRIGHTNESS_DELTA=1
# Source the main configuration file if it exists
source_config() {
- MAIN_CONFIG_FILE="/etc/conf.d/auto-brightness.conf"
- if [ -f "$MAIN_CONFIG_FILE" ]; then
- source "$MAIN_CONFIG_FILE"
- fi
+ MAIN_CONFIG_FILE="/etc/conf.d/auto-brightness.conf"
+ if [ -f "$MAIN_CONFIG_FILE" ]; then
+ source "$MAIN_CONFIG_FILE"
+ fi
}
# Function to source individual configuration files in /etc/conf.d/auto-brightness.d/
@@ -25,25 +25,35 @@ source_individual_configs() {
fi
}
-read_config() {
- source_config
- source_individual_configs
-
- # Set the configuration values, using defaults if not set in the config file or individual files
- max_brightness_sensor_value=${max_brightness_sensor_value:-$DEFAULT_MAX_BRIGHTNESS_SENSOR_VALUE}
- min_brightness_sensor_value=${min_brightness_sensor_value:-$DEFAULT_MIN_BRIGHTNESS_SENSOR_VALUE}
- update_interval_s=${update_interval_s:-$DEFAULT_UPDATE_INTERVAL_S}
- min_brightness_delta=${min_brightness_delta:-$DEFAULT_MIN_BRIGHTNESS_DELTA}
- max_brightness_delta=${max_brightness_delta:-$DEFAULT_MAX_BRIGHTNESS_DELTA}
-
- refresh_config_interval_s=$(if [ $(awk "BEGIN {print ($update_interval_s > 1)}") -eq 1 ]; then echo $update_interval_s; else echo 1; fi)
- refresh_config_count_max=$(awk "BEGIN {print ($refresh_config_interval_s / $update_interval_s)}")
- refresh_config_count=0
+# Functions
+get_max_brightness() {
+ # Set max_brightness, fallback to the device's max_brightness if not set or -1
+ if [ -z "$max_brightness" ] || [ "$max_brightness" -eq -1 ]; then
+ echo $(get_device_max_brightness)
+ fi
+ echo $max_brightness
}
-read_config
+get_device_max_brightness() {
+ echo $(cat ${brightness_path}/max_brightness)
+}
+
+get_brightness() {
+ echo $(cat ${brightness_path}/brightness)
+}
+
+get_illuminance() {
+ echo $(cat ${sensor_path}/in_illuminance_raw)
+}
+
+brightness_percentage() {
+ local current=$1
+ local maximum=$2
+ maximum=${maximum:-$(get_device_max_brightness)}
+
+ echo "$(awk "BEGIN {print (100 * $current / $maximum)}")%"
+}
-# Functions to find devices
find_iio_device_with_illuminance() {
for device in /sys/bus/iio/devices/iio:device*; do
if [ -f "$device/in_illuminance_raw" ]; then
@@ -66,24 +76,9 @@ find_backlight_device() {
return 1
}
-# Set paths, using explicit values from config or finding them
-brightness_path=${brightness_path:-$(find_backlight_device)}
-sensor_path=${sensor_path:-$(find_iio_device_with_illuminance)}
-
-# Exit if devices are not found
-if [[ $brightness_path == "No device with brightness found." || $sensor_path == "No device with in_illuminance_raw found." ]]; then
- echo "Required device not found. Exiting."
- exit 1
-fi
-
-# Set max_brightness, fallback to the device's max_brightness if not set or 0
-if [ -z "$max_brightness" ] || [ "$max_brightness" -eq 0 ]; then
- max_brightness=$(cat ${brightness_path}/max_brightness)
-fi
-
# Function to test write access to brightness setting
test_write_access() {
- local current_brightness=$(cat ${brightness_path}/brightness)
+ local current_brightness=$(get_brightness)
if ! echo $current_brightness | tee ${brightness_path}/brightness > /dev/null 2>&1; then
echo "Error: Unable to write to ${brightness_path}/brightness."
echo "Please ensure the script has the necessary permissions to write to the brightness setting."
@@ -92,46 +87,118 @@ test_write_access() {
fi
}
-# Test write access
-test_write_access
-
# Function to set smoothly set brightness
set_brightness_smooth() {
- local target_brightness=$1
-
- local target=$target_brightness
- if [ $max_brightness_delta -ne -1 ]; then
- if [ $(($target_brightness - $current_brightness)) -gt $max_brightness_delta ]; then
- target=$((current_brightness + $max_brightness_delta))
- elif [ $(($current_brightness - $target_brightness)) -gt $max_brightness_delta ]; then
- target=$((current_brightness - $max_brightness_delta))
- fi
- fi
-
- #echo "Setting brightness to $target"
- echo $target | tee ${brightness_path}/brightness > /dev/null
+ local target_brightness=$1
+
+ local target=$target_brightness
+ if [ $max_brightness_delta -ne -1 ]; then
+ if [ $(($target_brightness - $current_brightness)) -gt $max_brightness_delta ]; then
+ target=$((current_brightness + $max_brightness_delta))
+ elif [ $(($current_brightness - $target_brightness)) -gt $max_brightness_delta ]; then
+ target=$((current_brightness - $max_brightness_delta))
+ fi
+ fi
+
+ #echo "Setting brightness to $target"
+ echo $target | tee ${brightness_path}/brightness > /dev/null
}
+# Function to read configuration
+read_config() {
+ local old_min_brightness_delta=${min_brightness_delta:--1}
+ local old_max_brightness_delta=${max_brightness_delta:--1}
+ local old_max_brightness=${max_brightness:--1}
+ local old_brightness_path=${brightness_path:-""}
+ local old_sensor_path=${sensor_path:-""}
+
+ source_config
+ source_individual_configs
+
+ # Set the configuration values, using defaults if not set in the config file or individual files
+ max_brightness_sensor_value=${max_brightness_sensor_value:-$DEFAULT_MAX_BRIGHTNESS_SENSOR_VALUE}
+ min_brightness_sensor_value=${min_brightness_sensor_value:-$DEFAULT_MIN_BRIGHTNESS_SENSOR_VALUE}
+ update_interval_s=${update_interval_s:-$DEFAULT_UPDATE_INTERVAL_S}
+ min_brightness_delta=${min_brightness_delta:-$DEFAULT_MIN_BRIGHTNESS_DELTA}
+ max_brightness_delta=${max_brightness_delta:-$DEFAULT_MAX_BRIGHTNESS_DELTA}
+
+ refresh_config_interval_s=$(if [ $(awk "BEGIN {print ($update_interval_s > 1)}") -eq 1 ]; then echo $update_interval_s; else echo 1; fi)
+ refresh_config_count_max=$(awk "BEGIN {print ($refresh_config_interval_s / $update_interval_s)}")
+ refresh_config_count=0
+
+ # Check if config values have changed, and if so, continue the auto-sensor if it was paused
+ if [ $old_min_brightness_delta -ne $min_brightness_delta ] || [ $old_max_brightness_delta -ne $max_brightness_delta ] || [ $old_max_brightness -ne $max_brightness ] || [[ $old_brightness_path != $brightness_path ]] || [[ $old_sensor_path != $sensor_path ]]; then
+ # Set paths, using explicit values from config or finding them
+ brightness_path=${brightness_path:-$(find_backlight_device)}
+ sensor_path=${sensor_path:-$(find_iio_device_with_illuminance)}
+
+ if [ $old_max_brightness -ne $max_brightness ] || [[ $old_brightness_path != $brightness_path ]]; then
+ max_brightness=$(get_max_brightness)
+ fi
+
+ last_brightness=$(get_brightness)
+ if [ ! -z $backoff ] && [ $backoff -eq 1 ]; then
+ echo "(auto-brightness/resume) Config has changed";
+ backoff=0
+ fi
+ fi
+}
+
+read_config
+
+
+# Exit if devices are not found
+if [[ $brightness_path == "No device with brightness found." || $sensor_path == "No device with in_illuminance_raw found." ]]; then
+ echo "Required device not found. Exiting."
+ exit 1
+fi
+
+max_brightness=$(get_max_brightness)
+
+# Test write access
+test_write_access
+
+last_brightness=$(get_brightness)
+backoff=0
+
while true; do
if [ $refresh_config_count -eq $refresh_config_count_max ]; then
read_config
fi
- current_brightness=$(cat ${brightness_path}/brightness)
- sensor=$(cat ${sensor_path}/in_illuminance_raw)
- # Clamp sensor value
- if [ $sensor -lt $min_brightness_sensor_value ]; then sensor=$min_brightness_sensor_value; fi
- if [ $sensor -gt $max_brightness_sensor_value ]; then sensor=$max_brightness_sensor_value; fi
+ current_brightness=$(get_brightness)
+ illuminance=$(get_illuminance)
+
+ # check if brightness has changed unexpectedly
+ if [ $current_brightness -lt $((last_brightness - min_brightness_delta)) ] || [ $current_brightness -gt $((last_brightness + min_brightness_delta)) ]; then
+ if [ $backoff -eq 0 ]; then
+ echo "(auto-brightness/pause) Brightness was changed externally. Backing off until it's back in range."
+ backoff=1
+ fi
+
+ sleep $update_interval_s
+ refresh_config_count=$((refresh_config_count + 1))
+ continue
+ fi
+
+ if [ $backoff -eq 1 ]; then
+ echo "(auto-brightness/resume) Brightness is back in range."
+ backoff=0;
+ fi
- target_brightness=$((sensor * max_brightness / max_brightness_sensor_value))
+ # Clamp illuminance value
+ if [ $illuminance -lt $min_brightness_sensor_value ]; then sensor=$min_brightness_sensor_value; fi
+ if [ $illuminance -gt $max_brightness_sensor_value ]; then sensor=$max_brightness_sensor_value; fi
- should_update=$(if [ $current_brightness -lt $((target_brightness - min_brightness_delta)) ] || [ $current_brightness -gt $((target_brightness + min_brightness_delta)) ]; then echo 1; else echo 0; fi)
+ target_brightness=$((illuminance * max_brightness / max_brightness_sensor_value))
- if [ "$should_update" -eq 1 ]; then
- set_brightness_smooth $target_brightness
- sleep 0.01
+ if [ $current_brightness -lt $((target_brightness - min_brightness_delta)) ] || [ $current_brightness -gt $((target_brightness + min_brightness_delta)) ]; then
+ set_brightness_smooth $target_brightness
+ last_brightness=$(get_brightness)
+ sleep 0.01
else
- sleep $update_interval_s
+ last_brightness=$(get_brightness)
+ sleep $update_interval_s
refresh_config_count=$((refresh_config_count + 1))
fi
done