Eu gostaria de executar algo como "sleep 3600; logout", mas o comando logout bash fecha apenas o terminal atual. Como fecho a sessão completa do Mac OS X?
Eu gostaria de executar algo como "sleep 3600; logout", mas o comando logout bash fecha apenas o terminal atual. Como fecho a sessão completa do Mac OS X?
Respostas:
O Applescript a seguir desconectará o usuário atual:
tell application "System Events" to log out
Você pode finalizar isso em um alias do bash usando o osascript
comando:
alias maclogout="osascript -e 'tell application \"System Events\" to log out'"
É o mesmo que clicar em "> Sair [nome de usuário] ..." e sairá após 2 minutos de espera
Isso é facilmente combinado com o sleep
comando:
alias delayedlogout="sleep 3600; maclogout"
..ou pode ser combinado em um único alias:
alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"
alias maclogout="..."
Não há uma maneira "agradável" de desconectar o usuário atual do Terminal no OS X. A maneira 'confusa' de fazer isso é matar o loginwindow
processo desse usuário . Isso irá matar de forma grosseira todos os processos (programas) executados com o seu nome de usuário.
Fazer isso é um processo de duas etapas.
No terminal, execute o seguinte:
ps -Ajc | grep loginwindow
Então corra
sudo kill <pid>
Onde <pid>
está o primeiro número (segunda coluna) da saída do comando acima.
Use o sudo kill -9 para forçar o processo que eu precisei fazer para que isso funcionasse.
Por exemplo, quando se a saída para o primeiro comando for:
joshhunt 41 1 41 5e15c08 0 Ss ?? 3:13.09 loginwindow
Então eu corria sudo kill 41
, digitava minha senha e depois saí.
Isso pode ser combinado em um alias do bash:
alias messylogout="ps -Ajc | grep loginwindow | grep -v grep | awk '{print \$2}' | sudo xargs kill"
sudo killall loginwindow
? Pelo menos em 10.7 o loginwindow
processo parece ser aberto novamente imediatamente imediatamente.
Eu sei que essa é uma pergunta antiga, mas ela me ajudou, o comando que eu precisava no OS X 10.8 é:
ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9
A awk
instrução é diferente e kill -9
garante que o prompt de login seja mostrado.
Acho que encontrei a resposta para fazer logoff graciosamente do Mac OS X sem a espera de 2 minutos.
Eu descobri que pressionar Shift, Option e Command e pressionar "q" sairá normalmente e não perguntará "se você deseja sair".
Então, eu codifiquei um AppleScript através do Automator para:
tell application "System Events"
keystroke "q" using {command down, shift down, option down}
end tell
Se você estiver conectado a um shell como o mesmo usuário conectado à GUI do Mac, poderá emitir um comando sudo-less: o launchctl reboot logout
que efetua logout do usuário com bastante eficiência; ele tem a ressalva de não permitir que os aplicativos que estão sendo interrompidos solicitem interação ao sair, no entanto, não parece implicar que isso é a mesma coisa que eliminá-los imediatamente como um kill
(SIG TERM) ou kill -9
(SIG KILL).
Eu diria que a maneira "mais legal" de postar o OS X 10.9 pode ser launchctl gui/$(id -u <username>) bootout
A documentação pós OS X 10.9 para o launchctl é encontrada em execução launchctl help
, mas essencialmente o comando acima desmontará a sessão temporária do usuário. A alternativa launchctl user/$(id -u <username>) bootout
interrompe a sessão permanente que executa os daemons dos usuários enquanto o usuário não está conectado.
Isso pode ser testado em execução launchctl gui/$(id -u) bootout
, você será desconectado imediatamente e fará com que o sistema exiba a janela de login (com algum atraso).
sudo launchctl bootout gui/XXX
onde XXX
está o ID do usuário numérico (UID). Observe que i) o bootout
subcomando vem primeiro e ii) $(id)
retorna muito mais que o UID.
Um bom utilitário para adicionar ao seu Terminal é o comando logout , para ser usado como:
logout UserName
Aqui o como:
Edite seu .bash_profile
nano ~/.bash_profile
Adicione esta linha:
logout() {sudo launchctl bootout user/$(id -u "$1")}
Salve o arquivo pressionando ctrl+x
Reinicie o terminal
Você está pronto para ir ;)