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?

Benjamin
fonte
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
jokerdino
fonte
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 .

agustibr
fonte
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.

Denis
fonte
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.

Christopher Kyle Horton
fonte
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.
eu não
fonte
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
}
ver
fonte
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í.

MoreIT
fonte