Applescript, das von osascript ausgeführt wird, hat keinen unterstützenden Zugriff, wenn es von einem Agenten ( ~/Library/LaunchAgents
) gestartet wird. Obwohl es funktioniert, wenn es vom Applescript-Editor oder direkt über die Befehlszeile ausgeführt wird (mit Osascript).
Das Applescript führt mehrere GUI-Aufgaben für den Stapeldruck aus und wird zweimal täglich ausgeführt. Daher benötigt es eine Berechtigung für den Zugriff auf Hilfsgeräte und wird von einem Agenten gestartet.
Das Skript wird wie erwartet ausgeführt, wenn es gestartet wird von:
Wenn es vom Agenten gestartet wird, gibt es Folgendes zurück:
/location/of/my.scpt: execution error: System Events got an error: osascript does not have access to assistive devices. (-25211)
(Nachricht von mir aus dem Niederländischen übersetzt.)
Dies führte mich zu der Annahme, dass das Problem mit osascript zusammenhängt, aber wie ich oben erwähnte, funktioniert es gut, wenn es direkt über die Befehlszeile eingegeben wird mit: osascript /location/of/my.scpt
.
Außerdem habe ich basierend auf diesen beiden Posts die /Library/Application\ Support/com.apple.TCC/TCC.db
SQLite-Datenbank bearbeitet, und wenn ich die Tabelle „access“ überprüfe, wird Folgendes angezeigt:
$ sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "SELECT * FROM access"
Password:
kTCCServiceAccessibility|com.logitech.gaming|0|1|0|??
kTCCServiceAccessibility|com.valvesoftware.steam|0|1|0|??
kTCCServiceAccessibility|com.blizzard.starcraft2|0|0|1|
kTCCServiceAccessibility|com.apple.AccessibilityInspector|0|1|0|??
kTCCServiceAccessibility|com.apple.ScriptEditor2|0|1|0|??
kTCCServiceAccessibility|com.apple.Terminal|0|1|0|??
kTCCServiceAccessibility|/usr/bin/osascript|1|1|1|
kTCCServiceAccessibility|com.my.label|0|1|1|
kTCCServiceAccessibility|/osascript|1|0|1|
Wie Sie sehen können, ist osascript der Zugriff erlaubt und ich habe auch die .plist meines Agenten zur Sicherheit hinzugefügt.
Das einzige, was mir einfällt, ist, dass das Skript aus irgendeinem Grund von einem „anderen Benutzer“ ausgeführt wird, wenn es von einem Agenten gestartet wird, und daher verschiedene Hilfsgeräte zugelassen sind. Scheint jedoch unwahrscheinlich, da die TCC.db nicht benutzerspezifisch zu sein scheint und der Agent in ~/Library/LaunchAgents
.
Hilfe, jemand?
Eine einfache Lösung besteht darin, das Skript stattdessen als Textdatei zu speichern.
Fügen Sie oben im Skript den osascript
Shebang hinzu
#!/usr/bin/osascript
Beispiel:
#!/usr/bin/osascript
say "hello"
tell application "Safari" to activate
tell application "System Events"
delay 2
keystroke "p" using command down
tell application process "Safari"
tell application "System Events"
tell process "Safari"
click menu button "PDF" of sheet 1 of window 1
delay 1
click menu item "Save PDF to Web Receipts Folder" of menu of menu button "PDF" of sheet 1 of window 1
end tell
end tell
end tell
end tell
Wählen Sie im Speichern-Dialog Text als Dateiformat. Die Datei wird als einfacher Text gespeichert, jedoch mit der .applescript
Erweiterung.
Machen Sie im Terminal die Textdatei des Speicherskripts ausführbar.
Ich benutzte:
chmod +x /Users/UserName/Scripts/newTest1.applescript
Fügen Sie in den Befehlsargumenten des LaunchAgents einfach den Pfad zur Datei hinzu.
Fügen Sie den Argumenten nicht den osascript-Befehl hinzu . Du brauchst es nicht.
Die gespeicherte Skript-Textdatei verhält sich wie ein ausführbares Shell-Skript.
Wenn Sie die LaunchAgents zum ersten Mal laden oder ausführen, werden Sie aufgefordert, den unterstützenden Zugriff in den Systemeinstellungen festzulegen. Wenn Sie die Systemeinstellungen bereits geöffnet haben, wird dies nicht der Fall sein, aber die Skript-Textdatei wird der Liste hinzugefügt.
Sie müssen jetzt nur noch das Kontrollkästchen aktivieren, um es zuzulassen.
Ich würde den LaunchAgent neu laden, damit er sofort funktioniert.
Ich habe dies mit dem obigen Skript doppelt überprüft und alles funktioniert wie erwartet.
Obwohl ich die Frage von @markhunte akzeptiert habe, weil sie im allgemeinen Fall funktioniert, hat sie bei mir nicht funktioniert. Deshalb poste ich als Alternative meine eigene Lösung.
Indem der Launchagent ein Shellscript ausführt, das einfach das Applescript (.scpt) aufruft, muss dem Shellscript einmal Zugriff auf Hilfsgeräte gewährt werden, und es kann vom Launchagent ausgeführt werden, um wiederum das Applescript aufzurufen.
In meinem Fall landete ich bei der folgenden LaunchAgent .plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.mylabel.some-awesome-utility</string>
<key>Program</key>
<string>/Users/username/absolute/path/to/shellscript.sh</string>
<key>StandardErrorPath</key>
<string>/tmp/com.mylabel.some-awesome-utility.err</string>
<key>StandardOutPath</key>
<string>/tmp/com.mylabel.some-awesome-utility.out</string>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Hour</key>
<integer>06</integer>
<key>Minute</key>
<integer>05</integer>
</dict>
<dict>
<key>Hour</key>
<integer>20</integer>
<key>Minute</key>
<integer>05</integer>
</dict>
</array>
</dict>
</plist>
Dieser LaunchAgent ruft shellscript.sh
zweimal täglich auf, wie durch den Schlüssel angegeben StartCalendarInterval
. Beachten Sie auch die Tasten StandardErrorPath
und StandardOutPath
, die beim Debuggen nützlich waren.
Die Shellscript.sh ist extrem einfach:
#!/bin/sh
osascript /Users/mnmt/Documents/InCuffs/Orders/PrepareShipping/print-shipping-labels.scpt
Wie Sie sehen können, eine einfache Shebang-Zeile, um anzugeben, dass es sich tatsächlich um ein Shellscript handelt, gefolgt von einem einzelnen Aufruf des Applescripts, das ich ursprünglich direkt vom LaunchAgent aufgerufen hatte.
Martin
Martin
/path/to/script.applescript:1226:1292: execution error: LSOpenURLsWithRole() failed with error -10810 for the file /path/to/templatefile.lbx. (1)
. Die Ausführungsbits wurden sowohl in den .applescript- als auch in den .lbx-Dateien gesetzt. Ich nehme an, das hat etwas damit zu tun, das Applescript in Text umzuwandeln?strobel
execution error: System Events got an error: osascript is not allowed assistive access. (-1719)
in meine Protokolldatei und werde nicht von den Systemeinstellungen in 10.12.6 aufgefordert