hoffe bin hier mit systemd-Service-Frage in richtiger Schublade des Forums gelandet:
Ich habe eine Frage zu einer systemd-Unit, die ein Script nach einem Wake-Up nach einem Suspend durchführen soll (Debian 12)
Ich nutze ein Script, das ich auch nach Hochfahren des Computers ausführen lasse und das funktioniert dort einwandfrei.
Das Script wird von gnome selbst (?) gestartet, auf jeden Fall liegt eine startup.desktop-Datei unter ~/.config/autostart
und sieht wie folgt aus:
Code: Alles auswählen
[Desktop Entry]
Name=Startup
Comment=Gnome-Terminal mit Tmux mit Taskwarrior starten
Exec=gnome-terminal --maximize -e /home/jan/bin/startup.sh --zoom=1.2 --title Startup
Terminal=false
Type=Application
X-GNOME-Autostart-enabled=true
Nun habe ich die Situation, dass ich etwa zu Hause in Standby gehe, zur Arbeit fahre, Laptop aus Standby aufwecke
und weiterarbeite. Daher wäre es schön, wenn beim Wake-Up aus Standby auch automatisch das Startscript gestartet wird.
Dazu habe ich eine-Service Datei angelegt, die vom Aufbau her auch prinzipiell funktioniert (testweise durchgeführt und z.B. Text in Log-Dateien schreiben lassen). Es gibt
aber offenbar Rechte-Probleme, weil in dem Script nmcli radio wifi on/off - Befehle auftauchen, die zu Fehlermeldungen (und Scriptabbruch?) führen.
Code: Alles auswählen
[Unit]
Description=Test On Resume
After=suspend.target
[Service]
# User=root zum Testen, da hier nmcli-Befehl keine Fehlermeldung generiert, bei User=jan aber schon
User=root
# User=jan
# User=jan scheint notwendig, da wahrscheinlich sonst mit gnome-terminal (als root) grafische Umgebung nicht erreicht wird
Type=oneshot
Environment=DISPLAY=:0
# was eigentlich letztendlich funktionieren soll:
# ExecStart=/usr/bin/gnome-terminal --maximize -e /home/jan/bin/startup.sh --zoom=1.2 --title Startup
# zum Testen als Minimalbeispiel, da nmcli Fehlermeldungen generiert
ExecStart=/usr/bin/nmcli radio wifi on
[Install]
WantedBy=suspend.target
# WantedBy=suspend.target ist notwendig,
# denn ohne wird das Exec-Script vor Suspend und nicht erst nach Wake-Up ausgeführt
Mittels User=root liefert systemctl start test den fehlerfreien Output
Code: Alles auswählen
Feb 12 15:55:00 t460sjan systemd[1]: Starting test.service - Test On Resume...
Feb 12 15:55:00 t460sjan systemd[1]: test.service: Deactivated successfully.
Feb 12 15:55:00 t460sjan systemd[1]: Finished test.service - Test On Resume.
Code: Alles auswählen
Feb 12 15:59:23 t460sjan systemd[1]: Starting test.service - Test On Resume...
Feb 12 15:59:23 t460sjan nmcli[245510]: Error: failed to set Wi-Fi radio: Not authorized to perform this operation
Feb 12 15:59:23 t460sjan systemd[1]: test.service: Main process exited, code=exited, status=1/FAILURE
Feb 12 15:59:23 t460sjan systemd[1]: test.service: Failed with result 'exit-code'.
Feb 12 15:59:23 t460sjan systemd[1]: Failed to start test.service - Test On Resume.
Wie mache ich das richtig (möglichst ohne Aufteilung in mehrere Scripte o.ä., aber gerne mit Anpassungen in startup.sh-Script selbst)?
Der Vollständigkeit halber Auszüge aus startup.sh-Script
Code: Alles auswählen
# (1) docking-home: Dockingstation und keine Cherry-Tastatur
if [[ "$(lsusb | grep Dock)" != "" && "$(lsusb | grep CHERRY)" = "" ]]
then
LOCATION="docking-home"
nmcli radio wifi off
# (2) docking-work: docking-station sonst
elif [ "$(lsusb | grep Dock)" != "" ]
then
LOCATION="docking-work"
nmcli radio wifi on
...
case "$LOCATION" in
docking-home)
...
# Tmux, dazu weiteres Script tmuxtw aufrufen mit Einstellungen zu tmux
gnome-terminal --maximize --zoom=1.2 -e "/home/jan/bin/tmuxtw"
...
lg jh47