-
-
Save oschrenk/2995746 to your computer and use it in GitHub Desktop.
| --This script MUST be named "Switch to <User>.scpt", where <User> is the name of the user to switch to. | |
| --You must first make a password item (a.k.a. a key) for the other user's password using Keychain Access, | |
| --and call it "<user>", where "<user>" is the other user's name.the field "Kind" must be "User Login" (without quotes). | |
| --The script assumes that you make this key in your login.keychain, which is the default one. | |
| --The first time you run this script, you will be prompted to allow Keychain Scripting to access the password of the key. | |
| --This script requires "Enable access for assistive devices" to be enabled in the Universal Access system preference pane. | |
| set username to word -1 of my findReplace(".scpt", "", (path to me as text)) | |
| -- Invoke Fast User Switching. The `id -ur username` part gets the uid number that corresponds to the username and substitutes it at the end of the CGSession command | |
| do shell script "/System/Library/CoreServices/'Menu Extras'/User.menu/Contents/Resources/CGSession -switchToUserID `id -ur " & username & "`" | |
| -- Use universal access to enter the text and to click the button | |
| tell application "System Events" | |
| repeat | |
| if (do shell script "stat -f %Su /dev/console") is username then exit repeat | |
| -- Get the password for the username | |
| try | |
| set pswd to (do shell script "security find-generic-password -g -s \"" & username & "\" -D \"User Login\" 2>&1 1>/dev/null | sed -e 's/password: \"//' -e 's/\"//'") | |
| on error | |
| exit repeat | |
| end try | |
| if exists window 1 of application process "SecurityAgent" then | |
| tell process "SecurityAgent" to set value of text field 1 of window 1 to pswd | |
| key code 36 | |
| exit repeat | |
| else | |
| tell application "SecurityAgent" to quit | |
| do shell script "/System/Library/CoreServices/'Menu Extras'/User.menu/Contents/Resources/CGSession -switchToUserID `id -ur " & username & "`" | |
| end if | |
| end repeat | |
| end tell | |
| on findReplace(findText, replaceText, sourceText) | |
| set ASTID to AppleScript's text item delimiters | |
| set AppleScript's text item delimiters to findText | |
| set sourceText to text items of sourceText | |
| set AppleScript's text item delimiters to replaceText | |
| set sourceText to sourceText as text | |
| set AppleScript's text item delimiters to ASTID | |
| return sourceText | |
| end findReplace |
either using fast script or alfred (not both)
What are the following errors being caused by?
--> error number -1708
«event ascrgdut»
--> error number -1708
do shell script "stat -f %Su /dev/console"
--> error number -10004
*and yes, realized that as soon as I had pasted it... luckily, a test account, literally, but even though I updated the comment, is the previous revision still available?
I don't know what these errors are, but a quick google search offers this and many others.
I have no time to investigate more. As the script works for me, I'll have to leave it to you.
Running 10.10.2, I had to change "-s" to "-l" in the line "set pswd to (do shell script..." for it to successfully find the key, but otherwise, I had no problems. This was great. Thanks!
How do you invoke the script?
Sometimes the script will behave strange. This is not a problem with the script though in my opinion. I run it by invoking it via Quicksilver and sometimes it will look like it was invoked multiple times opening the SecurityAgent window multiple times. This occurs maybe 1% of the time so I can live with it.
RIght above the comment box there is a link to GitHub Flavored Markdown which will help you understand how Github deals with Markdown.