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 ?


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)


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.


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.


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.


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

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.