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