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,并对它输入字符串。
相关推荐
IT之家 2020-03-11
graseed 2020-10-28
zbkyumlei 2020-10-12
SXIAOYI 2020-09-16
jinhao 2020-09-07
impress 2020-08-26
liuqipao 2020-07-07
淡风wisdon大大 2020-06-06
yoohsummer 2020-06-01
chenjia00 2020-05-29
baike 2020-05-19
扭来不叫牛奶 2020-05-08
hxmilyy 2020-05-11
黎豆子 2020-05-07
xiongweiwei00 2020-04-29
Cypress 2020-04-25
冰蝶 2020-04-20