web-dev-qa-db-fra.com

gnome-session-quit pour se déconnecter ne fonctionne pas lorsqu'il est exécuté en tant que root avec sudo

J'utilise Ubuntu 14.04 et le nom d'utilisateur est pandya.

pandya@pandya-desktop:~$ gnome-session-quit

Lorsque la commande ci-dessus est exécutée sans étant Sudo (Sudo su) dans le terminal, il se déconnecte avec succès. enter image description here


Mais quand on court après Sudo (en tant que root),

root@pandya-desktop:/home/pandya# gnome-session-quit

Cela donne une erreur:

** (gnome-session-quit:3168): WARNING **: Failed to call logout: The name org.gnome.SessionManager was not provided by any .service files

Donc, parce que je suis root, j’essaie d’exécuter la commande avec Sudo -u pandya gnome-session-quit pour exécuter la commande en tant qu’utilisateur pandya. Mais cela donne la même erreur.

Ensuite, j'essaie de courir comme 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

Mais cela donne la même erreur.

Par conséquent, ma question est la suivante: Comment se déconnecter en tant que root? Parce que je veux mettre gnome-session-quit dans un sctipt qui doit être exécuté en tant que root. (Je ne veux pas tuer de force, mais je veux demander une déconnexion normale)


Spécifications supplémentaires: -

J'ai un script qui doit être exécuté en tant que root.

#! /bin/bash
....command to be executed.....
Sudo -u pandya gnome-session-quit
3
Pandya

Je ne suis pas tout à fait sûr de ce que vous essayez de faire, mais la raison pour laquelle la commande Sudo échoue est parce que vous avez démarré le serveur X en tant que pandya et n'exportez pas les variables d'environnement de Pandya qui vous permettent de: communiquer avec la session en cours Gnome.

Donc, cela vous permettra de tuer votre session Gnome:

Sudo -E -u pandya gnome-session-quit

De man Sudo:

-E, --preserve-env

Indique à la politique de sécurité que l'utilisateur souhaite conserver ses variables d'environnement existantes. La politique de sécurité peut renvoyer une erreur si l'utilisateur ne dispose pas de l'autorisation de préserver l'environnement.


Si vous voulez avoir un script qui exécute certaines commandes en tant que root et que vous voulez ensuite pouvoir vous déconnecter, vous pouvez le faire comme suit:

  1. Créez le script sans Sudo pour les commandes privilégiées mais avecSudo pour la déconnexion. Par exemple:

    #!/bin/bash
    
    apt-get install firefox
    Sudo -E -u pandya gnome-session-quit
    
  2. Exécutez le script avec Sudo -E:

    Sudo -E /path/to/script
    

Le Sudo -E script.sh garantit que vos variables env sont disponibles pour le script et le Sudo -E -u pandya s'assure qu'elles sont transmises à l'appel gnome-session-quit.

3
terdon

J'ai créé ce script qui définit les variables de session DBUS à partir de l'environnement gnome-session si vous souhaitez déconnecter d'autres utilisateurs/sessions:

Comment redémarrer Gnome-Shell en ligne de commande?

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
}
1
sehe