Manière de déconnecter un utilisateur de la ligne de commande dans OS X 10.9

31

Je souhaite déconnecter mon Mac OS X de la ligne de commande. Ma version OS X est 10.9. J'ai essayé la commande pkill -KILL -u uid, mais cette commande n'a pas fonctionné. Existe-t-il une commande qui peut être utilisée pour déconnecter un utilisateur du système en utilisant uniquement la ligne de commande, pas AppleScript ?

prateeak ojha
la source
qu'est-ce qui n'a pas fonctionné exactement?
nohillside
en exécutant la commande pkill -KILL -u uid, le système me montre un écran gris et en attendant longtemps, le système affiche la fenêtre de
fermeture forcée

Réponses:

32

sudo launchctl bootout gui/$(id -u <username>)
ou
sudo launchctl bootout user/$(id -u <username>)

Remplacez le nom d'utilisateur par le nom d'utilisateur de l'utilisateur cible ou remplacez le sous-shell entier par l'uid de l'utilisateur. Cela indique à launchctl de démonter la session de connexion des utilisateurs (gui fait spécifiquement référence à la session de connexion temporaire de l'utilisateur, l'utilisateur spécifie les processus d'arrière-plan des utilisateurs).

Vous pouvez vous déconnecter sans le sudotester.

Notez que cela fonctionnera UNIQUEMENT sur macOS 10.11.x ou plus récent (voir launchctl helppour plus)

Iain Henderson
la source
1
Je viens de relire votre question et je suis désolée que cela ne vous aidera pas, mais elle apparaîtra dans les résultats de recherche Google.
Iain Henderson
29

Pour vous déconnecter purement du terminal (ou d'une session ssh distante), il suffit de tuer le processus loginwindow:

sudo pkill loginwindow

Vous pouvez avoir de la fantaisie et spécifier l'utilisateur si plusieurs utilisateurs ont un processus de fenêtre de connexion, mais il s'agit d'un seul coup facile, pas de moyen rapide de mettre fin à la session graphique d'un utilisateur.

bmike
la source
16

Cela avait fonctionné pour moi, par le passé:

Déconnexion (avec confirmation)

osascript -e 'tell app "System Events" to log out'

Déconnectez-vous directement (pas de confirmation)

osascript -e 'tell app "System Events" to  «event aevtrlgo»'

ou

osascript -e 'tell application "loginwindow" to  «event aevtrlgo»'

De cette façon, toute application en cours d'exécution sera remarquée et pourra se terminer de manière sécurisée.

nohillside
la source
osascript -e 'Tell app "System Events" to "event aevtrlgo"' montrant une erreur: un "<" ne peut pas aller après.
prateeak ojha
Hmm, ça marche bien pour moi. Pouvez-vous essayer à partir d'un script shell au lieu de la ligne de commande, peut-être que le shell fait des choses étranges ici.
nohillside
Je suppose que l'OP a un autre problème et les commandes normales sont bloquées à partir des commentaires ici et de la description de la question.
bmike
5
Notez que «≠ <<
mlainz
2

Si vous avez plusieurs utilisateurs ....

Trouvez l'ID de processus avec:

ps aux|grep login

Tuez ensuite ce processus et vous avez déconnecté cette session. Mais il reste beaucoup de processus.

Vérifiez avec pstreeafin que vous sachiez quel processus mettre fin.

Hugo van der Kooij
la source
2

Cela fait l'affaire pour moi.

sudo -s

Pour obtenir des privilèges root et l'invite #, supprimez les processus.

killall -vu username -HUP

Et si tout n'est pas parti. Nuke em! Avertissement obligatoire - tuer des choses en tant que root n'a pas d'annulation et non "êtes-vous sûr de vouloir interrompre ce processus sans enregistrer vos fichiers, y compris les bases de données critiques du système qui pourraient rendre la machine non amorçable en de rares occasions". tapez les avertissements.

killall -vu username -9
tovare
la source
1
Pas besoin d'entrer dans le shell root - il suffit de coller sudo devant les commandes killall
user151019
1

Un bon utilitaire à ajouter à votre Terminal est la commande "logout", à utiliser comme:

logout UserName

Voici comment:

  1. Modifiez votre .bash_profile

    nano ~/.bash_profile

  2. Ajoutez cette ligne:

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

  3. Enregistrez le fichier en appuyant sur ctrl+x

  4. Redémarrez le terminal

Vous êtes prêt à partir ;)

Kappe
la source
J'ai dû briser le corps sur une nouvelle ligne et mettre également le corset de fermeture.
bmauter
@bmauter pas pour moi, sous la forme suggérée fonctionne parfaitement.
Kappe
-3

si vous êtes connecté avec ssh à un ordinateur distant, vous pouvez vous déconnecter en tapant simplement 'exit':

[host:~user]$ exit
holbein
la source