如何从命令行重启GNOME Shell?

我想实现一个键盘快捷键,以便在崩溃时重启gnome-shell(目前还没有修复一些bug )。 为此,我需要一个命令行来重启shell。

当shell崩溃时, Alt + F2restart命令将不起作用,因为提示是 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并从那里运行。