W systemie Ubuntu 12.04 LTS chciałbym uruchamiać skrypty po wznowieniu zawieszenia i odblokowaniu pulpitu. Muszą one działać jako mój użytkownik z dostępem do mojego $DISPLAY
.
W szczególności chciałbym
- uruchom ponownie,
nm-applet
aby obejść błąd 985028 - pokaż niestandardowe powiadomienie za pomocą
notify-send
- ewentualnie inne rzeczy, kiedy zacznę działać
Po wznowieniu /etc/pm/sleep.d/
uruchamiane są skrypty , ale działają one jako root, bez znajomości mojego ekranu i nazwy użytkownika. Może to działać, jeśli na stałe export
wpisuję DISPLAY :0
w swoich skryptach swoją nazwę użytkownika i domyślną , ale wydaje mi się to bardzo brzydkim włamaniem.
Skrypty ~/.config/autostart/xyz.desktop
działają po zalogowaniu, ale nie uruchamiają się po odblokowaniu ekranu po wznowieniu.
Czy istnieje sposób uruchamiania skryptów po odblokowaniu ekranu po wznowieniu?
users
, zakładając, że nikt inny nie jest zalogowany. (Lub to nie ma znaczenia)Odpowiedzi:
Wygląda na to, że i tak musisz zakodować nazwę użytkownika w poprzedniej odpowiedzi, więc oto prosty skrypt dla /etc/pm/sleep.d, jeśli ktoś szuka szybkiej poprawki:
źródło
To pytanie w witrynie Unix i Linux dokumentuje alternatywne podejście z wykorzystaniem komunikatów dbus:
(Zastąp SCREEN_LOCKED i SCREEN_UNLOCKED czynnościami, które chcesz wykonać.)
Używanie
xrandr 1>/dev/null 2>1
jako akcji odblokowania naprawiło mój problem polegający na tym, że rozdzielczości / pozycje monitora nie były poprawnie przywracane podczas odblokowywania ekranu (xrandr wydaje się powodować ponowne czytanie ustawień ekranu). Dodałem tę linię jako zadanie w tle do mojego .bash_profile (ściśle może być lepiej jako plik na pulpicie w ~ / .config / autostart, ponieważ działa to tylko po uruchomieniu gnome):Dalsze informacje na temat interfejsu API wygaszacza ekranu można znaleźć na tej stronie oraz tutaj na monitorze dbus .
źródło
Jednym z rozwiązań jest skrypt uruchamiany podczas logowania do pulpitu i wychwytujący komunikaty dbus. Po wznowieniu zawieszenia ekran jest zablokowany, a po wprowadzeniu hasła w dbus następuje zdarzenie Odblokuj.
(Dzięki Kim SJ za umieszczenie mnie na właściwej ścieżce. Nie mam sygnałów ScreenSaver, ale znalazłem inny interfejs do użycia).
W
~/.config/autostart/
mam plik .desktop, który uruchamia skrypt bash:unlock_monitor
Skrypt Monitor odczytuje wiadomości z DBuscom.canonical.Unity.Session
i robi rzeczy naUnlocked
sygnały:Podczas logowania nie ma sygnału „Odblokowany”, ale po uruchomieniu pojawia się sygnał „NameAcquired”
dbus-monitor
.źródło
Możesz uruchomić skrypt za pomocą start-stop-daemon. start-stop-daemon może rozwidlać wątek działający jako inny identyfikator UID i GID, co rozwiąże Twój problem.
Musisz napisać skrypt zadania umieszczony w systemie PATH jak
/usr/bin
i utworzyć dodatkowy skrypt demona/etc/pm/sleep.d
. Dopasowaniepm-suspend
akcji typuresume
lubthaw
skrypt demona zatwierdza skrypt zadania za pośrednictwemgdzie
ARGs
może być--chuid 1001:1001
lub po prostu--user your_username
.I dla uczciwości, równie dobrze możesz chcieć, aby skrypt demona zatrzymał damona nazwanego
nm-rtvt
przed zawieszeniem za pośrednictwempasujące
pm-suspend
działania, takie jaksuspend
lubhibernate
.Szczegółowe informacje
man start-stop-daemon
. Istnieje wiele innych przykładów/etc/init.d
skryptów demonów.źródło