10 September 2014 22:35

Aktionen beim Suspend ausführen

Vor einiger Zeit hatte ich berichtet, wie man beim Suspend unter Linux automatisch den Bildschirm sperren und sich bei Pidgin abmelden kann. Seit einem Jahr nutze ich nun Arch Linux, welches auf systemd aufbaut. pm-utils wird nicht mehr empfohlen und auch von keinem Programm mehr gefordert. Deshalb habe ich schon vor einiger Zeit diese beiden Aktionen auf systemd angepasst.

Für jede der Aktionen habe ich ein Unit-File in /etc/systemd/system erstellt.

suspend-lockscreen@.service:

[Unit]
Description=Lock screen on suspend
Before=sleep.target

[Service]
User=%I
Type=simple
Environment=DISPLAY=:0
ExecStart=/usr/bin/slock

[Install]
WantedBy=sleep.target

suspend-pidgin@.service:

[Unit]
Description=Go offline in Pidgin on suspend
Before=sleep.target
StopWhenUnneeded=yes

[Service]
User=%I
Type=oneshot
RemainAfterExit=yes
Environment=DISPLAY=:0
ExecStart=-/usr/bin/purple-remote setstatus?status=offline
ExecStop=-/usr/bin/purple-remote setstatus?status=available

[Install]
WantedBy=sleep.target

Diese können dann mit

# systemctl enable suspend-lockscreen@user.service
# systemctl enable suspend-pidgin@user.service

aktiviert werden.

Kommentare

m4lvin, 08.06.2015 19:48
Ups, ich wollte eigentlich hier kommentieren, nicht auf http://sammyshp.de/betablog/post/42 ... Sorry.

Danke für die Hinweise, inzwischen hat sich diese Methode ja über diverse Foren verteilt. Aber leider klappt es bei mir nicht so ganz. Die Befehler werden zwar ausgeführt aber da systemd alles parallel macht ist die Netzwerkverbindung schon weg bevor pidgin sich beim jabber Server abmelden kann. Zumindest in den logfiles meines Jabber-Servers (prosody) finde ich entweder einen timeout oder später eine "connection replaced" Meldung. In dem Moment wo mein PC in standby geht tut sich weiterhin garnichts. Ist das bei dir auch so?
SammysHP, 10.06.2015 21:13
Zumindest in der Theorie war ich davon ausgegangen, dass so etwas möglich ist. Praktisch habe ich es aber noch nie überprüft.

Das Problem ist, dass pidgin-remote den Befehl ausführt und dann gleich wieder beendet wird. Die einzige Lösung, die mir einfällt, wäre das Hinzufügen eines "&& sleep n", was den Suspend aber künstlich verzögern würde. Oder man arbeitet mit einer for-Schleife und prüft ständig den Status von Pidgin. Alles nicht wirklich schön.
m4lvin, 10.06.2015 21:24
Ich glaube das hilft beides nicht. Ich habe mal testweise einen Befehl zum Versenden einer Mail oder ein wget statt dem purple-remote eingebaut. Beides klappt nicht da die Netzwerkverbindungen schon weg sind. Vielleicht würde ein "Before=network.target" helfen.
Mein letzter Versuch war alternativ ein Skript in "/etc/NetworkManager/dispatcher.d/pre-down.d" aber das wird leider nur aktiv wenn ich manuell eine Verbindung trenne und nicht beim Suspend/Standby.
SammysHP, 12.06.2015 09:09
"Before=network.target" würde nichts bringen, weil es dann ja *vor* der Netzwerkverbindung gestartet werden würde. Aber hast recht, bei sleep.target kann das Netzwerk ja immer noch vorher deaktiviert werden.

Der Suspend ist halt eine Sache, bei der man wenig künstliche Verzögerungen haben will und Netzwerk ist nunmal eine äußerst unzuverlässige Sache.
Anonym, 13.06.2015 01:00
Hallo,
hier gibt es einen Bug zu diesem Thema
https://bugzilla.gnome.org/sho...?id=748531
SammysHP, 21.06.2015 13:40
Nicht wirklich, da Network Manager gar nicht im Spiel ist. Es geht hier um eine reine systemd-Umgebung.
Powered by BetaBlog
Login | RSS Beiträge RSS Kommentare Impressum