ログイン時にOpenbox DEを選択しましたが、システムはDEのロードに時間がかかりました。そこでCLIに切り替えました(Ctrl+Alt+F1)そしてシステムを再起動しました(しかし、システム全体を再起動するのではなく、GUIからログアウトしたかったです)。
私の質問は、CLIでコマンドを発行してGUIからログアウトし、別のDEを選択できるようにすることです。 (DEがハングするたびにシステムを再起動したくありません。)
$ DISPLAY=:0 gnome-session-quit --force
** (gnome-session-quit:3144): WARNING **: Failed to call logout: The name org.gnome.SessionManager was not provided by any .service files
これは、gnome-session-quit
コマンドを使用して実行できます。それなしで表示される確認ダイアログを抑制するには、--force
オプションが必要です。
X端末エミュレータから実行するアプリケーションとは異なり、TTYからセッションを終了するには、DISPLAY
変数を追加して、セッションを実行しているXディスプレイを示す必要があります。したがって:
DISPLAY=:0 gnome-session-quit --force
gNOMEを:0で実行していると仮定します。これは通常の状況の場合です。
GNOMEを実行しているUbuntu 12.04LTSでは、コマンド
"DISPLAY=:0 gnome-session-quit --logout --no-Prompt"
動作します。 「--force」引数は現在の更新レベルに存在しません]
別の方法、
Sudo pkill -u NameOftheUser
または
Sudo pkill x
すべてのユーザーを殺します。
実際の問題は、DBUSセッション変数を設定し、制御しようとしているセッションと一致する必要があることです。
他のユーザー/セッションをログアウトする場合に備えて、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
}
Xubuntuセッションなどを使用している場合は、gnomeセッションコマンドの代わりにxfce4-session-logoutを使用する必要があります。そのため、警告が表示されます。
これは私にとって最適なものです(xfce、lightdm、sshを使用):
$ DISPLAY=:0.0 xfce4-session-logout --logout
または
$ Sudo service lightdm restart
別の方法として、以下を使用してユーザーセッションを終了することができます。たとえば、メンテナンスを行う場合、rootユーザー以外のユーザーをログアウトするのに適しています。
loginctl | egrep -v "root|SESSION|listed" | awk '{print $1}' | xargs loginctl terminate-session