From 1b8e84006b7632ba075e6199172e0758db26ed75 Mon Sep 17 00:00:00 2001 From: steel99xl Date: Tue, 16 Apr 2024 20:09:32 -0400 Subject: [PATCH 01/10] inital changes Specific changes for the Nanote-Next UMPC it dosent have an ambient brightness sensor --- AutomaticBrightness.sh | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/AutomaticBrightness.sh b/AutomaticBrightness.sh index defea77..20061fc 100644 --- a/AutomaticBrightness.sh +++ b/AutomaticBrightness.sh @@ -8,16 +8,16 @@ SensorDelay=1 # Scale sesor to displas brightness range # NOW WITH FLOAT SUPPORT -SensorToDisplayScale=24.09 +SensorToDisplayScale=1 #This should match your refesh rate other wise it will either change the back light more times than needed or too few for a smooth animation -LevelSteps=60 +LevelSteps=31 # The is should match the LevelSteps but in the acual time each event should take to see AnimationDelay=0.016 # Read the variable names -MinimumBrightness=001 +MinimumBrightness=050 @@ -84,11 +84,18 @@ MaxScreenBrightness=$(find -L /sys/class/backlight -maxdepth 2 -name "max_bright BLightPath=$(find -L /sys/class/backlight -maxdepth 2 -name "brightness" 2>/dev/null | grep "brightness") # Set path to current luminance sensor -LSensorPath=$(find -L /sys/bus/iio/devices -maxdepth 2 -name "in_illuminance_raw" 2>/dev/null | grep "in_illuminance_raw") #Set the current light value so we have something to compare to -OldLight=$(cat $LSensorPath) +if [[ -f /dev/shm/AB.offset ]] +then + OffSet=$(cat /dev/shm/AB.offset) +else + OffSet=0 + $(echo $OffSet > /dev/shm/AB.offset) + $(chmod 666 /dev/shm/AB.offset) +fi +OldLight=$(($OffSet)) while true do @@ -101,9 +108,8 @@ do $(chmod 666 /dev/shm/AB.offset) fi - Light=$(cat $LSensorPath) ## apply offset to current light value - Light=$((Light + OffSet)) + Light=$((OffSet)) # Set allowed range for light From 031a86d73b24331608a68b63055a1d1a3e640493 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20Chourr=C3=A9?= Date: Thu, 18 Apr 2024 08:36:24 +0200 Subject: [PATCH 02/10] Changed printf LANG to LC_NUMERIC It was displaying an error almost every time : invalid number float --- AutomaticBrightness.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AutomaticBrightness.sh b/AutomaticBrightness.sh index defea77..559bb98 100644 --- a/AutomaticBrightness.sh +++ b/AutomaticBrightness.sh @@ -122,7 +122,7 @@ do # Gernate a TempLight value for the screen to be set to # Float math thanks Matthias_Wachter - TempLight=$(LANG=C printf "%.0f" $(echo "scale=2; $Light * $SensorToDisplayScale" | bc)) + TempLight=$(LC_NUMERIC=C printf "%.0f" $(echo "scale=2; $Light * $SensorToDisplayScale" | bc)) # Check we dont ask the screen to go brighter than it can @@ -134,7 +134,7 @@ do fi # How diffrent should each stop be - DiffCount=$(LANG=C printf "%.0f" $(echo "scale=2; ( $NewLight - $CurrentBrightness ) / $LevelSteps" | bc )) + DiffCount=$(LC_NUMERIC=C printf "%.0f" $(echo "scale=2; ( $NewLight - $CurrentBrightness ) / $LevelSteps" | bc )) # Step once per Screen Hz to make animation for i in $(eval echo {1..$LevelSteps} ) From e15c2060a6b191d6bbbaed7bc912ad4af5eb3d21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20Chourr=C3=A9?= Date: Thu, 18 Apr 2024 08:39:01 +0200 Subject: [PATCH 03/10] Add execute permission to script If the file is not executable, the service system will not load it, and will return a 203/EXEC error (file not found). --- setup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.sh b/setup.sh index 85f7af1..8921b11 100755 --- a/setup.sh +++ b/setup.sh @@ -46,6 +46,7 @@ fi echo "Cloning AutomaticBrighness.sh..." sudo cp AutomaticBrightness.sh /usr/local/bin/AutomaticBrightness.sh +sudo chmod u+x /usr/local/bin/AutomaticBrightness.sh echo "Cloning AB.service for systemD..." sudo cp AB.service /etc/systemd/system/AB.service From e45c4bf0efc1cc6a5f1a76b6004b39861d11d41a Mon Sep 17 00:00:00 2001 From: steel99xl Date: Tue, 6 Aug 2024 15:22:59 -0400 Subject: [PATCH 04/10] MinimumBrightness is now closer to representing the % of brightness still to be improved, but currently no good way to get the max sensor brightness wightout saving it during the calibration --- AutomaticBrightness.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 AutomaticBrightness.sh diff --git a/AutomaticBrightness.sh b/AutomaticBrightness.sh old mode 100644 new mode 100755 index defea77..48737ca --- a/AutomaticBrightness.sh +++ b/AutomaticBrightness.sh @@ -118,7 +118,7 @@ do CurrentBrightness=$(cat $BLightPath) # Add MinimumBrighness here to not effect comparison but the outcome - Light=$(( $Light + $MinimumBrightness )) + Light=$(LANG=C printf "%.0f" $(echo "scale=2; $Light + ( $MinimumBrightness * $SensorToDisplayScale ) " | bc )) # Gernate a TempLight value for the screen to be set to # Float math thanks Matthias_Wachter From ebd17c5d38325e512a70a231860260887dbb157a Mon Sep 17 00:00:00 2001 From: steel99xl Date: Tue, 6 Aug 2024 15:35:19 -0400 Subject: [PATCH 05/10] Update README.md Now with information on how to easily update the script and service with a new version or one your have modified --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 21870d8..5fe392f 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,15 @@ made for the FrameWork laptop based on 2017 MacBook Pro + read ```Configuration``` for detailed informatoion about what options you have to easily customize/ adjust the bightness or animation speed +## Updating +Run ```git pull``` to download the latest version + +Then run ```./setup -u``` to update the the service and script running on your system with newly downloaded / modifyed versions + + ## Requires ```bc``` For running as your user you need to be part of the ```video``` group From 4c1a595430414ad1e198f11487df1c69930e7f8d Mon Sep 17 00:00:00 2001 From: steel99xl Date: Tue, 6 Aug 2024 15:58:00 -0400 Subject: [PATCH 06/10] Fixed Error --- AutomaticBrightness.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AutomaticBrightness.sh b/AutomaticBrightness.sh index 2f27e80..ee728e3 100755 --- a/AutomaticBrightness.sh +++ b/AutomaticBrightness.sh @@ -118,7 +118,7 @@ do CurrentBrightness=$(cat $BLightPath) # Add MinimumBrighness here to not effect comparison but the outcome - Light=$(LANG=C printf "%.0f" $(echo "scale=2; $Light + ( $MinimumBrightness * $SensorToDisplayScale ) " | bc )) + Light=$(LANG=C printf "%.0f" $(echo "scale=2; $Light + ( ($MaxScreenBrightness * ( $MinimumBrightness / 100 )) / $SensorToDisplayScale ) " | bc )) # Gernate a TempLight value for the screen to be set to # Float math thanks Matthias_Wachter From 0e6a16ae82ac5029ddbc9ebf710e599c5d54b363 Mon Sep 17 00:00:00 2001 From: steel99xl Date: Tue, 6 Aug 2024 16:02:09 -0400 Subject: [PATCH 07/10] forgot to use LC_NUMERIC --- AutomaticBrightness.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AutomaticBrightness.sh b/AutomaticBrightness.sh index ee728e3..d0d0054 100755 --- a/AutomaticBrightness.sh +++ b/AutomaticBrightness.sh @@ -118,7 +118,7 @@ do CurrentBrightness=$(cat $BLightPath) # Add MinimumBrighness here to not effect comparison but the outcome - Light=$(LANG=C printf "%.0f" $(echo "scale=2; $Light + ( ($MaxScreenBrightness * ( $MinimumBrightness / 100 )) / $SensorToDisplayScale ) " | bc )) + Light=$(LC_NUMERIC=C printf "%.0f" $(echo "scale=2; $Light + ( ($MaxScreenBrightness * ( $MinimumBrightness / 100 )) / $SensorToDisplayScale ) " | bc )) # Gernate a TempLight value for the screen to be set to # Float math thanks Matthias_Wachter From 83f9147362a6deaeeb00ddfe6a4cf669a5c80fb7 Mon Sep 17 00:00:00 2001 From: steel99xl Date: Mon, 6 Jan 2025 19:46:33 -0500 Subject: [PATCH 08/10] Improved Range Improved the effective amount of distinct brightness levels by 5x *You can lower LevelSteps to get more distinct levels but you will need to change the AnimationDelay to compensate --- AutomaticBrightness.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/AutomaticBrightness.sh b/AutomaticBrightness.sh index d0d0054..7dc08c1 100755 --- a/AutomaticBrightness.sh +++ b/AutomaticBrightness.sh @@ -10,10 +10,10 @@ SensorDelay=1 # NOW WITH FLOAT SUPPORT SensorToDisplayScale=24.09 -#This should match your refesh rate other wise it will either change the back light more times than needed or too few for a smooth animation -LevelSteps=60 -# The is should match the LevelSteps but in the acual time each event should take to see -AnimationDelay=0.016 +# 12 steps is the most similar on a Macbook 2017 running Arch compared to MacOS +LevelSteps=12 +# Playes the 12 stesp effectivly at 30 FPS 32ms +AnimationDelay=0.032 # Read the variable names From 8593bbf05e22f0002e02dd55f2188cdcba2719a4 Mon Sep 17 00:00:00 2001 From: Ishaaq Date: Mon, 17 Mar 2025 20:20:13 +0000 Subject: [PATCH 09/10] Fix some english typos --- AutomaticBrightness.sh | 26 +++++++++++++------------- setup.sh | 8 ++++---- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/AutomaticBrightness.sh b/AutomaticBrightness.sh index 7dc08c1..e209f15 100755 --- a/AutomaticBrightness.sh +++ b/AutomaticBrightness.sh @@ -1,18 +1,18 @@ #!/bin/bash -#How much light change must be seen by the sensor befor it will act +#How much light change must be seen by the sensor before it will act LightChange=10 #How often it check the sensor SensorDelay=1 -# Scale sesor to displas brightness range +# Scale sensor to display brightness range # NOW WITH FLOAT SUPPORT SensorToDisplayScale=24.09 # 12 steps is the most similar on a Macbook 2017 running Arch compared to MacOS LevelSteps=12 -# Playes the 12 stesp effectivly at 30 FPS 32ms +# Plays the 12 step effectively at 30 FPS 32ms AnimationDelay=0.032 @@ -21,11 +21,11 @@ MinimumBrightness=001 -# 2 : Default | 1 : Add Offset | 0 : Subtract Offset, Recomended not to change +# 2 : Default | 1 : Add Offset | 0 : Subtract Offset, Recommended not to change op=2 -# Only look for flags -i or -d with an aditional value +# Only look for flags -i or -d with an additional value # AutomaticBrightness.sh -i 100 while getopts i:d: flag do @@ -37,7 +37,7 @@ do esac done -# Verigy offset file exsits and if so read it +# Verify offset file exists and if so read it if [[ -f /dev/shm/AB.offset ]] then OffSet=$(cat /dev/shm/AB.offset) @@ -50,7 +50,7 @@ fi #if no offset or its less than 0 make 0 OffSet=$((OffSet < 0 ? 0 : OffSet)) -# relativly change number in Offset file and write it +# relatively change number in Offset file and write it if [[ $op -lt 2 ]] then if [[ $op -eq 1 ]] @@ -117,15 +117,15 @@ do CurrentBrightness=$(cat $BLightPath) - # Add MinimumBrighness here to not effect comparison but the outcome + # Add MinimumBrightness here to not effect comparison but the outcome Light=$(LC_NUMERIC=C printf "%.0f" $(echo "scale=2; $Light + ( ($MaxScreenBrightness * ( $MinimumBrightness / 100 )) / $SensorToDisplayScale ) " | bc )) - # Gernate a TempLight value for the screen to be set to + # Generate a TempLight value for the screen to be set to # Float math thanks Matthias_Wachter TempLight=$(LC_NUMERIC=C printf "%.0f" $(echo "scale=2; $Light * $SensorToDisplayScale" | bc)) - # Check we dont ask the screen to go brighter than it can + # Check we do not ask the screen to go brighter than it can if [[ $TempLight -gt $MaxScreenBrightness ]] then NewLight=$MaxScreenBrightness @@ -133,7 +133,7 @@ do NewLight=$TempLight fi - # How diffrent should each stop be + # How different should each stop be DiffCount=$(LC_NUMERIC=C printf "%.0f" $(echo "scale=2; ( $NewLight - $CurrentBrightness ) / $LevelSteps" | bc )) # Step once per Screen Hz to make animation @@ -156,7 +156,7 @@ do echo $FakeLight > $BLightPath fi - # Format values apropriatly for brightnessctl + # Format values appropriately for brightnessctl #if [[ $NewLight -lt 0 ]] #then #NewLight=$( echo "$NewLight" | awk -F "-" {'print$2'}) @@ -165,7 +165,7 @@ do #NewLight=$(echo +$NewLight) #fi - # Adjust brightness relativly + # Adjust brightness relatively #brightnessctl -q s $NewLight # Sleep for the screen Hz time so he effect is visible sleep $AnimationDelay diff --git a/setup.sh b/setup.sh index 8921b11..628a942 100755 --- a/setup.sh +++ b/setup.sh @@ -1,11 +1,11 @@ #!/bin/bash # case $1 in - -u) echo "Updading Mac-like-automatic-brightness..." + -u) echo "Updating Mac-like-automatic-brightness..." echo "Stopping AB service..." sudo systemctl kill AB echo "Updating AutomaticBrightness.sh..." - echo "Cloning AutomaticBrighness.sh..." + echo "Cloning AutomaticBrightness.sh..." sudo cp AutomaticBrightness.sh /usr/local/bin/AutomaticBrightness.sh echo "Updating AB.service for systemD..." echo "Cloning AB.service for systemD..." @@ -44,7 +44,7 @@ then awk -v new_phrase="$NewStep" '/LevelSteps=/{ print new_phrase; next } 1' AutomaticBrightness.sh > temp && mv temp AutomaticBrightness.sh fi -echo "Cloning AutomaticBrighness.sh..." +echo "Cloning AutomaticBrightness.sh..." sudo cp AutomaticBrightness.sh /usr/local/bin/AutomaticBrightness.sh sudo chmod u+x /usr/local/bin/AutomaticBrightness.sh @@ -52,7 +52,7 @@ echo "Cloning AB.service for systemD..." sudo cp AB.service /etc/systemd/system/AB.service -echo "Startin Service..." +echo "Starting Service..." sudo systemctl enable AB sudo systemctl start AB From c6c858f572cad4754fe62e1f8744408e6a83a133 Mon Sep 17 00:00:00 2001 From: willifan Date: Wed, 7 May 2025 17:47:45 +0200 Subject: [PATCH 10/10] adjusted SensorToDisplayScale for amd framework --- AutomaticBrightness.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AutomaticBrightness.sh b/AutomaticBrightness.sh index e209f15..23c8eb7 100755 --- a/AutomaticBrightness.sh +++ b/AutomaticBrightness.sh @@ -8,7 +8,7 @@ SensorDelay=1 # Scale sensor to display brightness range # NOW WITH FLOAT SUPPORT -SensorToDisplayScale=24.09 +SensorToDisplayScale=1 # 12 steps is the most similar on a Macbook 2017 running Arch compared to MacOS LevelSteps=12