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

要结束所有用户进程并将其发送回登录屏幕,您可以使用:

 kill -9 -1 

因为这里讨论的原因,不要以root身份运行它。

这可以使用gnome-session-quit命令完成。 它需要--force选项来禁止没有它的情况下出现的确认对话框。

与从X终端仿真器运行的应用程序不同,从TTY结束会话要求您附加DISPLAY变量以指示哪个X显示正在运行会话。 因此:

 DISPLAY=:0 gnome-session-quit --force 

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

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

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

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

请遵循takkat的建议 。 标准是Ctrl + Alt + Backspace

你也可以运行:

 $ sudo service lightdm restart 

其他方式,

 sudo pkill -u NameOftheUser 

要么

 sudo pkill x 

杀死所有用户。

真正的问题是必须设置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 } 

如果您在xubuntu会话或类似会话中,必须使用gnome会话命令的xfce4-session-logout,这就是您看到警告的原因

这对我来说最有效(使用xfce,lightdm和ssh):

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

要么

 $ sudo service lightdm restart 

您可以使用命令killall gnome-session注销。 这适用于所有GNOME会话,如果我没记错所有与GNOME相关的会话。 它会将您带回LightDM,以便您可以选择新的DE或新用户。 🙂