
私は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
ユーザー 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
ルートとしてログアウトするにはどうすればいいですか?ルートとして実行されるスクリプトを入れたいので(強制的にプロセスを終了させたくはなく、通常のログアウトプロンプトを表示させたい)
さらなる仕様:-
ルートとして実行されるスクリプトがあります。
#! /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
ユーザーが既存の環境変数を保持することをセキュリティ ポリシーに示します。ユーザーに環境を保持する権限がない場合、セキュリティ ポリシーはエラーを返すことがあります。
いくつかのコマンドを 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 セッション変数を設定するこのスクリプトを作成しました。
コマンドラインから 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
}