Я запускаю 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
Так, из-за того, чтобы быть корнем я пробую к рабочей команде 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
Я не совсем уверен, что Вы пытаетесь сделать только причина sudo
команда перестала работать, то, потому что Вы запустили X-сервер как pandya
и не экспортируют переменные среды pandya, которые позволяют Вам общаться с рабочей сессией Gnome.
Так, это позволит Вам уничтожать свою сессию Gnome:
sudo -E -u pandya gnome-session-quit
От man sudo
:
- E, - сохранять-ENV
Указывает к политике безопасности, что пользовательские пожелания пред ‐ служат своим существующим переменным среды. Политика безопасности может возвратить ошибку, если у пользователя нет permis ‐ Сьоном для сохранения среды.
Если Вы хотите иметь сценарий, который выполняет некоторые команды как корень, и затем хотят, чтобы это смогло зарегистрировать Вас, можно сделать это следующим образом:
Создайте сценарий, без sudo
для привилегированных команд, но с sudo
для выхода из системы. Например:
#!/bin/bash
apt-get install firefox
sudo -E -u pandya gnome-session-quit
Запустите скрипт с sudo -E
:
sudo -E /path/to/script
sudo -E script.sh
гарантирует, что Ваши огибающие переменные доступны сценарию и sudo -E -u pandya
гарантирует, что они передаются gnome-session-quit
звонить.
Я создал этот сценарий, который действительно устанавливает переменные сеанса 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
}