如何使用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或新用户。 🙂