重新启动 GNOME 而不重新启动 Xorg?

重新启动 GNOME 而不重新启动 Xorg?

有时会发生某些应用程序崩溃并使 Gnome 桌面不稳定的情况,例如上方的栏消失。通过重新启动 X ctrl+shift+backspace 我可以重置它。但有没有办法完全重新启用 Bar 或 Gnome?

答案1

您应该能够重新启动 Gnome

 gnome-shell --replace

从手册:

DESCRIPTION
   GNOME Shell provides core user interface functions for the GNOME 3 desktop,
   like switching to windows and launching  applications.  GNOME  Shell  takes
   advantage  of  the  capabilities of modern graphics hardware and introduces
   innovative user interface concepts to provide  a  visually  attractive  and
   easy to use experience.

OPTIONS
   --replace
          Replace the running window manager

答案2

您可以按 Alt-F2 (IIRC) 打开一个可以键入命令的窗口。除了常规命令之外,GNOME Shell 还支持一些自定义命令来控制桌面环境的行为。在这种情况下,您需要restart,它会重新启动 Shell,而不是计算机。

如果崩溃太多而无法正常工作,请使用特登的回答

答案3

TL;DR,如果您无法从 GUI 执行此操作,只需以同一用户身份登录(文本控制台、ssh 等)并输入:

eval "$(while read -d $'\0' line; do printf 'export %q\n' "$line"; done </proc/$(pgrep -fu$USER gnome-session-binary)/environ)"
gnome-shell --replace >.xsession-errors 2>&1 &

我经常通过文本控制台进行此操作。您可以使用CTRL+ ALT+ where切换到其他控制台Fnn是一个免费的控制台号码,通常从登录屏幕开始F3F1并且F2是第一个会话。

它显然不适用于韦兰因为 gnome-shell 不支持重新启动。


详细解答:

诀窍是复制所需的环境gnome shell- 我还没有确切地验证需要什么,但至少你需要DISPLAY等等XAUTHORITYgnome shell可以连接到X服务器,然后很可能需要一些额外的gnome shell及其扩展。

进程树应该看起来有点像这样:

      |            |-gdm-session-wor(6444)-+-gdm-x-session(6464)-+-Xorg(6466)-+-{InputThread}(6472)
      |            |                       |                     |            `-{radeon_cs:0}(6467)
      |            |                       |                     |-gnome-session-b(6475)-+-evolution-alarm(6712)-+-{dconf worker}(6789)
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |            |                       |                     `-{gmain}(6465)
      |            |                       |-{gdbus}(6446)
      |            |                       `-{gmain}(6445)

在这个例子中gnome 会话二进制文件(pid 6475) 是所有 gnome 会话进程的父进程,因此我用它来获取环境。如果我们gnome-shell直接使用,我们会看到 gnome-shell 本身为其子进程设置了更多变量。

我用来pgrep返回PID该进程仅适用于当前用户(即使有多个用户登录,也应该始终只有一个 pid;如果您成功登录两次,则出现了严重错误)。

然后我从(空分隔的环境变量列表)中读取该任务的environ文件,并在所有行前面加上.然后这些命令通过 反馈到我的 shell 。/proc/<PID>/exporteval

此时,我可以gnome-shell --replace像在 GUI 会话中那样运行。如果您打算保持该外壳打开,您可能需要重定向标准输出标准错误错误率某处也有;你可以将它发送到,/dev/null但我喜欢保留它以防万一(.xsession-errors是遗留文件 X 用于将所有 GUI 输出发送到;我相信在现代系统上系统或者日志捕获所有输出并记录它)。

答案4

您可以使用 root 身份重新启动 gnome:

services gdm restart

相关内容