gnome-session-quit для выхода из системы не работает при запуске от имени root с помощью sudo

gnome-session-quit для выхода из системы не работает при запуске от имени root с помощью sudo

Я использую Ubuntu 14.04 и имя пользователя — pandya.

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

При выполнении вышеуказанной командыбезпри использовании sudo ( sudo su) в терминале происходит успешный выход из системы. введите описание изображения здесь


Но при запуске после sudo (как root),

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

Выдает ошибку:

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

Итак, будучи пользователем root, я пытаюсь запустить команду с помощью sudo -u pandya gnome-session-quitдля запуска команды как пользователь pandya. Но он выдает ту же ошибку.

Затем я пробую выполнить следующее, чтобы запустить как 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

Но выдает ту же ошибку.

Поэтому мой вопрос:Как выйти из системы как root? Потому что я хочу вставить gnome-session-quitскрипт, который будет запущен как root. (Я не хочу принудительно завершать процесс, а хочу получить нормальное приглашение к выходу из системы)


Дополнительные характеристики:-

У меня есть скрипт, который нужно запустить от имени пользователя root.

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

решение1

Я не совсем уверен, что вы пытаетесь сделать, но причина, по которой команда sudoне выполняется, заключается в том, что вы запустили X-сервер как pandyaи не экспортируете переменные среды pandya, которые позволяют вам взаимодействовать с запущенным сеансом Gnome.

Итак, это позволит вам завершить сеанс Gnome:

sudo -E -u pandya gnome-session-quit

От man sudo:

-E, --preserve-env

Указывает политике безопасности, что пользователь желает сохранить существующие переменные среды. Политика безопасности может вернуть ошибку, если у пользователя нет разрешения на сохранение среды.


Если вам нужен скрипт, который запускает некоторые команды от имени пользователя root, а затем хочет, чтобы он мог вывести вас из системы, вы можете сделать это следующим образом:

  1. Создайте скрипт, без sudoпривилегированных команд, нос sudoдля выхода из системы. Например:

    #!/bin/bash
    
    apt-get install firefox
    sudo -E -u pandya gnome-session-quit
    
  2. Запустите скрипт с помощью sudo -E:

    sudo -E /path/to/script
    

Это sudo -E script.shгарантирует, что переменные окружения будут доступны скрипту, а также sudo -E -u pandyaгарантирует, что они будут переданы в gnome-session-quitвызов.

решение2

Я создал этот скрипт, который устанавливает переменные сеанса DBUS из среды gnome-session на случай, если вы захотите выйти из других пользователей/сеансов:

Как перезапустить Gnome-Shell из командной строки?

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
}

Связанный контент