Skriptierter schneller Benutzerwechsel bei OSX Lion

1089
Rom1

Ich möchte die schnelle Benutzerumschaltung für eine Reihe von Maschinen automatisieren. Meine derzeitige, kaputte Lösung ist dieses Applescript-Snippet, angepasst an die online gefundenen Leopard / SL-Scripts:

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 

Das Kennwort scheint erfolgreich eingegeben worden zu sein, keystroke returnder Benutzer kann jedoch nicht angemeldet werden (der Bildschirm vibriert, um einen fehlgeschlagenen Versuch anzuzeigen). Das Komische ist, dass das manuelle Drücken der Eingabetaste die Anmeldung abschließt (daher meine Behauptung, dass das Passwort erfolgreich eingegeben wurde).

Irgendwelche Ideen?

Vielen Dank!

2
Keine konkrete Idee, aber vielleicht müssen Sie 'tab' raus und dann den Knopf zum Einloggen drücken? slhck vor 12 Jahren 0
@slhck: nein, habe es versucht, kein Glück. Vielen Dank für den Vorschlag! Rom1 vor 12 Jahren 0
Sie möchten die Umstellung auf den Benutzer lieber automatisieren, als die Eingabe der Passwörter zu automatisieren. Berücksichtigen Sie dabei, dass jedes Ereignis Ihr Skript beschädigen würde. Tom Wijsman vor 12 Jahren 0

2 Antworten auf die Frage

1
Justin

Ich kann Ihnen nicht sagen, was schief gehen könnte, aber hier ist ein Workaround von vor vielen Jahren:

'Auf Intel iMacs' der Anwendung "Systemereignisse" mitteilen, dass sie die Tastenanschläge zurückgeben soll

Im Wesentlichen sagt der Autor dieses Posts, dass in einem sehr ähnlichen Szenario der Return-Schlüssel nur erfolgreich eine Anmeldung bei PowerPC iMacs auslösen würde; Auf Intel-Computern setzt das Skript das Zeitlimit für die Anzeige im Ruhezustand auf 1 Minute, wartet 65 Sekunden und dann, wenn die Anzeige schläft, funktioniert der "Keystroke Return". (!)

Hört sich ziemlich schrecklich an, aber vielleicht können Sie daraus etwas Bearbeitbares anpassen.

0
harrymc

Es scheint zwei Hauptversionen des Skripts zu geben.

Die erste ähnelt Ihrer, mit der Ausnahme, dass "Keystroke Return" zweimal wiederholt wird ( Quelle ):

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  

Jemand hat sogar herausgefunden, dass zweimal nicht genug ist:

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 

Während jemand anderes diese Lösung vorgezogen hat, funktioniert diese Lösung, wenn Sie eine Liste von Benutzern mit der Anzeige "Other ..." im Anmeldefenster sehen:

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 

(Beantwortet von einem Nicht-Mac-Benutzer)