Was ist der Mac OS X Terminal-Befehl zum Abmelden des aktuellen Benutzers?


19

Ich möchte so etwas wie "sleep 3600; logout" ausführen, aber der Befehl logout bash schließt nur das aktuelle Terminal. Wie schließe ich die gesamte Mac OS X-Sitzung?

Antworten:


22

Das folgende Applescript meldet den aktuellen Benutzer ab:

tell application "System Events" to log out

Sie können dies mit dem folgenden osascriptBefehl in einen Bash-Alias ​​einschließen :

alias maclogout="osascript -e 'tell application \"System Events\" to log out'"

Dies entspricht dem Klicken auf "> [Benutzername] abmelden ..." und erfolgt nach einer Wartezeit von 2 Minuten die Abmeldung

Dies lässt sich leicht mit dem sleepBefehl kombinieren :

alias delayedlogout="sleep 3600; maclogout"

..oder könnte zu einem einzigen Alias ​​zusammengefasst werden:

alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"

Gut gesagt. Eine Verbesserung für die genaue Beantwortung der Frage wäre die Angabe der "Schlaf" -Syntax in AppleScript. Ich verstehe auch, dass die zweite Codezeile aus dem Terminal eingefügt wurde, aber daher den doppelten Anführungszeichen um Systemereignisse unnötigerweise entgangen ist.
Sacrilicious

@Sacrilicious guter Punkt zum Befehl sleep. Das Escape-Zitat für den Teil "Systemereignisse" ist erforderlich, daalias maclogout="..."
dbr am

2
Ich habe kürzlich festgestellt, dass das Ausführen des Befehls in einem Terminal das System nicht herunterfährt / schließt, da das Terminal selbst das Abmelden verhindert, da bash nicht der aktuelle Prozess ist. Dies kann leicht behoben werden, indem '(sleep 1; Befehl) &' ausgeführt wird, bei dem der Job im Hintergrund in die Warteschlange gestellt wird und das Terminal zum Zeitpunkt der Ausführung denkt, dass er nicht belegt ist.
Grzegorz Adam Hankiewicz

17

Es gibt keine "nette" Möglichkeit, den aktuellen Benutzer in OS X vom Terminal abzumelden loginwindow. Alle Prozesse (Programme), die unter Ihrem Benutzernamen ausgeführt werden, werden grob abgebrochen.

Dies ist ein zweistufiger Prozess.

  1. Führen Sie im Terminal Folgendes aus:

    ps -Ajc | grep loginwindow
    
  2. Dann renne

    sudo kill <pid>
    

    Wo <pid>ist die erste Zahl (zweite Spalte) aus der Ausgabe des obigen Befehls.

Verwenden Sie sudo kill -9, um den Prozess zu erzwingen, den ich ausführen musste, um dies zum Laufen zu bringen.

Wenn also beispielsweise die Ausgabe für den ersten Befehl wie folgt lautet:

joshhunt    41     1    41 5e15c08    0 Ss     ??    3:13.09 loginwindow

Dann würde ich laufen sudo kill 41, mein Passwort eingeben und dann werde ich abgemeldet.

Dies kann zu einem Bash-Alias ​​kombiniert werden:

alias messylogout="ps -Ajc | grep loginwindow | grep -v grep | awk '{print \$2}' | sudo xargs kill"

Könntest du nicht einfach benutzen sudo killall loginwindow? Zumindest ab 10.7 loginwindowscheint der Prozess aber sofort wieder geöffnet zu sein.
Lri

3

Ich weiß, dass dies eine alte Frage ist, aber sie hat mir geholfen. Der Befehl, den ich unter OS X 10.8 benötigte, lautet:

ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9

Die awkAnweisung ist anders und kill -9stellt sicher, dass die Anmeldeaufforderung angezeigt wird.


@gronostaj Glaubst du wirklich, dass eine solche Bearbeitung akzeptiert würde? Ich sehe Änderungsvorschläge wie diese als "ungültige Bearbeitung (Versuch, auf den vorhandenen Beitrag zu antworten oder ihn zu kommentieren)" oder "radikale Änderung" abzulehnen - und markl hat offensichtlich noch nicht genügend Repräsentanten, um Kommentare zu posten.
Scott

@ Scott du hast recht, ich habe diesen Kommentar zu schnell gepostet.
Gronostaj

2

Ich denke, ich habe die Antwort gefunden, wie man sich von Mac OS X anmutig abmeldet, ohne 2 Minuten warten zu müssen.

Ich habe herausgefunden, dass das Halten von Umschalttaste, Wahltaste und Befehl und das Drücken von "q" sich anmutig abmeldet und nicht fragt, ob Sie sich abmelden möchten.

Also habe ich ein AppleScript durch Automator geschrieben, um:

tell application "System Events"
     keystroke "q" using {command down, shift down, option down}
end tell

0

Wenn Sie bei einer Shell als derselbe Benutzer angemeldet sind, der auch bei der Benutzeroberfläche des Mac angemeldet ist, können Sie einen sudo-less-Befehl ausgeben: launchctl reboot logoutDadurch wird der Benutzer ziemlich effektiv abgemeldet . Es hat den Vorbehalt, dass Apps, die gerade beendet werden, beim Beenden nicht zur Interaktion aufgefordert werden. Es scheint jedoch nicht zu implizieren, dass dies das Gleiche ist, als würden sie sofort getötet kill(SIG TERM) oder kill -9(SIG KILL).


0

Ich würde argumentieren, dass der "schönste" Weg nach OS X 10.9 sein könnte launchctl gui/$(id -u <username>) bootout

Die Post-OS-X-10.9-Dokumentation für launchctl wird beim Ausführen gefunden launchctl help, aber der obige Befehl beendet im Wesentlichen die temporäre Sitzung eines Benutzers. Die Alternative beendet launchctl user/$(id -u <username>) bootoutdie permanente Sitzung, in der Benutzerdämonen ausgeführt werden, während der Benutzer nicht angemeldet ist.

Dies kann durch Ausführen getestet werden. Dadurch launchctl gui/$(id -u) bootoutwerden Sie sofort abgemeldet und das System zeigt das Anmeldefenster an (mit einer gewissen Verzögerung).


Zumindest unter El Capitan ist der richtige Befehl, sudo launchctl bootout gui/XXXwo XXXdie numerische Benutzer-ID (UID) ist. Beachten Sie, dass i) der bootoutUnterbefehl an erster Stelle steht und ii) $(id)viel mehr als die UID zurückgibt.
Laryx Decidua

Aktualisiert, um die ID richtig aufzurufen (ID -u)
Iain Henderson

0

Ein nützliches Dienstprogramm, das Sie zu Ihrem Terminal hinzufügen können, ist der Abmeldebefehl , der wie folgt verwendet werden kann:

logout UserName

Hier das Gewusst wie:

  1. Bearbeiten Sie Ihr .bash_profile

    nano ~/.bash_profile

  2. Diese Zeile hinzufügen:

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

  3. Speichern Sie die Datei mit ctrl+x

  4. Starten Sie das Terminal neu

Sie sind bereit zu gehen;)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.