Co się stanie po naciśnięciu przycisku „Zamknij” z GUI?


15

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 shutdownplik wykonywalny własnym skryptem. To nie działa: kiedy naciskam shutdownGnome 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

  • stracew opcjach GUI (czy to w ogóle możliwe?)
  • Patrząc na shutdownkod źródłowy
  • Patrząc na gnome-sessionkod źródłowy

Aktualizacja

Zgodnie z moimi komentarzami do odpowiedzi poniżej, przejrzałem polkitakcje 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-usersktó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?


Co próbujesz osiągnąć Możesz dodać edycję, /etc/init.d/rc.localaby wywołać skrypt podczas zatrzymywania .
depquid

@depquid Staram się osiągnąć w moim starszym pytaniu, do którego odsyłam: staram się uniemożliwić lokalnie zalogowanemu użytkownikowi zablokowanie sesji SSH innego użytkownika.
Joseph R.

Odpowiedzi:


9

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 kdeinitw KDE i gnome-sessionGNOME.

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 nazwie kdmctl.


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


Brzmi obiecująco. Dzięki za linki do dokumentów. Nie mam wątpliwości, że te instrukcje są wyczerpujące i przejrzyste, ale równie dobrze mogłyby nie istnieć. Twoja odpowiedź po raz pierwszy widziałem menedżera wyświetlania wspomnianego w związku z tym problemem, więc nie jest to powszechnie znana wiedza. Spróbuję tego i dam wam znać ...
Joseph R.

DOBRZE. gdm-controlnie 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 ...
Joseph R.

1
Zrobiłem trochę czytania (przeglądanie, bardziej podobne) i poprawcie mnie, jeśli się mylę: DE, gdy zostanie poproszony o zamknięcie, wyśle ​​wiadomość do DM za pośrednictwem polkit na D-BUS. Do czasu uwierzytelnienia sesja może zostać zakończona lub żądanie może zostać odwołane. Jest to zdefiniowane w polkitakcji o nazwie org.freedesktop.consolekit.system.stop-multiple-usersw /usr/share/polkit-1/actionsUstawiono w celu odwołania żądania dla nieaktywnych użytkowników i auth_admin_keepdla aktywnego użytkownika. Pytanie brzmi, co definiuje tę akcję? Co dokładnie wykonuje?
Joseph R.

@don_crissti Tyle rozumiem teraz. Interesuje mnie właśnie ten „sygnał”. Jaki klient wysyła?
Joseph R.

@don_crissti Chcesz przenieść ten komentarz do mojego innego pytania w celu kontynuacji?
Joseph R.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.