web-dev-qa-db-ja.com

CLIを使用してGUIからログアウトするにはどうすればよいですか?

ログイン時に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
42
Ankit

すべてのユーザープロセスを終了してログイン画面に送り返すには、次を使用できます。

kill -9 -1

ただし、 here で説明されている理由により、rootとして実行しないでください。

45
mblasco

これは、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」引数は現在の更新レベルに存在しません]

19
Cumulus007

takkatの提案 に従ってください。標準は Ctrl+Alt+Backspace

以下も実行できます。

$ Sudo service lightdm restart
7
terdon

別の方法、

Sudo pkill -u NameOftheUser

または

Sudo pkill x

すべてのユーザーを殺します。

4
Suhaib

実際の問題は、DBUSセッション変数を設定し、制御しようとしているセッションと一致する必要があることです。

他のユーザー/セッションをログアウトする場合に備えて、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
}
2
sehe

Xubuntuセッションなどを使用している場合は、gnomeセッションコマンドの代わりにxfce4-session-logoutを使用する必要があります。そのため、警告が表示されます。

1
Sergio Abreu

これは私にとって最適なものです(xfce、lightdm、sshを使用):

$ DISPLAY=:0.0 xfce4-session-logout --logout

または

$ Sudo service lightdm restart
1
pascalv

別の方法として、以下を使用してユーザーセッションを終了することができます。たとえば、メンテナンスを行う場合、rootユーザー以外のユーザーをログアウトするのに適しています。

loginctl | egrep -v "root|SESSION|listed" | awk '{print $1}' | xargs loginctl terminate-session