it-swarm.dev

Jak restartovat prostředí GNOME z příkazového řádku?

Chtěl bych implementovat klávesovou zkratku pro restartování gnome-Shell, kdykoli dojde k chybě ( některé chyby momentálně nejsou opraveny). K tomu bych potřeboval příkazový řádek pro restartování Shell.

 Alt+F2 a příkaz restart nebude fungovat, když dojde ke zhroucení Shell, protože Prompt je implementován do Shell.

Jak tedy restartovat gnome-Shell z příkazového řádku?

62
Benjamin

GNOME Shell 3.30.1 na Ubuntu 18.10

Příkaz k nahrazení gnome-Shell by byl killall -3 gnome-Shell.

Od GNOME Shell 3.30.1 na Ubuntu 18.10 již řešení níže nefunguje a nakopne uživatele na přihlašovací obrazovku a ztratí veškerou práci.

Před prostředí GNOME 3.30.1

Příkaz k nahrazení gnome-Shell by byl gnome-Shell --replace &. (Ampersand je přidán, aby po spuštění příkazu vrátil Shell Prompt; namísto stisknutí Ctrl + C nebo zavření terminálu by se pracovní plocha stala nepoužitelnou a vyžadovala by úplný restart.)

Z manuálové stránky uživatele gnome-Shell:

--replace             Replace the running window manager
57
jokerdino

Nejjednodušší způsob je Alt+F2 a poté zadejte r .

49
agustibr

Můžete také udělat killall -3 gnome-Shell.

32
Denis

V případě, že celý gnome-Shell zamrzlo existuje způsob, jak jej restartovat z terminálu bez restartování celého okna X:

  • Ctrl+Alt+F2 přepnout na terminál
  • přihlaste se pomocí svých přihlašovacích údajů (uživatelské jméno a heslo) a poté spusťte:
  • DISPLAY=:0 gnome-Shell -r &
  • odhlaste se exit and
  • Alt+F1 pro přepnutí zpět do grafického rozhraní X Window.
8
ino

Příkaz by měl být pouze gnome-Shell --replace.

Přišel jsem s touto funkcí k odhlášení uživatelů (viz dole)

Předpokládá se

  • máte sudo povolení
  • máš bash
  • uživatelé mají 1 spuštěnou X relaci (i když byste měli být schopni vydat stejný příkaz k odhlášení několikrát, abyste se zbavili zbývajících relací)

Můžete mu dát více uživatelských jmen:

logout john jane mike elisa

A můžete mu dát další možnosti:

logout john --force

Mám tedy následující pomocnou funkci:

function forcelogout() {
    logout "[email protected]" --no-Prompt --force
}

Poznámky:

  • Jedná se o tupé nástroje a funguje tak, že zkopírujete celé prostředí relace. To by mohlo být selektivnější.
  • Zdá se, že odhlášení někdy chvíli trvá
  • Ve vzácných případech se relace stále hlásí, dokud někdo nenavštíví vt, kde relace proběhla, ale už tam nic není)

KÓD

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 [email protected]"
            ) | Sudo -u "$USERNAME" sh -;
        fi
    done
}
1
sehe

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

Pravděpodobně budete moci spustit terminál kliknutím pravým tlačítkem myši na pozadí a zadáním tam (alt-tab je pak také špatný), pokud ne, přihlaste se k tty s např. ctrl-alt-F2 a odtud běžet.

1
MoreIT