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.
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
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:
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
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
.
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
}