ollie/data/tools/gui_brightness

84 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# args_json: {"type":"object","required":["action"],"properties":{"action":{"type":"string","description":"get|set|up|down"},"value":{"type":"string","description":"Brightness percentage (for set action)"}}}
# ollie:prompt
# ## gui_brightness
#
# Get/set screen brightness.
#
# - Actions: `get`, `set`, `up`, `down`
#
# ```
# gui_brightness(action="get")
# gui_brightness(action="set", value="50")
# ```
# ollie:end
set -euo pipefail
source "$(dirname "$0")/_lib/args.sh"
SERVICE="org.kde.Solid.PowerManagement"
OBJ_PATH="/org/kde/Solid/PowerManagement/Actions/BrightnessControl"
IFACE="org.kde.Solid.PowerManagement.Actions.BrightnessControl"
cmd=$(arg_require "action")
get_max() {
gdbus call --session --dest "$SERVICE" \
--object-path "$OBJ_PATH" \
--method "$IFACE.brightnessMax" | \
sed 's/(//;s/,)//'
}
get_current() {
gdbus call --session --dest "$SERVICE" \
--object-path "$OBJ_PATH" \
--method "$IFACE.brightness" | \
sed 's/(//;s/,)//'
}
case "$cmd" in
get)
max=$(get_max)
cur=$(get_current)
if [ "$max" -gt 0 ]; then
pct=$((cur * 100 / max))
else
pct=0
fi
echo "${pct}%"
;;
set)
pct=$(arg_require "value")
max=$(get_max)
val=$((pct * max / 100))
gdbus call --session --dest "$SERVICE" \
--object-path "$OBJ_PATH" \
--method "$IFACE.setBrightness" "$val" >/dev/null
echo "OK: brightness set to ${pct}%"
;;
up)
gdbus call --session --dest "$SERVICE" \
--object-path "$OBJ_PATH" \
--method "$IFACE.brightnessKeyPressed" "int32:1" >/dev/null 2>&1 || \
gdbus call --session --dest "$SERVICE" \
--object-path "$OBJ_PATH" \
--method "org.kde.Solid.PowerManagement.Actions.BrightnessControl.brightnessKeyPressed" "int32:1" >/dev/null
max=$(get_max); cur=$(get_current)
echo "OK: brightness now $((cur * 100 / max))%"
;;
down)
gdbus call --session --dest "$SERVICE" \
--object-path "$OBJ_PATH" \
--method "$IFACE.brightnessKeyPressed" "int32:0" >/dev/null 2>&1 || \
gdbus call --session --dest "$SERVICE" \
--object-path "$OBJ_PATH" \
--method "org.kde.Solid.PowerManagement.Actions.BrightnessControl.brightnessKeyPressed" "int32:0" >/dev/null
max=$(get_max); cur=$(get_current)
echo "OK: brightness now $((cur * 100 / max))%"
;;
*)
echo "error: unknown action: $cmd (use get|set|up|down)" >&2
exit 1
;;
esac