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 osascriptcomando:
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 sleepcomando:
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 loginwindowprocesso 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 loginwindowprocesso 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 awkinstrução é diferente e kill -9garante 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 logoutque 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>) bootoutinterrompe 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/XXXonde XXXestá o ID do usuário numérico (UID). Observe que i) o bootoutsubcomando 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 ;)