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


43

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

回答:


45

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

kill -9 -1

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


3
うまくいきますが、なぜですか?特に、init以外をすべて削除した後にLightDMが再起動するのはなぜですか?
Ciro Santilli新疆改造中心法轮功六四事件

1
@CiroSantilli巴拿馬文件六四事件法轮功それは強制的にすべて(9)を殺すために許可されています。つまり、あなたが所有するすべてのプロセスを意味します。SIGKILLを使用してアプリを終了することは絶対にお勧めできません!SIGTERM(15)を使用します。アプリケーションはこの信号に反応して、クリーンアップを実行できます。
-ManuelSchneid3r

22

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


おかげで、コマンドを実行しましたが、エラーが発生しました。エラーを含めるように投稿を編集しました。何か間違ったことをした場合は共有してください。
アンキット

私の悪いことに、あなたがあなたがopenboxを使用していると言ったことに気付きませんでした。残念ながら、このコマンドは標準のUbuntuインストール(Unity / GNOME)でのみ機能します。別の方法として、を実行してGUIを完全にシャットダウンし、それによってセッションをシャットダウンできますsudo service lightdm stop。編集:どのデスクトップ環境を使用していますか?Openboxは単なるウィンドウマネージャーです。
Cumulus007

私はkde / openboxまたはgnome / openboxを使用しようとしています。
アンキット

端末がgnome-sessionと同じdbusセッションに含まれていない場合は機能しません。どうすれば別のdbusセッションに入りますか?
ザンリンクス

これは、GUIで[ログアウト]をクリックすると実行されるコマンドですか?
ドール

7

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

以下も実行できます。

$ sudo service lightdm restart

1
gdmはlightdmに置き換えられました。また、ctrl + alt + backspaceはデフォルトで無効になっています。
Cumulus007

@ Cumulus007ありがとう、回答が更新されました。ctrl + alt + backspaceがデフォルトで無効になっていることは知っていますが、その理由はわかりませんが、知っています。OPに、標準で最も一般的に使用されるキーの組み合わせを通知しています。トラブルシューティングが容易になるため、標準に準拠することが最善であると思います。
テルドン

1
lightdmを停止すると、その後ログインプロンプトが表示されなくなり、別の環境にログインする機会がなくなります。
-poolie

1
@poolieで十分です、回答が更新されました。
テルドン

4

別の方法、

sudo pkill -u NameOftheUser

または

sudo pkill x

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


それは少し厳しいですよね?
アコライト

厳しい?非常にばかげています。
HörmannHH

2

実際の問題は、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
}

単にの代わりに--logout --no-promptまたはを使用する--forceことをお--logout勧めします。それ以外の場合は、ログアウトプロンプトが表示されます。
gioele

1

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


1

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

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

または

$ sudo service lightdm restart

0

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

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

-2

このコマンドkillall gnome-sessionを使用してログアウトできます。これはすべてのGNOMEセッションで機能し、GNOME関連のセッションすべてを正しく覚えていれば機能します。LightDMに戻るので、新しいDEまたは新しいユーザーを選択できます。:)


2
ログアウトする最良の方法ではありません。askubuntu.com/questions/69114/を
jokerdino

以前にこのオプションを見たことがない。おそらくこれを使い始めるべきでしょう。私はそれkillall gnome-sessionがそれを閉じるための強力な方法だと思います。
ライアンマクルーア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.