歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> OS X: 用腳本定時登錄Mac電腦

OS X: 用腳本定時登錄Mac電腦

日期:2017/2/28 15:45:59   编辑:Linux教程

遠程登錄:

大家知道有時為了管理/測試方便,比如測試AD用戶登錄配置是否正確,需要登錄到眾多電腦上,使用下面的代碼可以通過ARD等方式,使遠程電腦自動登錄到指定的用戶username。

  1. osascript <<EOT
  2. tell application "System Events" to keystroke "$username"
  3. tell application "System Events" to delay 2
  4. tell application "System Events" to keystroke tab
  5. tell application "System Events" to delay 2
  6. tell application "System Events" to keystroke "$password"
  7. tell application "System Events" to delay 2
  8. tell application "System Events" to keystroke return
  9. EOT

定時登錄需求:

如果需求是無人職守地定時讓系統自動登錄,以便進行特定的管理操作,那麼上面的代碼無法執行。而為什麼ARD可以成功呢?因為,在你從ARD發送Unix命令的時候,選擇了用戶root,也就是說使用root的用戶環境來執行該命令。

因為普通的Unix命令無法訪問GUI程序的安全環境/名字空間,除非在執行該GUI程序的相同用戶環境裡。如果需要使用腳本的方式在無用戶登錄的時候,訪問LoginWindow,就需要使用特殊的命令。

重寫腳本:

launchctl bsexec <PID> <command and args>命令就是通過該進程的PID,使用其它的用戶環境執行後面的命令。

於是可以將上面的命令改寫如下:

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

這樣就可以在無人登錄的時候訪問LoginWindow,並對它輸入字符串。

Copyright © Linux教程網 All Rights Reserved