Od dłuższego czasu walę w nie głową. Ma to związek z tym pytaniem . Chciałbym dowiedzieć się dokładnie, co się stanie, kiedy zdecyduję się zamknąć mój system Linux z GUI. Wydaje się, że jest to słabo (jeśli w ogóle) udokumentowane.
Idealnie, mam nadzieję na odpowiedź agnostyczną na DE i OS. Poza tym interesuje mnie szczególny przypadek Mandrivy 2010.1 i Debiana 6.x (Squeeze) i 7.0 (Wheezy) z uruchomionym Gnome. (Jeśli zwracasz szczególną uwagę, tak, to Gnome 2 i Gnome 3)
Zasadniczo chciałbym wiedzieć, które polecenie / skrypt / sekwencja skryptów jest uruchamiana po naciśnięciu „Zamknij” lub „Uruchom ponownie”, aby móc zmodyfikować ich zachowanie. Niektóre posty na forum, na które patrzyłem, sugerują hakowanie, /etc/polkit-1/*
ale ta struktura katalogów jest na przykład tylko szkieletem mojej skrzynki Debian (Squeeze).
Czy ktoś może pomóc?
EDYTOWAĆ
Co próbowałem do tej pory
- Zastąpiłem
shutdown
plik wykonywalny własnym skryptem. To nie działa: kiedy naciskamshutdown
Gnome wylogowuje się bez wykonywania skryptu. - Próbowałem edytować menu Gnome 2. Bez radości: opcje „Zamknij”, „Wyloguj się” i „Ekran blokady” nie pojawiają się w edytorze menu.
- Patrząc
/usr/share/menu
, nic tam nie pomaga.
Możliwe drogi rozwiązania
strace
w opcjach GUI (czy to w ogóle możliwe?)- Patrząc na
shutdown
kod źródłowy - Patrząc na
gnome-session
kod źródłowy
Aktualizacja
Zgodnie z moimi komentarzami do odpowiedzi poniżej, przejrzałem polkit
akcje poniżej /usr/share/polkit-1/actions/
i znalazłem (w pliku org.freedesktop.consolekit.policy
) akcję wywoływaną, org.freedesktop.consolekit.system.stop-multiple-users
która rzuca wiadomość
System policy prevents stopping the system when other users are logged in
Myślę (ze względu na org.freedesktop.*
konwencję nazewnictwa), że jest to jakiś sygnał wysyłany do DM przez D-BUS. Co więcej, ten komunikat pojawia się podczas próby graficznego wyłączenia, gdy inni użytkownicy są zalogowani, więc mechanizm, który go uruchamia, musi być tym samym mechanizmem, gdy „GUI” lub „Wyłącz” jest wybrane z GUI.
Czy ktoś może potwierdzić / obalić? Czy istnieje możliwość przechwycenia tego sygnału lub modyfikacji go?
/etc/init.d/rc.local
aby wywołać skrypt podczas zatrzymywania .Odpowiedzi:
To zależy od Twojego Display Managera! (tj. KDM, GDM)
Pamiętaj, że Twój DM działa jako root! (potrzebuje uprawnień roota, aby uruchomić proces sesji jako zalogowany użytkownik)
Kiedy klikniesz zamknij w KDE lub GNOME, twój DE wysyła sygnał do twojego DM, aby się wyłączył lub wznowił po zakończeniu sesji. Następnie twój DE każe każdemu programowi zakończyć, a gdy wszystkie inne procesy zakończą się (lub przekroczą limit czasu), ostatni proces twojego DE - proces sesji - zostanie zakończony.
Proces sesji jest pierwszym procesem rozpoczętym w sesji X11. Po zabiciu lub zakończeniu sesja kończy się. Czy kiedykolwiek widziałeś ten xterm podczas uruchamiania X bez DE? To jest proces sesji. Ten proces jest wywoływany
kdeinit
w KDE ignome-session
GNOME.Po zakończeniu sesji kontrola jest zwracana do twojego DM (który czekał na zakończenie procesu X) i sprawdza, co powiedział mu DE. Jeśli polecenie to wyłączy się lub ponownie uruchomi, zrobi to. W innym przypadku po prostu uruchomi nowy ekran logowania w X.
Jest to również związane z problemami, które mogłeś mieć w przeszłości, ponieważ niektórzy DE nie byli w stanie wyłączyć się lub zrestartować, aby się wylogować, gdy są używane w połączeniu z innymi DM.
W każdym razie nie jest to tak źle udokumentowane. GDM ma stronę podręcznika polecenia, która pozwala ci powiedzieć, żeby się zamknął, tak jak mówiłem wcześniej (
gdm-control
). KDM ma również doskonałą dokumentację i ma podobne (nieco bardziej złożone) narzędzie o nazwiekdmctl
.Zamykanie i ponowne uruchamianie jest możliwe bez PolicyKit, ale PolicyKit służy wielu celom potrzebnym w dzisiejszych systemach, takim jak montowanie dysków bez rootowania, zawieszania lub hibernacji komputera. I to nie jest źle udokumentowane!
Sprawdź to, jeśli chcesz dowiedzieć się więcej o tym, co to jest PolicyKit i jak to działa: http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html
źródło
gdm-control
nie było pomocy. Dokumentacja dostarczona w zestawie PolicyKit wydaje się bardziej obiecująca. Wkopię się w to i zobaczę, czy mogę zaimplementować niestandardową regułę. Ciąg dalszy nastąpi ...polkit
akcji o nazwieorg.freedesktop.consolekit.system.stop-multiple-users
w/usr/share/polkit-1/actions
Ustawiono w celu odwołania żądania dla nieaktywnych użytkowników iauth_admin_keep
dla aktywnego użytkownika. Pytanie brzmi, co definiuje tę akcję? Co dokładnie wykonuje?