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, а затем хочет, чтобы он мог выходить из вас, вы можете сделать это следующим образом:
Создать скрипт, без
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
гарантирует, что ваши переменные 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
}