He estado golpeando mi cabeza contra esto por bastante tiempo. Está relacionado con esta pregunta . Me gustaría saber exactamente qué sucede cuando elijo cerrar mi caja de Linux desde la GUI. Esto parece estar mal documentado (si es que lo está).
Idealmente, espero una respuesta independiente de SO y SO. Salvo eso, estoy interesado en el caso específico de Mandriva 2010.1 y Debian 6.x (Squeeze) y 7.0 (Wheezy) que ejecutan Gnome. (Si estás prestando mucha atención, sí, eso es Gnome 2 y Gnome 3)
Básicamente, me gustaría saber qué comando / secuencia de comandos / secuencia de secuencias de comandos se inicia cuando presiono "Apagar" o "Reiniciar" para poder modificar su comportamiento. Algunas publicaciones en el foro que vi sugieren piratería, /etc/polkit-1/*
pero esta estructura de directorio es solo un esqueleto en mi cuadro de Debian (Squeeze), por ejemplo.
¿Alguien puede ayudar?
EDITAR
Lo que he intentado hasta ahora
- Reemplacé el
shutdown
ejecutable con un script propio. Esto no funciona: cuando presionoshutdown
Gnome cierra la sesión sin ejecutar mi script. - Intenté editar el menú de Gnome 2. Sin alegría: las opciones "Apagar", "Cerrar sesión" y "Bloquear pantalla" no aparecen en el editor de menús.
- Visto
/usr/share/menu
, nada útil allí.
Posibles vías para la solución
strace
ing las opciones de GUI (¿es esto posible?)- Mirando
shutdown
el código fuente - Mirando
gnome-session
el código fuente
Actualizar
Según mis comentarios sobre la respuesta a continuación, busqué polkit
acciones debajo /usr/share/polkit-1/actions/
y encontré (en el archivo org.freedesktop.consolekit.policy
) una acción llamada org.freedesktop.consolekit.system.stop-multiple-users
que arroja el mensaje
System policy prevents stopping the system when other users are logged in
Estoy pensando (debido a la org.freedesktop.*
convención de nomenclatura) que se trata de algún tipo de señal enviada al DM a través de D-BUS. Además, este mensaje aparece cuando se intenta cerrar gráficamente mientras otros usuarios están conectados, por lo que el mecanismo que lo activa debe ser el mismo que se activa cuando se selecciona "Apagar" o "Apagar" desde la GUI.
¿Alguien puede confirmar / refutar? ¿Existe la posibilidad de interceptar de alguna manera esta señal o modificarla?
/etc/init.d/rc.local
para llamar a un script cuando se detenga .Respuestas:
Depende de su Administrador de pantalla! (es decir, KDM, GDM)
¡Tenga en cuenta que su DM se ejecuta como root! (necesita privilegios de root para ejecutar su proceso de sesión como el usuario que inicia sesión)
Cuando hace clic en apagar en KDE o GNOME, su DE envía una señal a su DM para que se apague o reinicie después de que la sesión haya finalizado. Luego, su DE le dice a cada programa que finalice y una vez que todos los demás procesos han finalizado (o expirado un tiempo de espera), el último proceso de su DE - el proceso de sesión - finaliza.
El proceso de sesión es el primer proceso iniciado en una sesión X11. Cuando se elimina o finaliza, la sesión finaliza. ¿Alguna vez has visto ese xterm cuando ejecutas X sin DE? Ese es un proceso de sesión. Este proceso se llama
kdeinit
en KDE ygnome-session
en GNOME.Una vez que la sesión ha finalizado, el control se devuelve a su DM (que ha estado esperando que finalice el proceso X), y verifica lo que el DE le dijo que hiciera. Si le indica que se apague o reinicie, lo hará. En otro caso, solo comenzará una nueva pantalla de inicio de sesión en X.
Esto también está relacionado con problemas que puede haber tenido en el pasado, ya que algunos DE no pueden apagarse o reiniciarse, solo para desconectarse, cuando se usan en combinación con otros DM.
En cualquier caso, esto no está tan mal documentado. GDM tiene una página manual de un comando que le permite decirle que se apague como dije antes (
gdm-control
). KDM también tiene una excelente documentación y tiene una utilidad similar (un poco más compleja) llamadakdmctl
.El apagado y el reinicio son posibles sin PolicyKit, pero PolicyKit sirve para muchos propósitos necesarios en los sistemas actuales, como montar discos sin ser root, suspender o hibernar la computadora. ¡Y tampoco está mal documentado!
Echa un vistazo a esto si quieres saber más sobre qué es PolicyKit y cómo funciona: http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html
fuente
gdm-control
No fue de ayuda. La documentación que proporcionó en PolicyKit parece más prometedora. Investigaré eso y veré si puedo implementar una regla personalizada. Continuará ...polkit
acción llamadaorg.freedesktop.consolekit.system.stop-multiple-users
en/usr/share/polkit-1/actions
Se establece para revocar la solicitud para usuarios inactivos yauth_admin_keep
para el usuario activo. La pregunta es, ¿qué define esta acción? ¿Qué se ejecuta exactamente?