diff options
author | Andreas Fankhauser hiddenalpha.ch | 2023-06-21 22:34:39 +0200 |
---|---|---|
committer | Andreas Fankhauser hiddenalpha.ch | 2023-06-21 22:34:39 +0200 |
commit | 809e2a1b61bc84ff8d35e1955ea2d48d02ca6823 (patch) | |
tree | 043dcdb220d21b129d2c70a764a009a50fb9b81b | |
parent | 82ace01abba4f5d45861a7a1b8c82fa8e8151b6e (diff) | |
download | dotfiles-809e2a1b61bc84ff8d35e1955ea2d48d02ca6823.zip dotfiles-809e2a1b61bc84ff8d35e1955ea2d48d02ca6823.tar.gz |
ReWrite my-brightness script to hopefully kill some bugs
-rw-r--r-- | src/bin/my-brightness | 107 | ||||
-rw-r--r-- | src/bin/my-brightness.sh | 48 |
2 files changed, 107 insertions, 48 deletions
diff --git a/src/bin/my-brightness b/src/bin/my-brightness new file mode 100644 index 0000000..0f65b9b --- /dev/null +++ b/src/bin/my-brightness @@ -0,0 +1,107 @@ +#!/bin/sh + +# +# non-root alternative to "my-backlight" +# (Unluckily requires gnuAWK for now) +# + +set -e + +MONITOR="LVDS-1" +PHYS_MIN=0 # smallest value xrandr accepts/reports +PHYS_MAX=100 # largest value xrandr accepts/reports +VIRT_MIN=20 # smallest percent value allowed +VIRT_MAX=100 # largest percent value allowed + + +getCurrentLevelVirtValue () { + local val=$(xrandr --verbose | gawk 'match($0,/Brightness: ([0-9\\.]+)/,m) {print m[1]}') + val=$(echo "$val * 100 + 0.5" | bc | sed -E 's_^([0-9]+)\.?[0-9]*$_\1_') + val=$(asVirtualScale "$val") + echo >&2 "getCurrentLevelVirtValue $@ --> $val" + echo $val +} + + +asVirtualScale () { + local tmp=${1:?} + local vRange=$(echo "${VIRT_MAX:?}-${VIRT_MIN:?}"|bc) + local physRange=$(echo "${PHYS_MAX:?}-${PHYS_MIN}"|bc) + tmp=$(echo "($tmp * $vRange / $physRange) + $VIRT_MIN - $PHYS_MIN" | bc) + echo >&2 "asVirtualScale $@ --> $tmp" + echo $tmp +} + + +asPhysicalScale () { + #echo >&2 "asPhysicalScale" "$@" + local tmp=${1:?} + local vRange=$(echo "${VIRT_MAX:?}-${VIRT_MIN:?}"|bc) + local physRange=$(echo "${PHYS_MAX:?}-${PHYS_MIN}"|bc) + tmp=$(echo "($tmp + $PHYS_MIN - $VIRT_MIN) * $physRange / $vRange" | bc) + echo >&2 "asPhysicalScale $@ --> $tmp" + echo $tmp +} + + +xrandrScaleByVirtScale () { + local tmp=${1:?} + tmp=$(echo "scale=2;($tmp / $VIRT_MAX)" | bc) + echo >&2 "xrandrScaleByVirtScale $@ --> $tmp" + echo $tmp +} + + +cropToMinMax () { + local tmp=${1:?} + local min=${2:?} + local max=${3:?} + local ret="" + if [ "$tmp" -lt "$min" ]; then + ret=$min + elif [ "$tmp" -gt "$max" ]; then + ret=$max + else + ret=$tmp + fi + echo >&2 "cropToMinMax $@ --> $ret" + echo $ret +} + + +startsWithPlusOrMinus () { echo ${1:?} | grep -qE '^[+-]'; } + + +main () { + local cur=$(getCurrentLevelVirtValue) + + # Print current brightness in percent if No argument given. + if [ $# -eq 0 ]; then echo $cur; return 0; fi + + if [ "$1" = "--help" ]; then + echo " Examples:" + echo " $(basename $0) 50 # Set brightness to 50%" + echo " $(basename $0) +10 # Increase brightness by 10%" + echo " $(basename $0) -10 # Decrease brightness by 10%" + return 1; + fi + + local level=$1 + + if startsWithPlusOrMinus $level; then + # Calculate absolute out of relative value. + cur=$(asPhysicalScale "$cur") + level=$(echo "${cur:?}${level:?}" | bc) + fi + + level=$(cropToMinMax "$level" "$VIRT_MIN" "$VIRT_MAX") + level=$(xrandrScaleByVirtScale "$level") + + # Write evaluated brightness + echo >&2 CMD: xrandr --output $MONITOR --brightness "${level:?}" + xrandr --output $MONITOR --brightness "${level:?}" +} + + +main "$@" + diff --git a/src/bin/my-brightness.sh b/src/bin/my-brightness.sh deleted file mode 100644 index 12a8c25..0000000 --- a/src/bin/my-brightness.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash - -# -# Software (no root) alternative to "my-backlight.sh" -# - -level=$1 -cur=$( xrandr --verbose | awk 'match($0,/Brightness: ([0-9\\.]+)/,m) {print m[1]}' ) -cur=$( echo "$cur*100" | bc ) -min=0 -max=100 -range=$( echo "$max-$min" | bc ) - -curPercent=$( echo "($cur-$min)*100/$range" | bc ) - -if [ $# -eq 0 ] ;then - # No argument given. Print current brightness in percent. - echo "$curPercent" - exit; -elif [ "$1" == "--help" ] ;then - echo "examples:" - echo " - $0 50 # Set brightness to 50%" - echo " - $0 +10 # Increase brightness by 10%" - echo " - $0 -10 # Decrease brightness by 10%" - exit; -fi - -if [[ "$level" =~ ^[+|-] ]] ;then - # Calculate absolute for specified relative value. - level=$( echo "0$level+$curPercent" | bc ) -fi - -# Fix max and min exceedations. -if [ $level -lt 10 ] ;then - level=10 -elif [ $level -gt 100 ] ;then - level=100 -fi - -# Translate percent to target scale -nxt=$( echo $level*$range/100 | bc ) -nxt=$( echo "scale=2;$level/100" | bc ) - -# Write evaluated brightness - -echo xrandr --output LVDS-1 --brightness "$nxt" -xrandr --output LVDS-1 --brightness "$nxt" - |