
我運行的是 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 身分執行的 sctipt。 (我不想強行殺死進程,但想要正常的註銷提示)
進一步規格:-
我有要以 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
我創建了這個腳本,它可以從 gnome-session 環境設定 DBUS 會話變量,以防您想要登出其他使用者/會話:
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
}