44 lines
1.3 KiB
Bash
44 lines
1.3 KiB
Bash
#!/bin/sh
|
|
|
|
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)
|
|
|
|
# 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
|