diff --git a/lid-power-manager.sh b/lid-power-manager.sh index 82321f8..dd046e5 100644 --- a/lid-power-manager.sh +++ b/lid-power-manager.sh @@ -1,36 +1,43 @@ -#!/bin/bash +#!/bin/sh -EVENT=$1 -USER_NAME="your_user_name_here" -USER_ID=$(id -u "$USER_NAME") -USER_ENV_DIR="/run/user/$USER_ID" LOG="/tmp/lid-handler.log" SAVED_BRIGHTNESS_FILE="/tmp/keyboard_backlight_saved" BACKLIGHT_NAME="system76_acpi::kbd_backlight" +LID_PATH=$(find /proc/acpi/button/lid/ -name state | head -n1) -export XDG_RUNTIME_DIR="$USER_ENV_DIR" -export DBUS_SESSION_BUS_ADDRESS="unix:path=$USER_ENV_DIR/bus" - -run_user_cmd() { - sudo -u "$USER_NAME" XDG_RUNTIME_DIR="$XDG_RUNTIME_DIR" DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" "$@" -} - -echo "$(date): Lid $EVENT" >>"$LOG" - -if [[ "$EVENT" == "close" ]]; then - # Save current backlight level - brightnessctl --device="$BACKLIGHT_NAME" get >"$SAVED_BRIGHTNESS_FILE" - # Set backlight to 0 - brightnessctl --device="$BACKLIGHT_NAME" set 0 - - systemctl suspend - -elif [[ "$EVENT" == "open" ]]; then - # Restore backlight level if saved - if [[ -f "$SAVED_BRIGHTNESS_FILE" ]]; then - BRIGHTNESS=$(cat "$SAVED_BRIGHTNESS_FILE") - brightnessctl --device="$BACKLIGHT_NAME" set "$BRIGHTNESS" - fi - - run_user_cmd notify-send "Welcome back!" +# Check if the lid path exists +if [[ -z "$LID_PATH" ]] || [[ ! -f "$LID_PATH" ]]; then + echo "$(date): ERROR - Lid state file not found." >> "$LOG" + exit 1 fi + +# Watch for lid events +last_state="unknown" + +while true; do + # Wait for lid state to change + inotifywait -e modify "$LID_PATH" >/dev/null 2>&1 + + state=$(grep -o 'open\|closed' "$LID_PATH") + + # Log only when lid is opened or closed + if [[ "$state" != "$last_state" ]]; then + if [[ "$state" == "closed" ]]; then + # Save brightness and suspend when lid is closed + brightnessctl --device="$BACKLIGHT_NAME" get > "$SAVED_BRIGHTNESS_FILE" + brightnessctl --device="$BACKLIGHT_NAME" set 0 + echo "$(date): Lid closed. Backlight saved and system suspending..." >> "$LOG" + systemctl suspend + + elif [[ "$state" == "open" ]]; then + # Restore brightness when lid is opened + if [[ -f "$SAVED_BRIGHTNESS_FILE" ]]; then + BRIGHTNESS=$(cat "$SAVED_BRIGHTNESS_FILE") + brightnessctl --device="$BACKLIGHT_NAME" set "$BRIGHTNESS" + echo "$(date): Lid opened. Backlight restored." >> "$LOG" + fi + fi + + last_state="$state" + fi +done