
Ich verwende Ubuntu 14.04 und der Benutzername ist pandya.
pandya@pandya-desktop:~$ gnome-session-quit
Wenn der obige Befehl ausgeführt wirdohneMit sudo ( sudo su
) im Terminal wird die Abmeldung erfolgreich durchgeführt.
Aber wenn man nach sudo (als Root) läuft,
root@pandya-desktop:/home/pandya# gnome-session-quit
Es gibt einen Fehler:
** (gnome-session-quit:3168): WARNING **: Failed to call logout: The name org.gnome.SessionManager was not provided by any .service files
Da ich Root bin, versuche ich, den Befehl sudo -u pandya gnome-session-quit
als Benutzer „Pandya“ auszuführen. Aber es tritt derselbe Fehler auf.
Dann versuche ich Folgendes, um es als Pandya auszuführen:
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
Es tritt jedoch derselbe Fehler auf.
Daher lautet meine Frage:Wie melde ich mich als Root ab? Ich möchte nämlich gnome-session-quit
ein Skript einfügen, das als Root ausgeführt werden soll.. (Ich möchte den Prozess nicht zwangsweise beenden, sondern eine normale Abmeldeaufforderung erhalten.)
Weitere Spezifikation: -
Ich habe ein Skript, das als Root ausgeführt werden soll.
#! /bin/bash
....command to be executed.....
sudo -u pandya gnome-session-quit
Antwort1
Ich bin nicht ganz sicher, was Sie versuchen, aber der Grund für das sudo
Fehlschlagen des Befehls liegt darin, dass Sie den X-Server gestartet haben pandya
und die Umgebungsvariablen von Pandya, die Ihnen die Kommunikation mit der laufenden Gnome-Sitzung ermöglichen, nicht exportieren.
So können Sie Ihre Gnome-Sitzung beenden:
sudo -E -u pandya gnome-session-quit
Aus man sudo
:
-E, --preserve-env
Gibt der Sicherheitsrichtlinie an, dass der Benutzer seine vorhandenen Umgebungsvariablen beibehalten möchte. Die Sicherheitsrichtlinie gibt möglicherweise einen Fehler zurück, wenn der Benutzer keine Berechtigung zum Beibehalten der Umgebung hat.
Wenn Sie ein Skript haben möchten, das einige Befehle als Root ausführt und Sie anschließend abmelden soll, können Sie dies wie folgt tun:
Erstellen Sie das Skript, ohne
sudo
die privilegierten Befehle, abermitsudo
für die Abmeldung. Beispiel:#!/bin/bash apt-get install firefox sudo -E -u pandya gnome-session-quit
Führen Sie das Skript mit folgendem Befehl aus
sudo -E
:sudo -E /path/to/script
Dadurch sudo -E script.sh
wird sichergestellt, dass Ihre Umgebungsvariablen dem Skript zur Verfügung stehen und sudo -E -u pandya
dass sie an den Aufruf weitergegeben werden gnome-session-quit
.
Antwort2
Ich habe dieses Skript erstellt, das die DBUS-Sitzungsvariablen aus der Gnome-Sitzungsumgebung festlegt, falls Sie andere Benutzer/Sitzungen abmelden möchten:
Wie starte ich Gnome-Shell über die Befehlszeile neu?
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
}