Como posso sair da GUI usando a CLI?


43

Eu escolhi um Openbox DE no momento do login e o sistema levou séculos para carregar o DE. Então, mudei para a CLI ( Ctrl+ Alt+ F1) e reiniciei o sistema (mas queria sair da GUI e não reiniciar todo o sistema).

Minha pergunta é: posso emitir algum comando na CLI para me desconectar da GUI para que eu possa selecionar DE diferente. (Não quero reiniciar meu sistema toda vez que o DE trava.)


$ DISPLAY=:0 gnome-session-quit --force

** (gnome-session-quit:3144): WARNING **: Failed to call logout: The name org.gnome.SessionManager was not provided by any .service files

Respostas:


45

Para finalizar todos os processos do usuário e ser enviado de volta à tela de login, você pode usar:

kill -9 -1

Não o execute como root, por motivos discutidos aqui .


3
Funciona muito bem, mas por quê? Em especial, por que o LightDM é reiniciado depois que você mata tudo, exceto o init?
Ciro Santilli escreveu

1
@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 Porque mata com força (9) TUDO que é permitido. O que significa que todos os processos pertencem a você. Usar o SIGKILL para finalizar aplicativos não é absolutamente recomendável! Use SIGTERM (15). Os aplicativos podem reagir a esse sinal e fazer a limpeza.
ManuelSchneid3r

22

Isso pode ser feito usando o gnome-session-quitcomando Ele precisa da --forceopção de suprimir a caixa de diálogo de confirmação que apareceria sem ela.

Ao contrário dos aplicativos executados a partir de um emulador de terminal X, o encerramento de uma sessão a partir de um TTY exige que você acrescente a DISPLAYvariável para indicar qual exibição do X está executando a sessão. Conseqüentemente:

DISPLAY=:0 gnome-session-quit --force

assumindo que você esteja executando o GNOME em: 0, que é o caso em situações normais.

  • No Ubuntu 12.04LTS executando o GNOME, o comando

    "DISPLAY=:0 gnome-session-quit --logout --no-prompt" 
    

    trabalho. O argumento "--force" não existe no nível de atualização atual]


obrigado, executei o comando, mas recebi algum erro. Eu editei minha postagem para incluir o erro. Por favor, compartilhe se eu fiz algo errado.
Ankit

Meu mal, eu não notei que você mencionou que está usando o openbox. Infelizmente, este comando funcionará apenas com uma instalação padrão do Ubuntu (Unity / GNOME). Como alternativa, você pode desligar completamente a GUI e, portanto, sua sessão executando sudo service lightdm stop. edit: qual ambiente de desktop você está usando? O Openbox é apenas um gerenciador de janelas.
precisa saber é o seguinte

Estou tentando usar o kde / openbox ou o gnome / openbox.
Ankit

Não funciona se o seu terminal não faz parte da mesma sessão dbus que a sessão do gnome. Como você entra em outra sessão do dbus?
Zan Lynx

É este o comando que é executado ao clicar em "Log Out ..." através da GUI?
Dor

7

Por favor, siga a sugestão de takkat . O padrão é Ctrl+ Alt+ Backspace.

Você também pode executar:

$ sudo service lightdm restart

1
O gdm foi substituído pelo lightdm. Além disso, ctrl + alt + backspace é desativado por padrão.
precisa saber é o seguinte

@ Cumulus007 Obrigado, resposta atualizada. Eu sei que ctrl + alt + backspace está desativado por padrão, nunca entendi o porquê, mas estou ciente disso. Estou apenas informando ao OP qual é a combinação de teclas padrão mais usada. Acho melhor seguir os padrões, pois facilita a solução de problemas.
terdon

1
Parar o lightdm significará que não haverá prompt de login posteriormente, para que ele não tenha a chance de fazer login em um ambiente diferente.
poolieby

1
Justo o suficiente @poolie, resposta atualizada.
terdon

4

De outra maneira,

sudo pkill -u NameOftheUser

ou

sudo pkill x

que matam todos os usuários.


Isso é um pouco duro, você não acha?
acolyte

Harsh? É extremamente bobo.
HörmannHH

2

O verdadeiro problema é que as variáveis ​​de sessão DBUS devem ser definidas e corresponder à sessão que você está tentando controlar.

Eu criei esse script que define as variáveis ​​de sessão DBUS do ambiente gnome-session, caso você queira fazer logout de outros usuários / sessões:

Como reiniciar o Gnome-Shell na linha de comando?

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
}

Usar --logout --no-promptou em --forcevez de apenas --logouté uma ideia melhor; caso contrário, um prompt de logout será mostrado.
Gioele

1

Se você estiver em uma sessão do xubuntu ou similar, deve usar xfce4-session-logout insted dos comandos gnome session, é por isso que você vê avisos


1

Isto é o que funciona melhor para mim (com xfce, lightdm e ssh):

$ DISPLAY=:0.0 xfce4-session-logout --logout

Ou

$ sudo service lightdm restart

0

Como alternativa, você pode encerrar as sessões do usuário usando o seguinte: funciona bem para desconectar usuários, exceto para o usuário root - ao fazer manutenção, por exemplo.

loginctl | egrep -v "root|SESSION|listed" | awk '{print $1}' | xargs loginctl terminate-session

-2

Você pode usar o comando killall gnome-sessionpara fazer logout. Isso funcionará para todas as sessões do GNOME e se eu me lembro corretamente de todas as sessões relacionadas ao GNOME. Leva você de volta ao LightDM para que você possa selecionar um novo DE ou um novo usuário. :)


2
Não é a melhor maneira de sair. Verifique askubuntu.com/questions/69114/…
jokerdino

Nunca vi essa opção antes. Eu provavelmente deveria começar a usar isso. Suponho que killall gnome-sessionseja uma maneira poderosa de fechá-lo.
Ryan McClure
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.