Como reiniciar o GNOME Shell na linha de comando?


51

Gostaria de implementar um atalho de teclado para reiniciar o gnome-shell sempre que este travar ( alguns bugs ainda não foram corrigidos no momento). Para isso, eu precisaria de uma linha de comando para reiniciar o shell.

O comando Alt+ F2e restartnão funcionará quando o shell falhar, porque o prompt é implementado no shell.

Portanto, como reiniciar o gnome-shell na linha de comando?


NOTA: Alt + F2 e restartinterromperá todos os programas em execução. (Eu ainda não sei como reiniciar o GUI sem parar os programas.)
Andriy Makukha

Respostas:


48

O comando para substituir o gnome-shell seria gnome-shell --replace.

Na página do manual de gnome-shell:

--replace             Replace the running window manager

2
Obrigado, eu não tinha certeza --replace= "reiniciar".
Benjamin

4
A partir do GNOME Shell 3.30.1 no Ubuntu 18.10, essa solução não funciona mais e levará o usuário à tela de login, perdendo todo o seu trabalho. A solução correta agora é a linha de comando: "killall -3 gnome-shell" ou ALT + f2 er (se possível).
C.Rogers

1
ALT+f2(show prompt de comando) + gnome-shell --replacefuncionará bem em 18.04. Todos os programas em execução não serão parados.
lifeisfoo 10/06

Eu adiciono o e comercial ao final do comando para colocar o processo em segundo plano para que eu possa fechar o terminal sem matar o gnome-shell:gnome-shell --replace &
Teddy

AVISO: gnome-shell --replacena minha máquina Ubuntu 19.10, a maioria dos aplicativos em execução foi fechada e o gnome-shell entrou em um estado de problema com uma tela branca e um prompt para reiniciar o computador.
Sparr 6/11

31

A maneira mais fácil é Alt+ F2e digite rentão .


5
Isso é verdade, mas exatamente não é a questão. A questão então é: o que acontece quando você faz isso. De modo que você pode fazer isso sozinho
sehe

4
A partir do GNOME Shell 3.30.1 no Ubuntu 18.10, e a linha de comando: "killall -3 gnome-shell" são as únicas soluções postadas aqui que funcionam. Todos os outros expulsam o usuário da tela de login, perdendo todo o seu trabalho.
C.Rogers

1
Tentei isso no debian buster. Obtendo o erro "Reiniciar não está disponível no wayland".
livinston

26

Você também pode fazer um killall -3 gnome-shell.


2
Não sei por que as pessoas continuam recomendando esse comando. Tudo o que isso faz é matar o gnome-shell. Como você respondeu à pergunta de reiniciá-lo?
Smac89

1
Provavelmente porque esta é uma boa solução onde o outro comando não funciona. Eu tentei os dois, o escolhido é bom, mas não resolveu o meu problema, enquanto isso.
Mitro

2
No Ubuntu 18.10, GNOME Shell 3.30.1 - ESTA É A SOLUÇÃO CORRETA. Todas as outras soluções reiniciam a sessão e expulsam o usuário para a tela de login, perdendo todo o seu trabalho.
C.Rogers

3
SIGQUIT (3) não mata o processo
Jack Wasey

Isso pareceu funcionar para mim. Considerando que eu estava usando gnome-shell --replace &antes. Funcionou, mas continuou funcionando no terminal. O problema que eu estava enfrentando era com os vídeos do YouTube em tela cheia, causando o congelamento do Dash-to-Dock e do painel. github.com/micheleg/dash-to-dock/issues/…
Natetronn

5

O comando deve ser apenas gnome-shell --replace.


3
A partir do GNOME Shell 3.30.1 no Ubuntu 18.10, essa solução não funciona mais e levará o usuário à tela de login, perdendo todo o seu trabalho. A solução correta agora é a linha de comando: "killall -3 gnome-shell" ou ALT + f2 er (se possível).
C.Rogers

não funciona em uma sessão remota; portanto, quando o shell do gnome está congelado, isso não funciona.
Jack Wasey

5

Caso o conjunto gnome-shellfique congelado, há uma maneira de reiniciá-lo a partir do terminal sem reiniciar a janela X inteira:

  • Ctrl+ Alt+ F2para mudar para o terminal
  • efetue login com suas credenciais (nome de usuário e senha) e execute:
  • DISPLAY=:0 gnome-shell -r &
  • sair exite
  • Alt+ F1para voltar à interface gráfica X Window.

1

Eu vim com essa função para desconectar usuários (veja na parte inferior)

Assume

  • você tem permissões de sudo
  • você tem festança
  • os usuários têm uma sessão X em execução (embora você deva emitir o mesmo comando de logoff várias vezes para se livrar das sessões restantes)

Você pode atribuir vários nomes de usuário:

logout john jane mike elisa

E você pode oferecer opções adicionais:

logout john --force

Então, eu tenho a seguinte função auxiliar:

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

Notas:

  • Este é um instrumento contundente e funciona apenas copiando todo o ambiente da sessão. Isso pode ser mais seletivo.
  • Às vezes, o logout parece demorar um pouco
  • Em raras ocasiões, a sessão continua sendo relatada até que alguém visite a vt onde a sessão foi executada, mas nada mais existe)

CÓDIGO

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

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

Você pode iniciar um terminal clicando com o botão direito do mouse no fundo e digitando lá (a tecla alt-tab está desativada também); caso contrário, faça login em um tty com, por exemplo, ctrl-alt-F2 e execute a partir daí.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.