从命令行注销graphics用户

只是好奇而已。

说我有人以正常的方式login到他们的Mac – 即。 一个graphicslogin – 系统变得大多没有响应,我需要登出它们。

我可以使用' sudo reboot '或' shutdown '命令轻松地重新启动系统(如果事情locking了,可能需要保证),但是,是否可以通过远程方式简单地将其注销?可以通过Apple Remote Desktop ?

编辑:有没有一个很好的方式来做到这一点,让他们保存文件,甚至可能取消注销?

如果启用了ssh服务器(远程login共享首选项对话框),您将能够从另一台计算机ssh到Mac,并发出任何你想要的命令。

例如:shutdown -r now

编辑:

 sudo kill WindowServer 

这会将用户注销。

你可以做一些:

 killall -u <username> 

但是这真的很脏。 或者只是杀死他们的login过程。 这几乎就像你有一个窗口框蓝屏。 他们会失去未经保存的工作等

尽pipe如此,我还是不能想出任何其他办法来更优雅地做到这一点。

任何具有pipe理员权限的用户都可以使用launchctl将其注销,前提是这是一个后10.9系统。

sudo launchctl gui/$(id <username>) bootout将会拆除用户的临时会话并将系统返回到login窗口。

您可以参阅launchctl help以获取更多信息。

请记住,用户的临时域(由gui/501或其他用户ID指定)是由该用户的id定义的,系统不会将用户名映射到用户id (但是id将会)。

这几乎可以工作:

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

如果您不介意等待login窗口计时器倒计时,则更容易:

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

现在,虽然您可以通过这种方式(从SSH会话)注销自己,但您会得到:

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

如果你试图给别人(即使是sudo)。

我不确定杀死用户的login方式,并允许他们取消该操作或保存文件,但Lion下的大多数应用程序都会自动保存。 我一直有一个问题,狮子下的屏幕保护程序挂起(我升级到OSX 10.7.4时开始 – 请参阅https://discussions.apple.com/message/18398072 ),我处理它的方式如下。

SSH进入有问题的Mac(这当然假设你可以做到这一点)和

 ps ax | grep [W]indowServer 

这会给你WindowServer的进程ID。 然后

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

Mac会等待一会儿,然后回到login屏幕。

find他们的WindowServer或login过程:

grep WindowServer

find用户进程的pid

sudo kill -9

这假设你是他们电脑上的pipe理员。

杀死Window服务器将把它的所有subprocess。

如果您可以通过SSH以用户身份login,那么您可以使用:

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

在login窗口出现之前,等待将近两分钟。 在我的testing中,注销对话框会在命令给出后的十或十五秒之后才会出现,然后等待六十秒钟,然后就有注销的时间了。

另一种select是用户bmike 在Apple.StackExchange.com中给出的问题的答案 :

 sudo pkill loginwindow