Wie starte ich GNOME Shell von der Kommandozeile aus neu?


50

Ich möchte eine Tastenkombination implementieren, um die Gnome-Shell bei jedem Absturz neu zu starten ( einige Fehler sind derzeit noch nicht behoben). Dafür bräuchte ich eine Kommandozeile, um die Shell neu zu starten.

Der Befehl Alt+ F2und restartfunktioniert nicht, wenn die Shell abstürzt, da die Eingabeaufforderung in der Shell implementiert ist .

Also, wie starte ich die Gnome-Shell von der Kommandozeile aus neu?


HINWEIS: Alt + F2 und restartstoppt alle laufenden Programme. (Ich weiß immer noch nicht, wie ich die GUI neu starten kann, ohne die Programme zu stoppen.)
Andriy Makukha

Antworten:


48

Der Befehl zum Ersetzen der Gnom-Shell wäre gnome-shell --replace.

Von der Manualseite von gnome-shell:

--replace             Replace the running window manager

2
Danke, ich war mir nicht sicher --replace= "Neustart".
Benjamin

4
Ab GNOME Shell 3.30.1 unter Ubuntu 18.10 funktioniert diese Lösung nicht mehr. Der Benutzer wird auf den Anmeldebildschirm verwiesen und verliert alle seine Arbeit. Die richtige Lösung lautet jetzt commandline: "killall -3 gnome-shell" oder ALT + f2 und r (falls möglich).
C. Rogers

1
ALT+f2(show command prompt) + gnome-shell --replacewird in 18.04 gut funktionieren. Alle laufenden Programme werden nicht gestoppt.
Lifeisfoo

Ich füge das kaufmännische Und am Ende des Befehls hinzu, um den Prozess in den Hintergrund zu stellen, damit ich das Terminal schließen kann, ohne die Gnom-Shell gnome-shell --replace &
Teddy,

31

Am einfachsten ist es, Alt+ F2und rdann einzugeben .


5
Das stimmt, aber genau das ist nicht die Frage. Die Frage ist dann: Was passiert, wenn Sie dies tun. Damit Sie es selbst machen können
siehe

4
Ab GNOME Shell 3.30.1 unter Ubuntu 18.10 und Commandline: "killall -3 gnome-shell" sind die einzigen hier veröffentlichten Lösungen, die funktionieren. Alle anderen werfen den Benutzer zum Anmeldebildschirm und verlieren alle ihre Arbeit.
C. Rogers

1
Versuchte dies auf Debian Buster. Der Fehler "Neustart ist auf Wayland nicht verfügbar" wird angezeigt.
Livinston

26

Sie können auch eine killall -3 gnome-shell.


2
Ich weiß nicht, warum die Leute diesen Befehl weiter empfehlen. Alles was dies tut ist Gnom-Shell zu töten. Wie haben Sie die Frage nach einem Neustart beantwortet?
smac89

1
Wahrscheinlich, weil dies eine gute Lösung ist, bei der der andere Befehl nicht funktioniert. Ich habe beide ausprobiert, der Auserwählte ist gut, hat aber mein Problem nicht gelöst.
Mitro

2
Ab Ubuntu 18.10 ist GNOME Shell 3.30.1 - DAS IST DIE RICHTIGE LÖSUNG. Bei allen anderen Lösungen wird die Sitzung neu gestartet, und der Benutzer wird auf den Anmeldebildschirm verwiesen. Dadurch geht seine Arbeit verloren.
C. Rogers

3
SIGQUIT (3) beendet den Prozess nicht
Jack Wasey

Das schien für mich zu funktionieren. Wobei ich gnome-shell --replace &vorher benutzt habe. Es funktionierte aber, lief weiter im Terminal. Das Problem, das ich hatte, war, dass Youtube-Videos im Vollbildmodus irgendwie dazu führten, dass Dash-to-Dock und das Panel einfroren. github.com/micheleg/dash-to-dock/issues/…
Natetronn

5

Der Befehl sollte einfach sein gnome-shell --replace.


3
Ab GNOME Shell 3.30.1 unter Ubuntu 18.10 funktioniert diese Lösung nicht mehr. Der Benutzer wird auf den Anmeldebildschirm verwiesen und verliert alle seine Arbeit. Die richtige Lösung lautet jetzt commandline: "killall -3 gnome-shell" oder ALT + f2 und r (falls möglich).
C. Rogers

funktioniert nicht für eine Remote-Sitzung. Wenn die Gnome-Shell eingefroren ist, funktioniert dies nicht.
Jack Wasey

5

Für den Fall, dass das Ganze gnome-shelleingefroren ist, gibt es eine Möglichkeit, es vom Terminal aus neu zu starten, ohne das gesamte X-Fenster neu zu starten:

  • Ctrl+ Alt+ F2, um zum Terminal zu wechseln
  • Melden Sie sich mit Ihren Anmeldeinformationen (Benutzername und Passwort) an und führen Sie dann Folgendes aus:
  • DISPLAY=:0 gnome-shell -r &
  • ausloggen exitund
  • Alt+ F1, um zur grafischen Oberfläche von X Window zurückzukehren.

1

Ich habe mir diese Funktion ausgedacht, um Benutzer abzumelden (siehe unten)

Es geht davon aus

  • Sie haben Sudo-Berechtigungen
  • Sie haben Bash
  • Die Benutzer haben 1 laufende X-Sitzung (obwohl Sie in der Lage sein sollten, denselben Abmeldebefehl mehrmals abzusetzen, um verbleibende Sitzungen zu entfernen).

Sie können ihm mehrere Benutzernamen geben:

logout john jane mike elisa

Und Sie können es zusätzliche Optionen geben:

logout john --force

Ich habe also folgende Hilfsfunktion:

function forcelogout() {
    logout "$@" --no-prompt --force
}

Anmerkungen:

  • Dies ist ein stumpfes Instrument und funktioniert, indem nur die gesamte Sitzungsumgebung kopiert wird. Dies könnte selektiver sein.
  • Manchmal scheint das Abmelden eine Weile zu dauern
  • In seltenen Fällen wird die Sitzung so lange gemeldet, bis jemand den virtuellen Computer besucht, auf dem die Sitzung stattgefunden hat, aber nichts mehr vorhanden ist.

CODE

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

Ich habe einen Alias ​​definiert: alias gnomeshellrestart='echo "gnome-shell --replace -d" $(w| grep "$USER"| awk "{print \$3}"|grep ":"|head -1)| at now'

Möglicherweise können Sie ein Terminal starten, indem Sie mit der rechten Maustaste auf den Hintergrund klicken und dort eingeben (Alt-Tab ist dann auch nicht korrekt). Wenn nicht, melden Sie sich bei einem Tty mit z. B. Strg-Alt-F2 an und führen Sie es aus.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.