|
- #!/usr/bin/env bash
-
- # g14control.sh
- #
- # version: 1.0
- # date: 2021-08-01
- # author: hmk
- # description: A hardware interface script for ASUS ROG Zephyrus G14 laptops.
- # Primary purpose is to give a minimal wrapper for hardware control in
- # minimal desktop environments or without any desktop environment a all.
- #
- # Tested on:
- # - GA401IH-BM013T (2020)
- #
- #
- # TODO:
- # - POSIX compliancy (currently uses non-POSIX-complient bash extensions)
- # - is amdgpu_bl0 the only display backlight interface? What happens when dGPU
- # is active?
- #
-
- disp() {
- # Changes display backlight to a given level or steps up/down
-
- INTERFACE="/sys/class/backlight/amdgpu_bl0/brightness"
- MAX=$(cat /sys/class/backlight/amdgpu_bl0/max_brightness)
- STEP=$((MAX/10))
- CURRLEVEL=$(cat ${INTERFACE})
-
- if [[ ${1} == "up" ]]; then
- [[ $((CURRLEVEL+STEP)) > ${MAX} ]] && \
- LEVEL=${MAX} || \
- [[ ${CURRLEVEL} < ${MAX} ]] && \
- LEVEL=$((CURRLEVEL+STEP))
- elif [[ ${1} == "down" ]]; then
- [[ $((CURRLEVEL-STEP)) < 0 ]] && \
- LEVEL=0 ||
- [[ ${CURRLEVEL} > 0 ]] && \
- LEVEL=$((CURRLEVEL-STEP))
- elif [[ ${1} =~ ^[0-9]{1,${#MAX}}$ && ! ${1} > ${MAX} ]]; then
- LEVEL=${1}
- fi
-
- echo ${LEVEL} > ${INTERFACE}
-
- CHKLEVEL=$(cat ${INTERFACE})
-
- notify-send -t 500 "Display backlight level changed" \
- "${CURRLEVEL} -> ${CHKLEVEL}"
- }
-
- kbd() {
- # Changes keyboard backlight to a given level or steps up/down.
- # param:[0-3] set backlight level to NUM
- # param:up step backlight up
- # param:down step backlight down
-
- INTERFACE="/sys/class/leds/asus::kbd_backlight/brightness"
- MAX=$(cat /sys/class/leds/asus::kbd_backlight/max_brightness)
- CURRLEVEL=$(cat ${INTERFACE})
-
- [[ ${1} =~ ^[0-${MAX}]$ ]] && \
- LEVEL=${1}
- [[ ${1} == "up" && ${CURRLEVEL} < ${MAX} ]] && \
- LEVEL=$((CURRLEVEL+1))
- [[ ${1} == "down" && ${CURRLEVEL} > 0 ]] && \
- LEVEL=$((CURRLEVEL-1))
-
- echo ${LEVEL} > ${INTERFACE}
-
- CHKLEVEL=$(cat ${INTERFACE})
-
- notify-send -t 500 "Keyboard backlight level changed" \
- "${CURRLEVEL} -> ${CHKLEVEL}"
- }
-
- fan() {
- # Changes fan mode to a given mode or rotates through modes.
- # 0 = Normal/Balanced
- # 1 = Boost
- # 2 = Silent.
- # param:[0-2] Set fan mode to given mode
- # param:NONE Rotate through modes Balanced -> Boost -> Silent
-
- MODELIST=("Balanced" "Boost" "Silent")
- INTERFACE="/sys/devices/platform/asus-nb-wmi/throttle_thermal_policy"
- CURRMODE=$(cat ${INTERFACE})
-
- if [[ ${1} =~ ^[0-2]$ ]]; then
- MODE=${1}
- else
- if [[ ${CURRMODE} == 2 ]]; then
- MODE=0
- else
- let MODE=$((CURRMODE+1))
- fi
- fi
-
- echo ${MODE} > ${INTERFACE}
-
- CHKMODE=$(cat ${INTERFACE})
-
- notify-send "Fan mode changed" \
- "${MODELIST[${CURRMODE}]} -> ${MODELIST[${CHKMODE}]}"
- }
-
- usage() {
- echo "Usage: $0 [-d LEVEL|up|down] [-k LEVEL|up|down] [-f MODE] [-F] [-h]"
- }
-
-
- while getopts "d:k:f:Fh" ARG; do
- case "${ARG}" in
- d)
- disp ${OPTARG}
- ;;
- k)
- kbd ${OPTARG}
- ;;
- F)
- fan ${OPTARG}
- ;;
- f)
- fan ${OPTARG}
- ;;
- h)
- usage
- exit 0
- ;;
- *)
- usage
- exit 1
- ;;
- esac
- done
-
- exit 0
|