如何从命令行重启GNOME Shell?


50

我想实现一个键盘快捷方式,以在此崩溃时重新启动gnome-shell(一些错误目前尚未修复)。为此,我需要一个命令行来重新启动外壳。

Alt+ F2restart当外壳崩溃,因为提示被实施命令将无法正常工作外壳。

因此,如何从命令行重新启动gnome-shell?


注意:Alt + F2和restart将停止所有正在运行的程序。(我仍然不知道如何在不停止程序的情况下重新启动GUI。)
Andriy Makukha,

Answers:


48

替换gnome-shell的命令为gnome-shell --replace

在以下页面的手册中gnome-shell

--replace             Replace the running window manager

2
谢谢,我不确定--replace=“重新启动”。
本杰明

4
从Ubuntu 18.10上的GNOME Shell 3.30.1开始,此解决方案不再起作用,并且会将用户踢到登录屏幕,从而失去了所有工作。现在正确的解决方案是命令行:“ killall -3 gnome-shell”,或者ALT + f2和r(如果可能)。
C.Rogers

1
ALT+f2(显示命令提示符)+ gnome-shell --replace将在18.04中很好地工作。所有正在运行的程序都不会停止。
lifeisfoo

我将&符添加到命令的末尾以将进程置于后台,以便我可以关闭终端而不杀死gnome-shell:gnome-shell --replace &
Teddy

31

最简单的方法是Alt+ F2r然后键入


5
没错,但这不是问题。然后的问题是:这样做时会发生什么。所以,你可以自己做
sehe

4
从Ubuntu 18.10上的GNOME Shell 3.30.1开始,命令行:“ killall -3 gnome-shell”是这里发布的唯一可行的解​​决方案。其他所有用户都将用户踢出登录屏幕,从而失去了所有工作。
C.Rogers

1
在Debian Buster上尝试过此方法。出现“在Wayland上无法重新启动”错误。
livinston

26

您也可以做一个killall -3 gnome-shell


2
我不知道为什么人们会继续推荐此命令。这一切都是杀死gnome-shell。您如何回答重新启动的问题?
smac89 '18

1
可能是因为这是另一个命令不起作用的很好的解决方案。我都尝试过,选择的一个很好,但是并不能解决我的问题,尽管这样做。
Mitro

2
从Ubuntu 18.10开始,GNOME Shell 3.30.1-这是正确的解决方案。所有其他解决方案都将重新启动会话,并将用户踢出登录屏幕,从而失去所有工作。
C.Rogers

3
SIGQUIT(3)不会
终止

这似乎对我有用。而我以前使用gnome-shell --replace &过。它工作了,但是一直在终端上运行。我遇到的问题是全屏显示Youtube视频,导致Dash-to-Dock和面板冻结关闭。github.com/micheleg/dash-to-dock/issues/...
Natetronn

5

该命令应为gnome-shell --replace


3
从Ubuntu 18.10上的GNOME Shell 3.30.1开始,此解决方案不再起作用,并且会将用户踢到登录屏幕,从而失去了所有工作。现在正确的解决方案是命令行:“ killall -3 gnome-shell”,或者ALT + f2和r(如果可能)。
C.Rogers

在远程会话中不起作用,因此当gnome shell冻结时,这将不起作用。
Jack Wasey

5

如果整个都gnome-shell冻结了,有一种方法可以在不重新启动整个X窗口的情况下从终端重新启动它:

  • Ctrl+ Alt+ F2切换到终端
  • 使用您的凭据(用户名和密码)登录,然后运行:
  • DISPLAY=:0 gnome-shell -r &
  • 注销exit
  • Alt+ F1切换回图形界面X窗口。

1

我想出了此功能来注销用户(请参阅底部)

它假设

  • 你有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
}

1

我定义了一个别名: alias gnomeshellrestart='echo "gnome-shell --replace -d" $(w| grep "$USER"| awk "{print \$3}"|grep ":"|head -1)| at now'

您可能可以通过在背景上用鼠标右键单击并在其中键入内容来启动终端(alt-tab也为dysfct),否则,请使用ctrl-alt-F2登录tty并从那里运行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.