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ń?

Benzoes
źródło
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
jokerdino
źródło
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

agustibr
źródło
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.

Denis
źródło
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.

Christopher Kyle Horton
źródło
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.
ja nie
źródło
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
}
sehe
źródło
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.

MoreIT
źródło