歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

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

遠程登錄:

大家知道有時為了管理/測試方便,比如測試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.   
  5. logger "AutoLogin Start…."  
  6. sleep 3  
  7.   
  8. PID=`ps -ax | grep loginwindow.app | grep -v grep | tail -n 1 | awk '{print $1}'`   
  9.   
  10. launchctl bsexec $PID osascript -e "tell application \"System Events\" to keystroke \"\""   
  11. launchctl bsexec $PID osascript -e "tell application \"System Events\" to keystroke \"$USERNAME\""   
  12. sleep 2   
  13. launchctl bsexec $PID osascript -e "tell application \"System Events\" to keystroke return"   
  14. sleep 2   
  15. launchctl bsexec $PID osascript -e "tell application \"System Events\" to keystroke \"$PASSWORD\""   
  16. sleep 2   
  17. launchctl bsexec $PID osascript -e "tell application \"System Events\" to keystroke return"   
  18.   
  19. logger "AutoLogin End…."  
  20. exit 0  

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

Copyright © Linux教程網 All Rights Reserved