Jak zrestartować GNOME Shell z linii poleceń?


51

Chciałbym zaimplementować skrót klawiaturowy, aby ponownie uruchamiać gnome-shell za każdym razem, gdy ulega awarii ( niektóre błędy nie są jeszcze naprawione). W tym celu potrzebowałbym wiersza polecenia do ponownego uruchomienia powłoki.

Polecenia Alt+ F2i restartnie będą działać, gdy powłoka ulegnie awarii, ponieważ monit jest zaimplementowany w powłoce.

Jak zrestartować gnome-shell z linii poleceń?


UWAGA: Alt + F2 i restartzatrzyma wszystkie uruchomione programy. (Nadal nie wiem, jak zrestartować GUI bez zatrzymywania programów.)
Andriy Makukha,

Odpowiedzi:


48

Polecenie zastąpienia powłoki gnome byłoby gnome-shell --replace.

Ze strony podręcznika gnome-shell:

--replace             Replace the running window manager

2
Dzięki, nie byłem pewien --replace= „uruchom ponownie”.
Benjamin

4
Począwszy od GNOME Shell 3.30.1 na Ubuntu 18.10, to rozwiązanie już nie działa i spowoduje wyrzucenie użytkownika do ekranu logowania, tracąc całą swoją pracę. Poprawnym rozwiązaniem jest teraz wiersz poleceń: „killall -3 gnome-shell” lub ALT + f2 i r (jeśli to możliwe).
C.Rogers

1
ALT+f2(pokaż wiersz polecenia) + gnome-shell --replacebędzie działał dobrze w 18.04. Wszystkie działające programy nie zostaną zatrzymane.
lifeisfoo

Na końcu polecenia dodaję znak ampersand, aby umieścić proces w tle, aby móc zamknąć terminal bez zabijania powłoki gnome:gnome-shell --replace &
Teddy

OSTRZEŻENIE: gnome-shell --replacena moim komputerze Ubuntu 19.10 spowodowało zamknięcie większości działających aplikacji, a gnome-shell przeszedł w stan problemu z białym ekranem i monitem o ponowne uruchomienie komputera.
Sparr

31

Najłatwiej jest wtedy wpisać Alt+ F2i wpisać .r


5
To prawda, ale dokładnie nie pytanie. Pytanie brzmi: co się stanie, kiedy to zrobisz? Tak, że można to zrobić samemu
sehe

4
Począwszy od GNOME Shell 3.30.1 na Ubuntu 18.10, i wiersz poleceń: „killall -3 gnome-shell” to jedyne opublikowane tutaj rozwiązania, które działają. Wszyscy inni wyrzucają użytkownika do ekranu logowania, tracąc całą swoją pracę.
C.Rogers

1
Próbowałem tego na Debian Buster. Błąd „Ponowne uruchomienie nie jest dostępne na Wayland”.
livinston

26

Możesz także zrobić killall -3 gnome-shell.


2
Nie wiem, dlaczego ludzie wciąż polecają to polecenie. Wszystko to polega na zabiciu gnome-shella. Jak odpowiedziałeś na pytanie o ponowne uruchomienie?
smac89

1
Prawdopodobnie dlatego, że jest to dobre rozwiązanie, gdy inne polecenie nie działa. Próbowałem obu, wybrany jest dobry, ale nie rozwiązałem mojego problemu.
Mitro

2
Począwszy od Ubuntu 18.10, GNOME Shell 3.30.1 - TO WŁAŚCIWE ROZWIĄZANIE. Wszystkie pozostałe rozwiązania ponownie uruchamiają sesję i wyrzucają użytkownika do ekranu logowania, tracąc całą pracę.
C.Rogers

3
SIGQUIT (3) nie zabija procesu
Jack Wasey

Wydawało mi się, że to działa. Podczas gdy używałem gnome-shell --replace &wcześniej. Działało, ale działało w terminalu. Problem, który miałem, dotyczył filmów na Youtube na pełnym ekranie, co powodowało, że Dash-to-Dock i panel zawieszały się. github.com/micheleg/dash-to-dock/issues/…
Natetronn

5

Polecenie powinno być po prostu gnome-shell --replace.


3
Począwszy od GNOME Shell 3.30.1 na Ubuntu 18.10, to rozwiązanie już nie działa i spowoduje wyrzucenie użytkownika do ekranu logowania, tracąc całą swoją pracę. Poprawnym rozwiązaniem jest teraz wiersz poleceń: „killall -3 gnome-shell” lub ALT + f2 i r (jeśli to możliwe).
C.Rogers

nie działa dla sesji zdalnej, więc gdy gnome shell się zawiesił, to nie działa.
Jack Wasey

5

W przypadku gnome-shellzamrożenia całości istnieje sposób na ponowne uruchomienie go z terminala bez ponownego uruchamiania całego okna X:

  • Ctrl+ Alt+, F2aby przełączyć na terminal
  • zaloguj się przy użyciu swoich poświadczeń (nazwa użytkownika i hasło), a następnie uruchom:
  • DISPLAY=:0 gnome-shell -r &
  • wyloguj się exiti
  • Alt+, F1aby wrócić do interfejsu graficznego X Window.

1

Wymyśliłem tę funkcję, aby wylogować użytkowników (patrz na dole)

Zakłada

  • masz uprawnienia sudo
  • masz uderzenie
  • użytkownicy mają 1 uruchomioną sesję X (chociaż powinieneś być w stanie wydać to samo polecenie wylogowania wiele razy, aby pozbyć się pozostałych sesji)

Możesz nadać mu wiele nazw użytkowników:

logout john jane mike elisa

I możesz dać mu dodatkowe opcje:

logout john --force

Mam więc następującą funkcję pomocniczą:

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

Uwagi:

  • Jest to tępy instrument i działa po prostu poprzez skopiowanie całego środowiska sesji. To może być bardziej selektywne.
  • Czasami wylogowanie zajmuje trochę czasu
  • W rzadkich przypadkach sesja jest raportowana, dopóki ktoś nie odwiedzi vt, w którym sesja się odbyła, ale nic już nie ma

KOD

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

Zdefiniowałem alias: alias gnomeshellrestart='echo "gnome-shell --replace -d" $(w| grep "$USER"| awk "{print \$3}"|grep ":"|head -1)| at now'

Możesz być w stanie uruchomić terminal klikając prawym przyciskiem myszy na tle i pisać tam (alt-tab też jest dysfct), jeśli nie, zaloguj się do tty np. Ctrl-alt-F2 i uruchom stamtąd.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.