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

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

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

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


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

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 запустить команду как пользователь пандя. Но это дает ту же ошибку.

Затем я пытаюсь следовать за пандей:

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 в sctipt, который должен быть запущен от имени пользователя root. (Я не хочу принудительно завершать процесс, но хочу нормально выйти из системы)


Дальнейшая спецификация:-

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

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

2 ответа

Решение

Я не совсем уверен, что вы пытаетесь сделать, но причина 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 гарантирует, что ваши переменные env доступны для сценария и sudo -E -u pandya гарантирует, что они передаются gnome-session-quit вызов.

Я создал этот скрипт, который устанавливает переменные сеанса 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
}
Другие вопросы по тегам