Maneira de desconectar um usuário da linha de comando no OS X 10.9


30

Quero sair do meu Mac OS X na linha de comando. Minha versão do OS X é 10.9. Eu tentei comando pkill -KILL -u uid, mas esse comando não deu certo. Existe um comando que pode ser usado para desconectar um usuário do sistema usando apenas a linha de comando, não o AppleScript ?


o que exatamente não deu certo?
Nohillside

sobre a execução do comando pkill -kill -u uid o sistema me mostra uma tela cinza e esperando por muito tempo o sistema mostra a força de sair da janela sem aplicação em execução
prateeak ojha

Respostas:


30

sudo launchctl bootout gui/$(id -u <username>)
ou
sudo launchctl bootout user/$(id -u <username>)

Substitua o nome de usuário pelo nome de usuário do usuário de destino ou substitua todo o subshell pelo uid do usuário. Isso diz ao launchctl para desmontar a sessão de login dos usuários (gui refere-se especificamente à sessão de login temporária do usuário, o usuário especifica os processos em segundo plano dos usuários).

Você pode se desconectar sem o sudoteste.

Observe que isso só funcionará no macOS 10.11.x ou mais recente (veja launchctl helppara mais informações)


11
Acabei de reler sua pergunta e lamento que isso não o ajude, mas aparecerá nos resultados de pesquisa do Google.
Iain Henderson

29

Para efetuar logout apenas do terminal (ou de uma sessão ssh remota), basta matar o processo da janela de login:

sudo pkill loginwindow

Você pode se interessar e especificar o usuário se vários usuários tiverem um processo de janela de login, mas essa é uma opção fácil, sem nenhuma maneira rápida de encerrar a sessão gráfica de um usuário.


16

Isso funcionou para mim no passado:

Sair (com confirmação)

osascript -e 'tell app "System Events" to log out'

Sair diretamente (sem confirmação)

osascript -e 'tell app "System Events" to  «event aevtrlgo»'

ou

osascript -e 'tell application "loginwindow" to  «event aevtrlgo»'

Dessa forma, qualquer aplicativo em execução será notado e poderá terminar de maneira segura.


osascript -e 'diga ao aplicativo "System Events" para «event aevtrlgo»' mostrando o erro: um "<" não pode passar depois disso.
Prateeak ojha

Hmm, funciona bem para mim. Você pode tentar a partir de um script de shell em vez da linha de comando, talvez o shell faça algumas coisas estranhas aqui.
Nohillside

Acho que o OP tem algum outro problema e os comandos normais estão sendo desligados dos comentários aqui e da descrição da pergunta.
Bmike

5
Observe que «≠ <<
mlainz

2

Se você tiver vários usuários ....

Encontre o ID do processo com:

ps aux|grep login

Depois mate esse processo e você encerrou a sessão. Mas ainda existem muitos processos.

Verifique com pstreepara saber qual processo encerrar.


2

Isso faz o truque para mim.

sudo -s

Para obter alguns privilégios de root e o prompt #, mate os processos.

killall -vu username -HUP

E se nem tudo se foi. Nuke em! Aviso obrigatório - matar coisas como o root não tem desfazer e não "você tem certeza de que deseja interromper esse processo sem salvar seus arquivos, incluindo bancos de dados críticos do sistema que podem tornar a máquina impossível de inicializar em raras ocasiões". avisos de tipo.

killall -vu username -9

11
Não há necessidade de em shell de root - ater apenas sudo na frente dos comandos killall
Mark

1

Um bom utilitário para adicionar ao seu terminal é o comando "logout", para ser usado como:

logout UserName

Aqui o como:

  1. Edite seu .bash_profile

    nano ~/.bash_profile

  2. Adicione esta linha:

    logout() {sudo launchctl bootout user/$(id -u "$1")}

  3. Salve o arquivo pressionando ctrl+x

  4. Reinicie o terminal

Você está pronto para ir ;)


Eu tive que quebrar o corpo em uma nova linha e colocar a cinta de fechamento depois também.
bmauter

@ Bmauter não para mim, na forma sugerida funciona perfeitamente.
quer

-3

se você estiver conectado com o ssh em um computador remoto, poderá sair simplesmente digitando 'exit':

[host:~user]$ exit
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.