Möglichkeit zum Abmelden eines Benutzers von der Befehlszeile in OS X 10.9

Ich möchte mein Mac OS X von der Befehlszeile aus abmelden. Meine OS X-Version ist 10.9. Ich habe es mit command versucht pkill -KILL -u uid, aber dieser Befehl hat nicht funktioniert. Gibt es einen Befehl, mit dem ein Benutzer nur über die Befehlszeile vom System abgemeldet werden kann, nicht mit AppleScript ?

was genau hat nicht geklappt?
Beim Ausführen des Befehls pkill -KILL -u uid zeigt mir das System einen grauen Bildschirm und beim langen Warten zeigt das System das Fenster zum Beenden erzwingen, ohne dass eine Anwendung ausgeführt wird

Antworten (9)

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

Ersetzen Sie username durch den Benutzernamen des Zielbenutzers oder ersetzen Sie die gesamte Subshell durch die UID des Benutzers. Dies weist launchctl an, die Anmeldesitzung des Benutzers herunterzufahren (gui bezieht sich speziell auf die temporäre Anmeldesitzung des Benutzers, der Benutzer gibt die Hintergrundprozesse des Benutzers an).

sudoUm dies zu testen, können Sie sich ohne das abmelden.

Beachten Sie, dass dies NUR auf macOS 10.11.x oder neuer funktioniert (siehe launchctl helpfür mehr)

Ich habe Ihre Frage NUR noch einmal gelesen und es tut mir leid, dass dies Ihnen nicht helfen wird, aber es wird in den Google-Suchergebnissen erscheinen.
Kennen Sie den entgegengesetzten Befehl zum Booten? Ich brauche den Login-Benutzer programmgesteuert.
Das ist toll. Mein Mac bleibt nach einer Weile hängen, wenn ich ihm sage, dass er sich abmelden soll, und er meldet sich nie ab. Der zweite Befehl war sehr überzeugend.

Um sich nur vom Terminal (oder einer Remote-SSH-Sitzung) abzumelden, beenden Sie einfach den Prozess loginwindow:

sudo pkill loginwindow

Sie könnten sich etwas einfallen lassen und den Benutzer spezifizieren, wenn mehrere Benutzer einen Anmeldefensterprozess haben, aber dies ist ein einfacher One-Shot, kein sofortiger Weg, um die grafische Sitzung eines Benutzers zu beenden.

Das hat bei mir in der Vergangenheit funktioniert:

Abmelden (mit Bestätigung)

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

Direkt abmelden (keine Bestätigung)

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

oder

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

Auf diese Weise wird jede laufende Anwendung bemerkt und kann sicher beendet werden.

osascript -e 'tell app "System Events" to «event aevtrlgo»' zeigt Fehler: ein "<" kann nicht nach diesem gehen.
Hm, funktioniert bei mir ok. Können Sie es von einem Shell-Skript anstelle der Befehlszeile versuchen, vielleicht macht die Shell hier ein paar seltsame Sachen.
Ich vermute, das OP hat ein anderes Problem und die normalen Befehle hängen von den Kommentaren hier und der Fragenbeschreibung ab.
Beachten Sie, dass « ≠ <<

Ein nettes Dienstprogramm, das Sie Ihrem Terminal hinzufügen können, ist der Befehl "Logout", der wie folgt verwendet werden kann:

logout UserName

Hier die Anleitung:

  1. Bearbeiten Sie Ihr .bash_profile

    nano ~/.bash_profile

  2. Fügen Sie diese Zeile hinzu:

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

  3. Speichern Sie die Datei mitctrl+x

  4. Starten Sie das Terminal neu

Du bist bereit zu gehen ;)

Ich musste den Körper auf eine neue Zeile ausbrechen und auch die schließende geschweifte Klammer danach setzen.
@bmauter nichts für mich, funktioniert in der vorgeschlagenen Form einwandfrei.
.bash_profile erstellt und hinzugefügt: logout() {sudo launchctl bootout user/$(id -u "$1")}Ich erhalte die folgende Fehlermeldung, wenn ich versuche, sie auszuführen. -bash: logout: FIRSTNAME: numeric argument requiredIch bin verwirrt. Der Befehl funktioniert gut, wenn er direkt im Terminal verwendet wird, aber aus irgendeinem Grund spuckt dies als Bash-Profil oder Bash-Skript diesen Fehler immer wieder aus. Ich frage mich, ob es damit zu tun hat, dass der Benutzername, mit dem ich testen möchte, ein Leerzeichen zwischen Vor- und Nachname enthält. Anscheinend wird der Nachname als Argument interpretiert, der Eintrag in .bash_profile enthält jedoch doppelte Anführungszeichen.

Wenn Sie mehrere Benutzer haben ....

Finden Sie die Prozess-ID mit:

ps aux|grep login

Beenden Sie dann diesen Prozess und Sie haben diese Sitzung abgemeldet. Aber es gibt noch viele Prozesse.

Überprüfen Sie mit pstree, damit Sie wissen, welcher Prozess beendet werden muss.

Das macht den Trick für mich.

sudo -s

Um einige Root-Rechte und die #-Eingabeaufforderung zu erhalten, beenden Sie die Prozesse.

killall -vu username -HUP

Und wenn noch nicht alles weg ist. Nuke sie! Obligatorische Warnung - Das Beenden von Dingen als Root hat kein Rückgängigmachen und kein "Sind Sie sicher, dass Sie diesen Vorgang unterbrechen möchten, ohne Ihre Dateien zu speichern, einschließlich systemkritischer Datenbanken, die den Computer in seltenen Fällen nicht mehr booten können?" Warnungen eingeben.

killall -vu username -9
Sie müssen nicht in die Root-Shell wechseln - stecken Sie einfach sudo vor die killall-Befehle

Eine extreme Möglichkeit, die Benutzersitzung zu beenden, besteht darin, einen Neustart zu erzwingen:

sudo shutdown -r now

Dies funktioniert gut, wenn Sie versuchen, das System zu aktualisieren.

Und Sie können auch die Spinnen in Ihrem Haus töten, indem Sie es niederbrennen. Das Herunterfahren hat den inhärenten Effekt, Benutzer abzustoßen, aber wenn Ihr Ziel nur darin besteht, jemanden abzumelden, ist das Erzwingen eines Neustarts auf der extremen Seite.
Viele Male habe ich diesen verwendet, weil mein Mojave von Prozessen aller Benutzer der Familie wimmelte, die sich AUSGELOGGT haben (normalerweise über die Benutzeroberfläche, alles bestätigen und zurück zum Anmeldefenster). Ich kann wirklich nicht verstehen, warum sich MacOS so verhält - und was (mit Ausnahme von Schwachstellen) gewonnen wird, wenn die Prozesse abgemeldeter Benutzer am Leben erhalten werden. Wie auch immer, die obigen Antworten lassen mich das heilen, ohne neu starten zu müssen (dh mich auch abmelden ...)

Das macht den Trick für mich

sudo -su Benutzer

und für root

sudo -su Wurzel

Wenn Sie mit ssh bei einem Remote-Computer angemeldet sind, können Sie sich abmelden, indem Sie einfach "exit" eingeben:

[host:~user]$ exit