Melden Sie den grafischen Benutzer über die Befehlszeile ab

7

Meistens nur neugierig.

Angenommen, ich habe jemanden auf normale Weise bei seinem Mac angemeldet - dh. eine grafische Anmeldung - und das System reagiert größtenteils nicht mehr und ich muss sie abmelden.

Ich kann das System einfach genug neu starten (und wenn die Dinge blockieren, kann dies gerechtfertigt sein), indem ich sudo rebootden shutdownBefehl ' ' oder ' ' verwende. Ist es jedoch möglich, sie einfach remote abzumelden, wie dies über Apple Remote Desktop möglich ist?

Bearbeiten: Gibt es eine gute Möglichkeit, Dateien zu speichern oder möglicherweise sogar die Abmeldung abzubrechen?

Clinton Blackmore
quelle

Antworten:

4

Wenn Sie den SSH-Server aktivieren (Dialogfeld "Remote-Anmeldung im Dialogfeld" Freigabeeinstellungen "), können Sie von einem anderen Computer aus auf den Mac ssh und einen beliebigen Befehl ausführen.

Zum Beispiel: Herunterfahren -r jetzt

BEARBEITEN:

sudo kill WindowServer

Dadurch wird der Benutzer abgemeldet.

Garry Harthill
quelle
Vorausgesetzt, ich habe mich in die Box eingeschlichen - kann ich sie abmelden, ohne neu zu starten?
Clinton Blackmore
2
sudo kill WindowServer Hiermit wird der Benutzer abgemeldet.
Garry Harthill
3

Sie könnten eine Art von:

killall -u <username>

Aber das ist wirklich dreckig. Oder beenden Sie einfach den Anmeldevorgang. Dies wäre so ziemlich so, als hätte man einen blauen Windows-Box-Bildschirm auf sich. Sie würden jede nicht gespeicherte Arbeit usw. verlieren.

Ich kann mir keinen anderen Weg vorstellen, es eleganter zu machen.

WerkkreW
quelle
2
Brent
2

Jeder Benutzer mit Administratorrechten kann sie mit launchctl abmelden, wenn es sich um ein Post-10.9-System handelt.

sudo launchctl bootout gui/$(id -u <username>) wird die temporäre Sitzung des Benutzers herunterfahren und das System zum Anmeldefenster zurückkehren.

Sie können sehen , launchctl helpfür weitere Informationen.

Denken Sie daran, dass die temporäre Domäne eines Benutzers (angegeben durch gui/501oder eine andere Benutzer-ID) durch die ID dieses Benutzers definiert wird und das System der Benutzer-ID keinen Benutzernamen zuordnet (dies jedoch idtut).

Iain Henderson
quelle
2

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

logout UserName

Hier das wie:

  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 durch Drücken von ctrl+x

  4. Starten Sie das Terminal neu

Du bist bereit zu gehen;)

Kappe
quelle
1
Das ist geschickt. (Ich wünschte fast, ich wäre noch ein Mac-Administrator und müsste es testen).
Clinton Blackmore
@ ClintonBlackmore Ich benutze es jeden Tag, um meine GF von meinem Mac abzumelden und CPU / Akku zu sparen: D
Kappe
Oh, das ist lustig.
Clinton Blackmore
1

Das funktioniert fast:

echo 'tell application "System Events" ^ log out ^ keystroke return ^ end tell' | tr '^' '\n' | osascript

Wenn es Ihnen nichts ausmacht, auf den Countdown des Anmeldefensters zu warten, ist dies einfacher:

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

Während Sie sich jetzt auf diese Weise abmelden können (von einer SSH-Sitzung), erhalten Sie:

_RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.

Wenn Sie versuchen, es jemand anderem anzutun (auch mit sudo).

Clinton Blackmore
quelle
1

Ich bin mir nicht sicher, wie ich die Anmeldung des Benutzers beenden und ihm erlauben kann, diese Aktion abzubrechen oder eine Datei zu speichern, obwohl die meisten Apps unter Lion automatisch gespeichert werden. Ich hatte ein Problem, bei dem der Bildschirmschoner unter Lion hängt (gestartet, als ich auf OSX 10.7.4 aktualisiert habe - siehe https://discussions.apple.com/message/18398072 ), und wie ich damit umgehe .

SSH in den fraglichen Mac (dies setzt natürlich voraus, dass Sie dies tun können) und

ps ax | grep [W]indowServer

Dadurch erhalten Sie die Prozess-ID des WindowServers. Dann

sudo kill -HUP *{the PID from the previous command}*

Der Mac wartet einige Momente, während er das tut, was er tun muss, und kehrt dann zum Anmeldebildschirm zurück.

Dave Sag
quelle
Das habe ich gebraucht :)
JoshP
0

Finden Sie den WindowServer oder den Anmeldevorgang:

grep WindowServer

Finden Sie die PID des Benutzerprozesses

Sudo töten -9

Dies setzt voraus, dass Sie ein Administrator auf ihrem Computer sind.

Alex
quelle
0

Wenn Sie den Windows-Server beenden, werden alle untergeordneten Prozesse mitgenommen.

Wenn Sie sich über SSH als Benutzer anmelden können, können Sie Folgendes verwenden:

$ alias maclogout="osascript -e 'tell application \"System Events\" to log out' "
$ (sleep 1; maclogout) &

Warten Sie fast zwei Minuten, bis das Anmeldefenster angezeigt wird. In meinen Tests wurde der Abmeldedialog erst zehn oder fünfzehn Sekunden nach Erteilung des Befehls angezeigt. Dann wird eine Wartezeit von 60 Sekunden und dann die Zeit zum Abmelden benötigt.

Fjodor
quelle