OS X: 用脚本定时登录Mac电脑

大家知道有时为了管理/测试方便,比如测试AD用户登录配置是否正确,需要登录到众多电脑上,使用下面的代码可以通过ARD等方式,使远程电脑自动登录到指定的用户username。

osascript <<EOT    tell application "System Events" to keystroke "$username"    tell application "System Events" to delay 2    tell application "System Events" to keystroke tab    tell application "System Events" to delay 2    tell application "System Events" to keystroke "$password"    tell application "System Events" to delay 2    tell application "System Events" to keystroke return    EOT 

定时登录需求:

如果需求是无人职守地定时让系统自动登录,以便进行特定的管理操作,那么上面的代码无法执行。而为什么ARD可以成功呢?因为,在你从ARD发送Unix命令的时候,选择了用户root,也就是说使用root的用户环境来执行该命令。

因为普通的Unix命令无法访问GUI程序的安全环境/名字空间,除非在执行该GUI程序的相同用户环境里。如果需要使用脚本的方式在无用户登录的时候,访问LoginWindow,就需要使用特殊的命令。

重写脚本:

launchctl bsexec <PID> <command and args>命令就是通过该进程的PID,使用其它的用户环境执行后面的命令。

于是可以将上面的命令改写如下:

#!/bin/sh     USERNAME="username"   PASSWORD="passsword"       logger "AutoLogin Start…."   sleep 3      PID=`ps -ax | grep loginwindow.app | grep -v grep | tail -n 1 | awk '{print $1}'`       launchctl bsexec $PID osascript -e "tell application \"System Events\" to keystroke \"\""    launchctl bsexec $PID osascript -e "tell application \"System Events\" to keystroke \"$USERNAME\""    sleep 2    launchctl bsexec $PID osascript -e "tell application \"System Events\" to keystroke return"    sleep 2    launchctl bsexec $PID osascript -e "tell application \"System Events\" to keystroke \"$PASSWORD\""    sleep 2    launchctl bsexec $PID osascript -e "tell application \"System Events\" to keystroke return"       logger "AutoLogin End…."   exit 0  

这样就可以在无人登录的时候访问LoginWindow,并对它输入字符串。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/21507.html