gnome-session-quit para cerrar sesión no funciona cuando se ejecuta como root con sudo

gnome-session-quit para cerrar sesión no funciona cuando se ejecuta como root con sudo

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. ingrese la descripción de la imagen aquí


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-quitejecutar 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-quitsctipt 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 sudocomando falla es porque inició el servidor X pandyay 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:

  1. Cree el script, sin sudolos comandos privilegiados perocon sudopara cerrar sesión. Por ejemplo:

    #!/bin/bash
    
    apt-get install firefox
    sudo -E -u pandya gnome-session-quit
    
  2. Ejecute el script con sudo -E:

    sudo -E /path/to/script
    

Esto sudo -E script.shgarantiza que sus variables env estén disponibles para el script y sudo -E -u pandyagarantiza que se pasen a la gnome-session-quitllamada.

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
}

información relacionada