Estoy tratando de obtener un apagado / reinicio elegante en ArchLinux con GNOME Shell. Ahora, cuando solicito el apagado, se apaga inmediatamente sin dar tiempo a los programas abiertos para cerrar / guardar con gracia los archivos abiertos. Como resultado, cada vez que reinicio Chrome (por ejemplo), me dice que la sesión no se cerró correctamente, etc. Al leer en la web, aprendí que systemd al cerrar procesos, primero envía un mensaje SIGTERM
seguido por SIGKILL
si el proceso no se cierra dentro de un tiempo de espera determinado. Sin embargo, me doy cuenta de que en mi sistema SIGKILL
se envía inmediatamente después SIGTERM
y supongo que esta es la causa de la finalización de los programas no graciosos.
He encontrado alguna documentación que (si la leo correctamente) establece que el tiempo de espera antes del envío SIGKILL
se puede configurar por TimeoutStopSec=
opción. También el envío SIGKILL
también podría deshabilitarse por SendSIGKILL=
opción. Pero no puedo encontrar dónde configurar esas opciones ... ¿hay un archivo de configuraciones de apagado / reinicio de systemd donde pueda configurar esas opciones?
EDITAR:
Hice algunas pruebas y descubrí dos cosas interesantes:
- Si cierro manualmente Chrome de esta manera
killall -SIGTERM chrome
, no se quejará de que no se ha cerrado correctamente la próxima vez que lo inicie nuevamente. Si lo cierro asíkillall -SIGKILL chrome
, se quejará. Esto me dice que Chrome está manejando SIGTERM correctamente. - Mirando el resultado de mi procedimiento de apagado, systemd imprime
Sending SIGTERM...
inmediatamente seguido deSending SIGKILL...
Según el comentario a continuación, systemd está manejando sus procesos solamente. Entonces en mi caso GDM. Esto me dice que el problema podría ser:
- GDM no cierra sus procesos secundarios (por ejemplo, Chrome) correctamente (es decir, enviándoles SIGTERM)
- o systemd está enviando a GDM un mensaje SIGKILL a principios de no darle el tiempo para cerrar correctamente sus elementos secundarios.
¿Hay alguna manera de verificar / configurar cómo GDM realmente cierra a sus hijos?
fuente
systemd's
control,systemd
es decirpid 1
, pero Chrome se ejecuta fuera de su secuencia de comandos de envoltura en una subshell e invoca procesos secundarios después. Aún así, hará lo que sea necesario para eliminarlozygotes
siempre que su sistema esté configurado correctamente. ¿Estás usando una de esas soluciones de espacio temporal para Chrome que encontrarás recomendadas en la wiki de Arch?gnome-session
.Respuestas:
Para apagar su escritorio con gracia, es posible que necesite aumentar el
TimeoutStopSec=
GDM o cualquier otro administrador de pantalla que esté utilizando.fuente
Esto funcionó para mí en mi Arch Linux con Gnome 3.12. Resultó que puede estar relacionado con la configuración en
/etc/gdm/PostSession/Default
.Ejecute
sudo pacman -S wmctrl
para instalar wmctrl para la gestión de Windows.Cree un archivo ejecutable para cerrar todas las ventanas. Por ejemplo, lo puse
/home/[your_username]/bin/close-all-windows
con estos contenidos:Modifique
/etc/gdm/PostSession/Default
y agregue estos contenidos antes deexit 0
:Espero que esto funcione.
fuente
El script wmctrl de sorpass funciona bien para mí (en CentOS 7 solo tenía que ejecutar 'yum install wmctrl' primero). Sin embargo, descubrí que / etc / gdm / PostSession / Default solo parecía ejecutarse solo al cerrar sesión, no al apagarse. Por lo tanto, en lugar de usar / etc / gdm / PostSession / Default, ahora llamo al script wmctrl de sorpass del script python de Seamus Phelan que se puede encontrar en estos dos sitios:
Esta combinación de scripts funciona muy bien para cerrar Firefox, Chrome, etc. de forma automática y limpia cuando salgo o apago mi máquina de escritorio CentOS 7. Tenga en cuenta que con CentOS 7 debe ejecutar 'yum install gnome-python2-gnome' para que este script de Python funcione.
fuente