
Estoy ejecutando Ubuntu 14.04 y el nombre de usuario es pandya.
pandya@pandya-desktop:~$ gnome-session-quit
Cuando se ejecuta el comando anteriorsinal ser sudo ( sudo su
) en la terminal, se cierra la sesión correctamente.
Pero cuando se ejecuta después de sudo (como root),
root@pandya-desktop:/home/pandya# gnome-session-quit
Da error:
** (gnome-session-quit:3168): WARNING **: Failed to call logout: The name org.gnome.SessionManager was not provided by any .service files
Entonces, debido a que soy root, intento ejecutar el comando para sudo -u pandya gnome-session-quit
ejecutar el comando como usuario pandya. Pero da el mismo error.
Luego intento seguir para ejecutar como pandya:
root@pandya-desktop:/home/pandya# su pandya
pandya@pandya-desktop:~$ gnome-session-quit
** (gnome-session-quit:3269): WARNING **: Failed to call logout: The name org.gnome.SessionManager was not provided by any .service files
Pero da el mismo error.
Por lo tanto, mi pregunta es:¿Cómo cerrar sesión como root? Porque quiero poner gnome-session-quit
sctipt que se ejecutará como root. (No quiero cerrar el proceso a la fuerza, pero quiero cerrar sesión normalmente)
Especificaciones adicionales: -
Tengo un script que debe ejecutarse como root.
#! /bin/bash
....command to be executed.....
sudo -u pandya gnome-session-quit
Respuesta1
No estoy del todo seguro de lo que está intentando hacer, pero la razón por la que el sudo
comando falla es porque inició el servidor X pandya
y no está exportando las variables de entorno de Pandya que le permiten comunicarse con la sesión de Gnome en ejecución.
Entonces, esto te permitirá finalizar tu sesión de Gnome:
sudo -E -u pandya gnome-session-quit
De man sudo
:
-E, --preserve-env
Indica a la política de seguridad que el usuario desea preservar sus variables de entorno existentes. La política de seguridad puede devolver un error si el usuario no tiene permiso para preservar el medio ambiente.
Si desea tener un script que ejecute algunos comandos como root y luego desea que pueda cerrar su sesión, puede hacerlo de la siguiente manera:
Cree el script, sin
sudo
los comandos privilegiados peroconsudo
para cerrar sesión. Por ejemplo:#!/bin/bash apt-get install firefox sudo -E -u pandya gnome-session-quit
Ejecute el script con
sudo -E
:sudo -E /path/to/script
Esto sudo -E script.sh
garantiza que sus variables env estén disponibles para el script y sudo -E -u pandya
garantiza que se pasen a la gnome-session-quit
llamada.
Respuesta2
Creé este script que configura las variables de sesión DBUS desde el entorno de sesión gnome en caso de que desee cerrar sesión en otros usuarios/sesiones:
¿Cómo reiniciar Gnome-Shell desde la línea de comando?
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
}