如何从命令行重启GNOME Shell?
我想实现一个键盘快捷键,以便在崩溃时重启gnome-shell(目前还没有修复一些bug )。 为此,我需要一个命令行来重启shell。
当shell崩溃时, Alt + F2和restart
命令将不起作用,因为提示是在 shell中实现的。
那么,如何从命令行重启gnome-shell?
替换gnome-shell的命令是gnome-shell --replace
。
从gnome-shell
的手册页:
--replace Replace the running window manager
最简单的方法是按Alt + F2并键入r
然后键入↵ 。
该命令应该只是gnome-shell --replace
。
你也可以做一个killall -3 gnome-shell
。
如果整个gnome-shell
被冻结,有一种方法如何从终端重新启动它而不重新启动整个X窗口:
- 按Ctrl + Alt + F2切换到终端
- 使用您的凭据(用户名和密码)登录,然后运行:
-
DISPLAY=:0 gnome-shell -r &
-
exit
和 - Alt + F1切换回图形界面X Window。
我想出了这个function来注销用户(见底部)
它假定
- 你有sudo权限
- 你有打击
- 用户有1个正在运行的X会话(尽管您应该能够多次发出相同的注销命令以摆脱剩余的会话)
你可以给它多个用户名:
logout john jane mike elisa
你可以给它额外的选择:
logout john --force
所以,我有以下辅助函数:
function forcelogout() { logout "$@" --no-prompt --force }
笔记:
- 这是一种生硬的工具,只需复制整个会话环境即可。 这可能更具选择性。
- 有时注销似乎需要一段时间
- 在极少数情况下会话会一直被报告,直到有人访问会话运行的vt,但不再有任何内容)
码
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 }
我定义了一个别名: alias gnomeshellrestart='echo "gnome-shell --replace -d" $(w| grep "$USER"| awk "{print \$3}"|grep ":"|head -1)| at now'
alias gnomeshellrestart='echo "gnome-shell --replace -d" $(w| grep "$USER"| awk "{print \$3}"|grep ":"|head -1)| at now'
您可以通过在背景上右键单击鼠标来启动终端并在那里键入(alt-tab也是不好的),如果没有,请使用例如ctrl-alt-F2登录到tty并从那里运行。