我想自动为一组机器实现快速用户切换。我目前失败的解决方案是这个 applescript 代码片段,改编自在线找到的 Leopard/SL 脚本:
set thePassword to "foo"
set N to "1027"
do shell script "/System/Library/CoreServices/Menu\\ Extras/User.menu/Contents/Resources/CGSession -switchToUserID " & N
delay 0.8
tell application "System Events"
keystroke thePassword
delay 1
keystroke return
end tell
密码似乎输入成功,但keystroke return
无法登录用户(屏幕“振动”表示尝试失败)。有趣的是,手动按下回车键确实完成了登录(因此我断言密码输入成功)
有任何想法吗?
谢谢!
答案1
我无法告诉您可能出了什么问题,但这是多年前的一个解决方法:
在 Intel iMac 上“告诉应用程序‘系统事件’按键返回”
本质上,这篇文章的作者说,在非常相似的情况下,返回键只能在 PowerPC iMac 上成功触发登录;在 Intel 机器上,脚本将显示睡眠超时设置为 1 分钟,等待 65 秒,然后不知何故,一旦显示器进入睡眠状态,“按键返回”就会起作用。(!)
听起来很糟糕,但也许你可以从中调整出一些可行的方法。
答案2
目前似乎有两个主要版本的剧本在流传。
第一个与您的类似,只是“按键返回”重复了两次(来源):
osascript <<EOF
tell application "System Events"
keystroke "USERNAME"
keystroke tab
delay 0.5
keystroke "PASSWORD"
delay 0.5
keystroke return
keystroke return
end tell
EOF
某人甚至发现两次是不够的:
osascript <<EndOfMyScript
tell application "System Events"
keystroke "USERNAME"
keystroke tab
delay 0.5
keystroke "PASSWORD"
delay 0.5
keystroke return
keystroke tab
delay 0.5
keystroke "PASSWORD"
delay 0.5
keystroke return
keystroke return
keystroke return
keystroke return
keystroke return
end tell
EndOfMyScript
尽管其他人更喜欢这个解决方案,如果您在登录窗口中显示带有“其他......”的用户列表,它将起作用:
osascript <<EOT
set username_ to "username"
set password_ to "password"
tell application "System Events"
key code 125 -- Down Arrow
key code 125 -- Down Arrow
delay 1
key code 125 -- Down Arrow
key code 125 -- Down Arrow
key code 125 -- Down Arrow
key code 125 -- Down Arrow
key code 125 -- Down Arrow
key code 125 -- Down Arrow
delay 0.5
key code 36 -- Return
delay 1
tell process "SecurityAgent" to set value of text field 1 of group 1 of window 1 to username_
tell process "SecurityAgent" to set value of text field 2 of group 1 of window 1 to password_
click button "Log In" of window 1 of application process "SecurityAgent"
end tell
EOT
(由非 Mac 用户回答)