Je voudrais exécuter quelque chose comme "sleep 3600; logout", mais la commande logout bash ne ferme que le terminal actuel. Comment fermer la session complète de Mac OS X?
L’apple script suivant déconnectera l’utilisateur actuel:
tell application "System Events" to log out
Vous pouvez le résumer dans un alias bash en utilisant la commande osascript
:
alias maclogout="osascript -e 'tell application \"System Events\" to log out'"
Cela revient à cliquer sur "> Déconnexion [nom d'utilisateur] ..." et vous déconnecter après une attente de 2 minutes.
Ceci est facilement combiné avec la commande sleep
:
alias delayedlogout="sleep 3600; maclogout"
..ou pourrait être combiné en un seul alias:
alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"
Il n’existe aucun moyen "agréable" de déconnecter l’utilisateur actuel de Terminal sous OS X. La méthode la plus simple consiste à supprimer le processus loginwindow
de cet utilisateur. Il va tuer brutalement tous les processus (programmes) exécutés sous votre nom d'utilisateur.
Faire cela est un processus en deux étapes.
Dans le terminal, lancez ceci:
ps -Ajc | grep loginwindow
Puis, lancez
Sudo kill <pid>
Où <pid>
est le premier nombre (deuxième colonne) de la sortie de la commande ci-dessus.
Utilisez Sudo kill -9 pour forcer kill à exécuter le processus que j’ai dû faire pour que cela fonctionne.
Ainsi, par exemple, lorsque la sortie de la première commande est la suivante:
joshhunt 41 1 41 5e15c08 0 Ss ?? 3:13.09 loginwindow
Ensuite, je voudrais exécuter Sudo kill 41
, entrer mon mot de passe, puis je suis déconnecté.
Cela peut être combiné dans un alias bash:
alias messylogout="ps -Ajc | grep loginwindow | grep -v grep | awk '{print \$2}' | Sudo xargs kill"
Je sais que c’est une vieille question mais elle m’a aidé, la commande dont j’avais besoin sous OS X 10.8 est la suivante:
ps -Ajc | grep loginwindow | awk '{print $2}' | Sudo xargs kill -9
L'instruction awk
est différente et le kill -9
garantit que l'invite de connexion est affichée.
Je pense avoir trouvé la réponse à la question suivante: comment Gracieusement vous déconnecter de Mac OS X sans attendre 2 minutes.
J'ai compris que maintenir Shift, Option, Command et appuyer sur "q" se déconnecterait normalement et ne demanderait pas "si vous voulez vous déconnecter".
J'ai donc codé un AppleScript via Automator pour:
tell application "System Events"
keystroke "q" using {command down, shift down, option down}
end tell
Je dirais que le "meilleur" moyen après OS X 10.9 pourrait être launchctl gui/$(id -u <username>) bootout
La documentation post-OS X 10.9 pour launchctl est trouvée en exécutant launchctl help
, mais la commande ci-dessus va essentiellement détruire la session temporaire d'un utilisateur. L'alternative launchctl user/$(id -u <username>) bootout
arrête la session permanente qui exécute les démons de l'utilisateur lorsque celui-ci n'est pas connecté.
Cela peut être testé en exécutant launchctl gui/$(id -u) bootout
, cela vous déconnectera immédiatement et le système affichera la fenêtre de connexion (avec un certain retard).
Si vous êtes connecté à un shell en tant que même utilisateur que celui qui est connecté à l'interface graphique du Mac, vous pouvez émettre une commande Sudo-less: launchctl reboot logout
qui déconnecte l'utilisateur de manière assez efficace. il a pour inconvénient de ne pas autoriser les applications qui sont en train de cesser de demander l'interaction en quittant, mais cela ne semble pas impliquer que cela revient à les tuer carrément comme un kill
(SIG TERM) ou un kill -9
(SIG KILL) pourrait .
Un utilitaire intéressant à ajouter à votre terminal est la commande logout, à utiliser comme suit:
logout UserName
Voici le comment:
Editez votre .bash_profile
nano ~/.bash_profile
Ajouter cette ligne:
logout() {Sudo launchctl bootout user/$(id -u "$1")}
Enregistrez le fichier en appuyant sur ctrl+x
Redémarrer le terminal
Vous êtes prêt à partir ;)