如何使用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

Answers:


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

假设您在:0上运行GNOME,在正常情况下就是这种情况。

  • 在运行GNOME的Ubuntu 12.04LTS中,命令

    "DISPLAY=:0 gnome-session-quit --logout --no-prompt" 
    

    作品。当前更新级别中不存在“ --force”参数]


谢谢,我运行了命令,但出现了一些错误。我已编辑我的帖子以包含错误。如果我做错了,请分享。
Ankit 2012年

不好意思,我没有注意到您提到您正在使用openbox。不幸的是,该命令仅适用于标准的Ubuntu安装(Unity / GNOME)。或者,您可以通过运行完全关闭GUI,从而完全关闭会话sudo service lightdm stop。编辑:您正在使用什么桌面环境?Openbox只是一个窗口管理器。
Cumulus007

我正在尝试使用kde / openbox或gnome / openbox。
Ankit 2012年

如果您的终端与gnome-session不在同一个dbus会话中,则无法使用。您如何进入另一个dbus会话?
Zan Lynx

通过GUI单击“注销...”时,是否执行该命令?
Dor

7

请遵循塔卡特的建议。标准是Ctrl+ Alt+ Backspace

您还可以运行:

$ sudo service lightdm restart

1
gdm已替换为lightdm。另外,默认情况下禁用ctrl + alt + backspace。
Cumulus007

@ Cumulus007谢谢,答案已更新。我知道ctrl + alt + backspace在默认情况下是禁用的,从不知道为什么,但是我知道它。我只是告诉OP什么是最常用的标准组合键。我发现最好坚持标准,因为这样可以更轻松地进行故障排除。
terdon

1
停止lightdm意味着之后将没有登录提示,因此他将没有机会登录到其他环境。
poolie 2012年

1
@poolie足够公平,答案已更新。
terdon


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是关闭它的有力方法。
Ryan McClure 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.