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?
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?
Réponses:
L'Applescript suivant déconnectera l'utilisateur actuel:
tell application "System Events" to log out
Vous pouvez envelopper cela dans un alias bash en utilisant la osascript
commande:
alias maclogout="osascript -e 'tell application \"System Events\" to log out'"
Cela revient à cliquer sur ""> Se déconnecter [nom d'utilisateur] ... ", et se déconnectera après une attente de 2 minutes
Ceci est facilement combiné avec la sleep
commande:
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'"
alias maclogout="..."
Il n'y a aucun moyen "sympa" de déconnecter l'utilisateur actuel de Terminal sous OS X. La manière "désordonnée" de le faire est de tuer le loginwindow
processus de cet utilisateur . Il tuera grossièrement tous les processus (programmes) exécutés sous votre nom d'utilisateur.
Faire cela est un processus en deux étapes.
Dans le terminal, exécutez ceci:
ps -Ajc | grep loginwindow
Ensuite, exécutez
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 la suppression du processus que je devais faire pour que cela fonctionne.
Ainsi, par exemple, lorsque si la sortie de la première commande est:
joshhunt 41 1 41 5e15c08 0 Ss ?? 3:13.09 loginwindow
Ensuite, je cours sudo kill 41
, saisis mon mot de passe, puis je suis déconnecté.
Cela peut être combiné en un alias bash:
alias messylogout="ps -Ajc | grep loginwindow | grep -v grep | awk '{print \$2}' | sudo xargs kill"
sudo killall loginwindow
? Au moins sur 10,7, le loginwindow
processus semble être rouvert immédiatement cependant.
Je sais que c'est une vieille question mais cela m'a aidé, la commande dont j'avais besoin sur OS X 10.8 est:
ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9
L' awk
instruction est différente et kill -9
garantit que l'invite de connexion est affichée.
Je pense avoir trouvé la réponse à la déconnexion complète de Mac OS X sans attendre 2 minutes.
J'ai compris que maintenir Shift, Option et Command et appuyer sur "q" se déconnecterait gracieusement 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
Si vous êtes connecté à un shell en tant que même utilisateur qui est connecté à l'interface graphique du mac, vous pouvez émettre une commande sans sudo: launchctl reboot logout
qui déconnecte l'utilisateur assez efficacement; il a la mise en garde de ne pas permettre aux applications qui sont en train de quitter d'inviter à l'interaction lors de la fermeture, mais cela ne semble pas impliquer que cela revient à les tuer purement et simplement comme kill
(SIG TERM) ou kill -9
(SIG KILL).
Je dirais que la façon la plus "agréable" 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 essentiellement la commande ci-dessus supprimera la session temporaire d'un utilisateur. L'alternative launchctl user/$(id -u <username>) bootout
supprime la session permanente qui exécute les démons utilisateur alors que l'utilisateur n'est pas connecté.
Cela peut être testé en exécutant launchctl gui/$(id -u) bootout
, cela vous déconnectera immédiatement et amènera le système à afficher la fenêtre de connexion (avec un certain retard).
sudo launchctl bootout gui/XXX
où se XXX
trouve l'ID utilisateur numérique (UID). Notez que i) la bootout
sous - commande vient en premier et ii) $(id)
renvoie beaucoup plus que l'UID.
Un bon utilitaire à ajouter à votre terminal est la commande de déconnexion , à utiliser comme:
logout UserName
Voici comment:
Modifiez votre .bash_profile
nano ~/.bash_profile
Ajoutez cette ligne:
logout() {sudo launchctl bootout user/$(id -u "$1")}
Enregistrez le fichier en appuyant sur ctrl+x
Redémarrez le terminal
Vous êtes prêt à partir ;)