выход сессии гнома, чтобы выйти из системы не работает, когда выполнено корнем с sudo

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

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

Когда выше команды, выполненной, не будучи sudo (sudo su) в терминале это успешно выходит из системы. enter image description here


Но когда бегущий 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

Так, из-за того, чтобы быть корнем я пробую к рабочей команде sudo -u pandya gnome-session-quit к команде выполнения как пользователь pandya. Но это дает ту же ошибку.

Затем я пробую follwing для выполнения как 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

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

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


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

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

#! /bin/bash
....command to be executed.....
sudo -u pandya gnome-session-quit
3
задан 10 May 2014 в 18:20

2 ответа

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

Так, это позволит Вам уничтожать свою сессию Gnome:

sudo -E -u pandya gnome-session-quit

От man sudo:

- E, - сохранять-ENV

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


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

  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 звонить.

3
ответ дан 17 November 2019 в 20:23

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

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

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
}
1
ответ дан 17 November 2019 в 20:23

Другие вопросы по тегам:

Похожие вопросы: