Chcę uruchomić skrypt przed wylogowaniem się z sesji GNOME, aby ostrzec się, jeśli zapomniałem pendrive podłączonego do maszyny.
Jednak wszystkie znalezione przeze mnie rozwiązania nie były dla mnie wystarczające:
To podobne pytanie sugeruje edycję
/etc/gdm/PostSession/Default
pliku, ale nie mam na to uprawnień. (A plik jest obecnie pusty na moim komputerze, więc nie ma żadnych haków, które można by wykorzystać)Znalazłem również ten post sugerujący obejście, ale zgodnie z pierwszą odpowiedzią nie działa, jeśli zamknę komputer zamiast tylko się wyloguję.
Odpowiedzi:
Podczas korzystania z Gnome możesz użyć poniższego skryptu Python, dostosowanego do tego, o którym wspomniałeś.
Wymaga wylogowania z Gnome (tj.
gnome-session-quit
) (Lub wyłączenia gnome), to się dzieje, gdy używamy wylogowania w GUI. AFAIK żaden proces nie może zablokować zamknięcia poleceniasudo shutdown -h 0
lub poleceniasudo poweroff
. Poshutdown
uruchomieniu daje SIGTERM całemu procesowi i daje kilka sekund na zakończenie (po wykonaniu niektórych skryptów, których nie mogą edytować użytkownicy inni niż root). Jeśli nie zostaną zakończone, SIGKILL zabije je w sposób wymuszony.Jest to
gnome_save_yourself
metoda metody krok po kroku . Zróbmy test.Zapisz następujący kod jako
~/Desktop/execute_script_on_shutdown.sh
(From http://www.linuxquestions.org/questions/linux-desktop-74/gnome-run-script-on-logout-724453/#post3560301 )Spraw, by był wykonywalny:
Zapisz następujące jako
~/Desktop/shutdown_script.sh
Uruchom skrypt główny
Teraz czujesz, że skrypt na coś czeka
Sprawdź plik o nazwie
AAAAAAAAAAAAAAAAAAAAAAAAAAA
na pulpicie.Jeśli widzisz plik, wszystko jest w porządku. Teraz możesz edytować w
shutdown_script.sh
zależności od potrzeb. Pamiętaj także, aby wykonaćexecute_script_on_shutdown.sh
logowanie (lub ustawić automatyczne uruchamianie po uruchomieniu).źródło
Jeśli chcesz, aby sesja była blokowana w każdych okolicznościach, potrzebujesz uprawnień roota. Nie można tego obejść. Użytkownik root może zawsze mieć
kill -9
swoje procesy. Dziwi mnie, że wyłączenie nie powoduje, że gnom emituje sygnał „ratuj siebie”. Uważam również, że skrypty „PostSession” są uruchamiane dopiero po zakończeniu sesji gnome i (sądzę) tuż przed zakończeniem Xserver, co oznacza, że nie jest to miejsce, w którym chciałbyś umieścić ostrzeżenie, które powinno pojawić się na ekranie (jeśli Mam rację).Może działać aplikacja Gnome, która a) reaguje na zdarzenie gnome „ratuj siebie” ORAZ b) reaguje na SIGTERM w taki sam sposób, w jaki reaguje na „bezpieczne”. Poza tym niewiele możesz zrobić, zwłaszcza bez uprawnień roota.
Możesz jednak rozwiązać problem inny niż root: Napisz skrypt PostSession, który robi to, co chcesz i zasugeruj komuś z uprawnieniami roota, aby wdrożył go na wszystkich komputerach, ponieważ jest to rozsądne narzędzie, które bardzo pomaga użytkownikom. Zwykle faceci z uprawnieniami root są opłacani, aby uszczęśliwiać użytkowników. :-)
Jaki problem próbujesz rozwiązać? Dlaczego nie możesz wylogować się z sesji, gdy pendrive jest podłączony?
Możesz mieć klienta dbus, który wyświetla „Nie zapomnij odłączyć urządzenia!” kiedy gvfs ogłasza odmontowanie systemu plików na urządzeniu USB. Ale nie wiem, jak dobrze to działa, a nawet służy twoim celom.
źródło
W końcu udało mi się przetestować skrypt Pythona, o którym wspomniałem jako drugą opcję w moim pytaniu. Okazuje się, że to nie działa, gdy z prośbą o wyłączenie, a także, nie tylko podczas ponownego uruchamiania.
źródło