Created
June 26, 2012 13:18
-
-
Save oschrenk/2995746 to your computer and use it in GitHub Desktop.
Keyboard Shortcut for Fast User Switching
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--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 |
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!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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?