In Ubuntu 12.04 LTS möchte ich Skripte ausführen, nachdem ich aus dem Standby-Modus zurückgekehrt bin und meinen Desktop entsperrt habe. Diese müssen als mein Benutzer und mit Zugriff auf meine ausgeführt werden $DISPLAY
.
Insbesondere möchte ich
- Starten Sie neu
nm-applet
, um den Fehler 985028 zu umgehen - Zeigen Sie eine benutzerdefinierte Benachrichtigung mit
notify-send
- Möglicherweise andere Sachen, wenn ich diese zum Laufen bringe
Wenn ich fortfahre, werden die Skripte in /etc/pm/sleep.d/
ausgeführt, aber sie werden als root ausgeführt, ohne dass mein Bildschirm und mein Benutzername bekannt sind. Es könnte funktionieren, wenn ich meinen Benutzernamen und export
den Standard DISPLAY :0
in diesen Skripten fest codiere, aber das fühlt sich wie ein sehr hässlicher Hack an.
Skripts ~/.config/autostart/xyz.desktop
werden nach der Anmeldung ausgeführt, jedoch nicht, nachdem der Bildschirm nach dem Fortsetzen entsperrt wurde.
Gibt es eine Möglichkeit, nach dem Entsperren des Bildschirms nach einem Lebenslauf Skripts auszuführen?
users
, vorausgesetzt, niemand anderes ist angemeldet (oder es spielt keine Rolle)Antworten:
Es sieht so aus, als müssten Sie den Benutzernamen in der vorherigen Antwort ohnehin hart codieren. Hier ist ein einfaches Skript für /etc/pm/sleep.d, wenn jemand nach einer schnellen Lösung sucht:
quelle
Diese Frage auf der Unix- und Linux-Site dokumentiert einen alternativen Ansatz unter Verwendung von dbus-Nachrichten:
(Ersetzen Sie SCREEN_LOCKED und SCREEN_UNLOCKED durch die Aktionen, die Sie ausführen möchten.)
Mit
xrandr 1>/dev/null 2>1
wie die Aktion auf Entriegelung mein Problem behoben , dass Monitorauflösungen / Positionen nicht richtig wurden auf dem Bildschirm Entriegeln restauriert (xrandr scheint eine erneute Lesen von Bildschirmeinstellungen zu verursachen). Ich habe diese Zeile als Hintergrundaufgabe in mein .bash_profile eingefügt (genau genommen ist es besser als Desktop-Datei in ~ / .config / autostart, da dies nur beim Start von gnome ausgeführt wird):Weitere Hintergrundinformationen zur Gnome-Bildschirmschoner-API finden Sie auf dieser Site und auf dem dbus-Monitor hier .
quelle
Eine Lösung ist ein Skript, das beim Anmelden am Desktop ausgeführt wird und das dbus-Nachrichten abfängt. Nach dem Fortsetzen nach dem Anhalten wird der Bildschirm gesperrt, und nach der Eingabe des Kennworts tritt auf dem dbus ein Unlock-Ereignis auf.
(Vielen Dank an Kim SJ, der mich auf den richtigen Weg gebracht hat. Ich habe keine ScreenSaver-Signale, aber eine andere Schnittstelle gefunden).
In habe
~/.config/autostart/
ich eine .desktop-Datei, die ein Bash-Skript startet:Das
unlock_monitor
Monitor-Skript liest dbus-Nachrichten auscom.canonical.Unity.Session
und verarbeitetUnlocked
Signale:Beim Einloggen gibt es kein "Unlocked" Signal, aber beim
dbus-monitor
Start ein "NameAcquired" Signal .quelle
Sie können ein Skript mit start-stop-daemon ausführen. start-stop-daemon kann den Thread als unterschiedliche UID und GID ausgeben und so Ihr Problem lösen.
Sie müssen lediglich ein Jobskript schreiben, das wie in System PATH platziert ist
/usr/bin
, und ein zusätzliches Daemon-Skript in zu erstellen/etc/pm/sleep.d
. Übereinstimmendepm-suspend
Aktion wieresume
oderthaw
das Daemon-Skript schreibt das Job-Skript über festwo
ARGs
könnte sein--chuid 1001:1001
oder nur--user your_username
.Und aus Gründen der Integrität können Sie auch das Dämonskript verwenden, um den genannten Damon zu stoppen,
nm-rtvt
bevor Sie ihn über aussetzenpassende
pm-suspend
Aktionen wiesuspend
oderhibernate
.Für Details
man start-stop-daemon
. Und es gibt viele andere Beispiele/etc/init.d
für Daemon-Skripte.quelle