
저는 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로 명령을 실행하기 위해 명령을 실행하려고 합니다. 하지만 같은 오류가 발생합니다.
그런 다음 다음과 같이 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
답변1
무엇을 하려는지 완전히 확신할 수 없지만 sudo
명령이 실패하는 이유는 X 서버를 시작했지만 pandya
실행 중인 Gnome 세션과 통신할 수 있는 pandya의 환경 변수를 내보내지 않았기 때문입니다.
따라서 Gnome 세션을 종료할 수 있습니다.
sudo -E -u pandya gnome-session-quit
에서 man sudo
:
-E, --preserve-env
사용자가 기존 환경 변수를 보존하려는 보안 정책을 나타냅니다. 사용자에게 환경 보존 권한이 없는 경우 보안 정책에서 오류가 반환될 수 있습니다.
일부 명령을 루트로 실행한 후 로그아웃할 수 있도록 하는 스크립트를 원하는 경우 다음과 같이 할 수 있습니다.
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
.
답변2
다른 사용자/세션을 로그아웃하려는 경우를 대비하여 gnome-session 환경에서 DBUS 세션 변수를 설정하는 이 스크립트를 만들었습니다.
명령줄에서 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
}