#!/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 "${OLLIE_TOOLS_PATH:-$(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