bright (2679B)
1 #!/bin/sh 2 # Notes for linux users: 3 # Add backlight rule to change your card's file permissions 4 # to your user, replace [USER] with your user & [CARD] with 5 # your brightness card. 6 # /etc/udev/rules.d/backlight.rules: 7 # ---------------------------------- 8 # RUN+="/bin/chown [USER] /sys/class/backlight/[CARD]/brightness" 9 10 BRIGHTNESS_ACT="get" 11 BRIGHTNESS_STEPS="5" 12 BRIGHTNESS_NOTIF=0 13 14 while getopts ':ngidos:c:' flag; do 15 case "${flag}" in 16 n) BRIGHTNESS_NOTIF=1 ;; 17 g) BRIGHTNESS_ACT="get" ;; 18 i) BRIGHTNESS_ACT="inc" ;; 19 d) BRIGHTNESS_ACT="dec" ;; 20 o) BRIGHTNESS_ACT="opt" ;; 21 s) BRIGHTNESS_STEPS="${OPTARG}" ;; 22 c) BRIGHTNESS_CARD="${OPTARG}" ;; 23 *) 24 printf 'Usage: %s [-g] [-d] [-u] [-o] [-c card] [-s brightness steps (in %%)]\n' "$0" 25 printf ' -g: get brightness\n' 26 printf ' -i: increase brightness\n' 27 printf ' -d: decrease brightness\n' 28 printf ' -o: optimal brightness\n' 29 exit 2 30 ;; 31 esac 32 done 33 34 KERNEL=$(uname) 35 36 case "$KERNEL" in 37 Linux*) 38 BRIGHTNESS_CARD=$(find /sys/class/backlight -depth | head -n 1) 39 BRIGHTNESS_MAX=$(cat "${BRIGHTNESS_CARD}/max_brightness") 40 BRIGHTNESS=$(cat "${BRIGHTNESS_CARD}/brightness") 41 BRIGHTNESS=$((BRIGHTNESS*100/BRIGHTNESS_MAX)) 42 BRIGHTNESS=${BRIGHTNESS%.*} 43 ;; 44 FreeBSD*) 45 BRIGHTNESS_MAX=100 46 BRIGHTNESS=$(backlight | cut -d ' ' -f 2) 47 ;; 48 OpenBSD*) 49 BRIGHTNESS_MAX=100 50 BRIGHTNESS=$(apm -l) 51 ;; 52 esac 53 54 change_bright() { 55 BRIGHTNESS_NEW=$1 56 BRIGHTNESS_NEW=$((BRIGHTNESS_NEW * BRIGHTNESS_MAX / 100)) 57 [ "$BRIGHTNESS_NEW" -gt "$BRIGHTNESS_MAX" ] && BRIGHTNESS_NEW=$BRIGHTNESS_MAX 58 [ "$BRIGHTNESS_NEW" -lt "1" ] && BRIGHTNESS_NEW=1 59 60 case "$KERNEL" in 61 Linux*) 62 echo "$BRIGHTNESS_NEW" > "${BRIGHTNESS_CARD}/brightness" 63 ;; 64 FreeBSD*) 65 backlight "$BRIGHTNESS_NEW" 66 ;; 67 OpenBSD*) 68 apm -s "$BRIGHTNESS_NEW" 69 ;; 70 esac 71 } 72 73 main() { 74 case "$BRIGHTNESS_ACT" in 75 get) 76 echo "$BRIGHTNESS" 77 ;; 78 inc) 79 BRIGHTNESS_NEW=$((BRIGHTNESS+BRIGHTNESS_STEPS)) 80 ;; 81 dec) 82 BRIGHTNESS_NEW=$((BRIGHTNESS-BRIGHTNESS_STEPS)) 83 ;; 84 opt) 85 TMPFILE=$(mktemp /tmp/backlight-optimal-XXXXXXX.jpg) 86 ffmpeg -y -loglevel quiet -f v4l2 -i /dev/video0 -frames:v 1 -f image2 "$TMPFILE" 87 AVG=$(convert "$TMPFILE" -format "%[mean]" info:) 88 rm "$TMPFILE" 89 BRIGHTNESS_NEW=$(printf '%s' "$AVG" | awk '{print int($1/65535*100+30)}') 90 ;; 91 esac 92 93 [ "$BRIGHTNESS_ACT" = "get" ] || change_bright "$BRIGHTNESS_NEW" 94 95 if [ "$BRIGHTNESS_NOTIF" -eq 1 ]; then 96 BRIGHTNESS=$((BRIGHTNESS_NEW*100/BRIGHTNESS_MAX)) 97 if [ "$BRIGHTNESS" -le 25 ]; then 98 BRIGHTNESS_ICON="" 99 elif [ "$BRIGHTNESS" -le 60 ]; then 100 BRIGHTNESS_ICON="" 101 else 102 BRIGHTNESS_ICON="" 103 fi 104 notify "$BRIGHTNESS_ICON $BRIGHTNESS" 105 fi 106 } 107 108 main