Ich möchte einen Bildschirm ausführen, wenn die Gnome-Sitzung gesperrt und entsperrt ist. Gibt es eine Möglichkeit, dies abzufangen und bestimmte Aktionen auszuführen, wenn der Desktop gesperrt oder entsperrt ist?
54
Gnome-Bildschirmschoner sendet einige Signale auf dbus, wenn etwas passiert.
Hier die Dokumentation (mit einigen Beispielen).
Sie könnten ein Skript schreiben, das ausgeführt wird:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'"
und das tut was Sie brauchen, wenn Sie dbus-monitor
eine Zeile über den Bildschirm drucken, der gesperrt / entsperrt wird.
Hier ein Bash-Befehl, um das zu tun, was Sie brauchen:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
while read x; do
case "$x" in
*"boolean true"*) echo SCREEN_LOCKED;;
*"boolean false"*) echo SCREEN_UNLOCKED;;
esac
done
Ersetzen Sie einfach echo SCREEN_LOCKED
und echo SCREEN_UNLOCKED
mit dem, was Sie brauchen.
gnome-screensaver-command
ist schon da. Übergeben-a
angnome-screensaver-command
, sperren Sie den Bildschirm, während Sie ihn mit entsperren-d
. Wie auch immer, die meisten Gnome-Apps verwenden Dbus ausgiebig, sodass Sie viele erstaunliche Dinge damit tun können.In Ubuntu 14.04 wurde das DBus-Ereignis zum Entsperren des Bildschirms geändert und das neue Skript zum Binden an Ereignisse zum Sperren und Entsperren des Bildschirms sieht folgendermaßen aus
quelle
Heutzutage ist es meiner Meinung nach besser, die
LockedHint
Nachrichten anzuhören, als Bildschirmschoner-Nachrichten. Auf diese Weise sind Sie nicht an eine Bildschirmschoner-Implementierung gebunden.Hier ist ein einfaches Skript, um das zu tun:
Gibt dies:
quelle
Ubuntu 16.04: Die Lösung von ozma hat bei mir nicht funktioniert, diesmal jedoch:
quelle
Erweitere die bereits gegebene Antwort.
Wenn Sie versuchen, ein Skript aus einer
screen
oder einertmux
Sitzung heraus auszuführen , müssen Sie$DBUS_SESSION_BUS_ADDRESS
zuerst das richtige Skript finden und es als Argument fürdbus-monitor
anstatt übergeben--session
. Auch wenn Sie es als Daemon ausführen, sollten Sie sicherstellen, dass jeweils nur eine Instanz ausgeführt wird (z. B. mit einer Sperrdatei) und dass das Skript nach sich selbst mit bereinigttrap
. Das folgende Beispiel funktioniert als Daemon in den meisten aktuellen Gnome-Umgebungen (getestet unter Ubuntu GNOME 16.04):Wenn dies bei Ihnen nicht funktioniert, liegt es wahrscheinlich an:
quelle
Wenn Sie auf Kubuntu arbeiten oder KDE / Plasma als Desktop-Umgebung verwenden, müssen Sie auf die Benutzeroberfläche
org.freedesktop.ScreenSaver
achten, damit das Skript zum Abhören dieses Ereignisses folgendermaßen aussieht:quelle
Personalization>Notifications>Notifications>Screensaver
.upstart
Unterstützung des Sitzungsjobsdesktop-lock
unddesktop-unlock
Ereignisse in derstart on
Zeilengruppe. Erstellen Sie einfach einen Job Conf für Ihre Benutzer mit den entsprechenden Trigger und Befehle unter anrufen$XDG_CONFIG_HOME/upstart/
oder$HOME/.config/upstart
unten , wie zB:quelle
Das hat bei mir in Ubuntu 16.04 funktioniert
quelle