web-dev-qa-db-fra.com

Qu'est-ce que la commande de terminal Mac OS X pour déconnecter l'utilisateur actuel?

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?

19

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'"
22
dbr

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 loginwindowde 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.

  1. Dans le terminal, lancez ceci:

    ps -Ajc | grep loginwindow
    
  2. Puis, lancez

    Sudo kill <pid>
    

    <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"
17
Josh Hunt

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.

3
mark l

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
2
BITeC

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).

0
Iain Henderson

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 .

0
dlamblin

Un utilitaire intéressant à ajouter à votre terminal est la commande logout, à utiliser comme suit:

logout UserName

Voici le comment:

  1. Editez votre .bash_profile

    nano ~/.bash_profile

  2. Ajouter cette ligne:

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

  3. Enregistrez le fichier en appuyant sur ctrl+x

  4. Redémarrer le terminal

Vous êtes prêt à partir ;)

0
Kappe