gnome-session-quit zum Abmelden funktioniert nicht, wenn es als Root mit sudo ausgeführt wird

gnome-session-quit zum Abmelden funktioniert nicht, wenn es als Root mit sudo ausgeführt wird

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. Bildbeschreibung hier eingeben


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-quitals 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-quitein 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 sudoFehlschlagen des Befehls liegt darin, dass Sie den X-Server gestartet haben pandyaund 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:

  1. Erstellen Sie das Skript, ohne sudodie privilegierten Befehle, abermit sudofür die Abmeldung. Beispiel:

    #!/bin/bash
    
    apt-get install firefox
    sudo -E -u pandya gnome-session-quit
    
  2. Führen Sie das Skript mit folgendem Befehl aus sudo -E:

    sudo -E /path/to/script
    

Dadurch sudo -E script.shwird sichergestellt, dass Ihre Umgebungsvariablen dem Skript zur Verfügung stehen und sudo -E -u pandyadass 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
}

verwandte Informationen