Cosa succede quando premo "Shut Down" dalla GUI?


15

Ho sbattuto la testa contro questo per un po 'di tempo ormai. È legato a questa domanda . Vorrei scoprire esattamente cosa succede quando scelgo di chiudere il mio box Linux dalla GUI. Questo sembra essere scarsamente documentato (se non del tutto).

Idealmente, spero in una risposta agnostica tra DE e OS. A parte questo, sono interessato al caso specifico di Mandriva 2010.1 e Debian 6.x (Squeeze) e 7.0 (Wheezy) che eseguono tutti Gnome. (Se stai prestando molta attenzione, sì, questo è Gnome 2 e Gnome 3)

Fondamentalmente, vorrei sapere quale comando / script / sequenza di script viene avviato quando premo "Chiudi" o "Riavvia" in modo da poter modificare il loro comportamento. Alcuni post sul forum che ho visto suggeriscono l'hacking, /etc/polkit-1/*ma questa struttura di directory è solo uno scheletro sulla mia casella Debian (Squeeze), per esempio.

Qualcuno può aiutare?


MODIFICARE

Quello che ho provato finora

  • Sostituito l' shutdowneseguibile con una mia sceneggiatura. Questo non funziona: quando premo shutdownGnome esco senza eseguire il mio script.
  • Ho provato a modificare il menu di Gnome 2. Nessuna gioia: le opzioni "Spegni", "Disconnetti" e "Blocca schermo" non compaiono nell'editor di menu.
  • Guardato /usr/share/menu, niente di utile lì.

Possibili strade per la soluzione

  • stracele opzioni della GUI (è anche possibile?)
  • Guardando shutdownil codice sorgente
  • Guardando gnome-sessionil codice sorgente

Aggiornare

Secondo i miei commenti sulla risposta di seguito, ho esaminato le polkitazioni sotto /usr/share/polkit-1/actions/e ho trovato (nel file org.freedesktop.consolekit.policy) un'azione chiamata org.freedesktop.consolekit.system.stop-multiple-usersche lancia il messaggio

System policy prevents stopping the system when other users are logged in

Sto pensando (a causa della org.freedesktop.*convenzione di denominazione) che si tratta di una sorta di segnale inviato al DM tramite D-BUS. Inoltre, questo messaggio appare quando si tenta di arrestare graficamente mentre altri utenti sono connessi, quindi il meccanismo che lo attiva deve essere lo stesso meccanismo attivato quando si seleziona "Spegni" o "Spegni" dalla GUI.

Qualcuno può confermare / confutare? C'è la possibilità di intercettare in qualche modo questo segnale o modificarlo?


Cosa stai cercando di realizzare? È possibile aggiungere una modifica /etc/init.d/rc.localper chiamare uno script quando viene arrestato .
depquid

@depquid Quello che sto cercando di realizzare è nella mia domanda precedente a cui ho collegato: sto cercando di impedire a un utente che ha effettuato l'accesso locale di ostruire la sessione SSH di un altro utente.
Joseph R.,

Risposte:


9

Dipende dal tuo Display Manager! (es. KDM, GDM)

Tieni presente che il tuo DM funziona come root! (ha bisogno dei privilegi di root per eseguire il processo di sessione come l'utente al quale accedi)

Quando fai clic su shutdown in KDE o GNOME, il tuo DE invia un segnale al tuo DM per spegnerlo o riavviarlo al termine della sessione. Quindi, DE indica a tutti i programmi di terminare e una volta terminato (o scaduto un timeout) tutti gli altri processi, l'ultimo processo di DE - il processo di sessione - termina.

Il processo di sessione è il primo processo avviato in una sessione X11. Quando viene ucciso o termina, la sessione termina. Hai mai visto quel xterm quando esegui X senza DE? Questo è un processo di sessione. Questo processo è chiamato kdeinitin KDE e gnome-sessionin GNOME.

Una volta terminata la sessione, il controllo viene restituito al tuo DM (che era in attesa del termine del processo X) e controlla cosa gli ha detto di fare il DE. Se gli dicesse di spegnere o riavviare, lo farà. In altri casi, avvierà semplicemente una nuova schermata di accesso in X.

Questo è anche correlato a problemi che potresti aver avuto in passato, con alcuni DE che non sono stati in grado di spegnere o riavviare, solo per disconnettersi, se usati in combinazione con altri DM.

In ogni caso, questo non è così male documentato. GDM ha una pagina manuale di un comando che ti permette di dire di spegnerlo proprio come ho detto prima ( gdm-control). KDM ha anche un'ottima documentazione e ha un'utilità simile (un po 'più complessa) chiamata kdmctl.


L'arresto e il riavvio sono possibili senza PolicyKit, ma PolicyKit serve a molti scopi necessari al giorno d'oggi su sistemi come montare dischi senza essere root, sospendere o ibernare il computer. E non è neanche male documentato!

Dai un'occhiata a questo se vuoi saperne di più su cos'è PolicyKit e come funziona: http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html


Sembra promettente. Grazie per i collegamenti ai documenti. Non ho dubbi che questi manuali siano completi e chiari, ma potrebbero non esistere. La tua risposta è la prima volta che vedo il display manager menzionato insieme a questo problema, quindi non è esattamente conoscenza comune. Proverò questo e ti farò sapere ...
Joseph R.

OK. gdm-controlnon è stato d'aiuto. La documentazione fornita su PolicyKit sembra più promettente. Lo approfondirò e vedrò se posso implementare una regola personalizzata. Continua ...
Joseph R.

1
Ho fatto qualche lettura (scrematura, più simile) e per favore correggimi se sbaglio: il DE, quando viene richiesto di spegnerlo, invierà un messaggio al DM attraverso il polkit su D-BUS. In attesa di autenticazione, la sessione può essere terminata o la richiesta può essere revocata. Questo è definito in polkitun'azione chiamata org.freedesktop.consolekit.system.stop-multiple-usersin /usr/share/polkit-1/actionsÈ impostato per revocare la richiesta per gli utenti inattivi e auth_admin_keepper l'utente attivo. La domanda è: cosa definisce questa azione? Cosa esegue esattamente?
Joseph R.,

@don_crissti Questo ora capisco. Quello che mi interessa è proprio questo "segnale". Qual è il client che lo invia?
Joseph R.,

@don_crissti Vuoi spostare questo commento sull'altra mia domanda per un follow-up?
Joseph R.,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.