Se me ocurrió esta función para cerrar la sesión de los usuarios (ver al final)
Asume
- tienes permisos de sudo
- tienes bash
- los usuarios tienen 1 sesión X en ejecución (aunque debería poder emitir el mismo comando de cierre de sesión varias veces para deshacerse de las sesiones restantes)
Puedes darle múltiples nombres de usuario:
logout john jane mike elisa
Y puedes darle opciones adicionales:
logout john --force
Entonces, tengo la siguiente función auxiliar:
function forcelogout() {
logout "$@" --no-prompt --force
}
Notas:
- Este es un instrumento contundente y funciona simplemente copiando todo el entorno de sesión. Esto podría ser más selectivo.
- A veces, cerrar sesión parece demorar
- En raras ocasiones, la sesión se sigue informando hasta que alguien visita el vt donde se ejecutó la sesión, pero ya no hay nada)
CÓDIGO
function logout() {
local USERNAME
export USERNAMES=( )
while [ -n "$1" ]; do case "$1" in
-* ) break ;;
*) USERNAMES+=( "$1" ); shift ;;
esac; done
for USERNAME in "${USERNAMES[@]}"; do
local SESSION_PID=$(pgrep -fu "$USERNAME" gnome-session|head -1)
if [ -n "$SESSION_PID" ]; then
(
sudo -u "$USERNAME" cat "/proc/$SESSION_PID/environ" | xargs -0 -n 1 echo export
echo "gnome-session-quit --logout $@"
) | sudo -u "$USERNAME" sh -;
fi
done
}
restart
detendrá todos los programas en ejecución. (Todavía no sé cómo reiniciar la GUI sin detener los programas).