Initial commit
This commit is contained in:
21
README.md
Normal file
21
README.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# SmartSleep
|
||||||
|
|
||||||
|
Ein schlankes Skript zur Steuerung des Energiesparmodus
|
||||||
|
|
||||||
|
## Beschreibung
|
||||||
|
|
||||||
|
Das Projekt besteht aus zwei Hauptkomponenten:
|
||||||
|
|
||||||
|
### `smartsleep.sh`
|
||||||
|
Wird bei Ein- und Aufwachvorgängen des Systems ausgeführt.
|
||||||
|
|
||||||
|
- Protokolliert Systemzustände (Eintritt/Verlassen des Energiesparmodus)
|
||||||
|
- Ermittelt den Zustand von Laptop-Deckel und angeschlossener Dockingstation
|
||||||
|
- Wartet auf Druck der STRG-Taste während des Aufwachvorgangs
|
||||||
|
- Steuert den Daemon über Signale (USR1/USR2)
|
||||||
|
|
||||||
|
### `smartsleepd`
|
||||||
|
Läuft im Hintergrund und verwaltet Aufwach-Logik
|
||||||
|
|
||||||
|
- Empfängt Signale von `smartsleep.sh`
|
||||||
|
- Wechselt erneut in den Schlafmodus, wenn keine STRG-Taste gedrückt wurde
|
6
deploy
Executable file
6
deploy
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
sudo cp smartsleep.sh /usr/lib/systemd/system-sleep/
|
||||||
|
pkill smartsleepd
|
||||||
|
./smartsleepd &
|
||||||
|
pgrep smartsleepd
|
5
log
Executable file
5
log
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
journalctl -b | grep -i "systemd-sleep\|sleep\.target" | tail -n 25
|
||||||
|
echo
|
||||||
|
journalctl -t "SmartSleep" | tail -n 30
|
38
smartsleep.sh
Executable file
38
smartsleep.sh
Executable file
@@ -0,0 +1,38 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
TIMEOUT_STRG=5 # Zeit in Sekunden die bleibt, um STRG zu drücken
|
||||||
|
|
||||||
|
USER=$(who | awk '/tty7|:0/ {print $1; exit 0}')
|
||||||
|
[ -n "$USER" ] || exit 0
|
||||||
|
|
||||||
|
export DISPLAY=:0
|
||||||
|
export XAUTHORITY=/home/$USER/.Xauthority
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
pre)
|
||||||
|
logger -t "SmartSleep" "Das System wechselt in den Energiesparmodus"
|
||||||
|
[ -n "$(pgrep smartsleepd)" ] || logger -t "SmartSleep" -p "user.warning" "Der Daemon läuft nicht!"
|
||||||
|
;;
|
||||||
|
post)
|
||||||
|
LID_STATUS="$( awk '{print $2}' < /proc/acpi/button/lid/LID0/state )" # open|closed
|
||||||
|
DOCK_STATUS="$( lsusb | grep -iq "Dell dock" && echo "yes" || echo "no" )"
|
||||||
|
if [ "$LID_STATUS" = "open" ] || [ "$DOCK_STATUS" = "yes" ]; then
|
||||||
|
timeout $TIMEOUT_STRG bash -c '
|
||||||
|
while true; do
|
||||||
|
for n in $( xinput --list | grep keyboard | grep -Po "id=[0-9]+" | cut -c4- ); do
|
||||||
|
if xinput --query-state $n 2> /dev/null | grep down | grep -Eq "(\[37\]|\[105\])"; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$?" -eq 1 ]; then
|
||||||
|
logger -t "SmartSleep" "Benutzerinteraktion (STRG-Taste)"
|
||||||
|
kill -USR2 $(pgrep -f smartsleepd)
|
||||||
|
else
|
||||||
|
logger -t "SmartSleep" -p "user.warning" "Keine Benutzerinteraktion (STRG-Taste)."
|
||||||
|
kill -USR1 $(pgrep -f smartsleepd)
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
23
smartsleepd
Executable file
23
smartsleepd
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
checkSleep() {
|
||||||
|
if timeout 15 bash -c '
|
||||||
|
until journalctl -b | grep -i "systemd-sleep\|sleep\.target" | tail -n1 | grep -iq "Stopped target"; do
|
||||||
|
sleep 0.5
|
||||||
|
done';
|
||||||
|
then
|
||||||
|
logger -t "SmartSleep" "Das System hat den Energiesparmodus beendet"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
logger -t "SmartSleep" "Das System hat den Energiesparmodus nicht wie erwartet beendet"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
trap 'checkSleep && systemctl suspend' USR1
|
||||||
|
trap 'notify-send "SmartSleep" "Energiesparmodus beendet"; checkSleep' USR2
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
sleep infinity &
|
||||||
|
wait $!
|
||||||
|
done
|
Reference in New Issue
Block a user