Assistiver Zugriff, wenn das Skript vom Agenten gestartet wird

Problem

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).

Situation

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:

  • Applescript-Editor
  • osascript-Befehlszeile (nicht sudo)

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.dbSQLite-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.

Mögliche Ursache?

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?

Antworten (2)

Eine einfache Lösung besteht darin, das Skript stattdessen als Textdatei zu speichern.

Fügen Sie oben im Skript den osascriptShebang 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 .applescriptErweiterung.

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.

Danke! Ich werde das heute Abend zu Hause ausprobieren und akzeptieren, wenn es funktioniert. Irgendwelche Erkenntnisse darüber, WARUM meine Methode nicht funktioniert? Ich bin neugierig.
Ich habe damit herumgespielt und einen anderen Fehler bekommen, den ich nicht loswerden kann. Das Applescript öffnet eine Datei in einer anderen Anwendung (P-touch Editor v5.1, um genau zu sein). Es bringt mir diesen Fehler: /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?
Ich komme nur 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

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.

Erstellen Sie ein Shellscript, das das Applescript startet

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.shzweimal täglich auf, wie durch den Schlüssel angegeben StartCalendarInterval. Beachten Sie auch die Tasten StandardErrorPathund 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.

Hi! Ich versuche, etwas Ähnliches zu tun - obwohl ich ein Python-Skript ausführen möchte, das AppleScript aufruft, um einige Apple-spezifische Dinge zu tun. Sie erwähnen - "dem Shellscript muss Zugriff auf Hilfsgeräte gewährt werden". Wie haben Sie einem Shell-Skript unterstützenden Zugriff gewährt - diese Schnittstelle scheint nur das Hinzufügen von .app-Dateien zuzulassen. Danke!
@jim70 Zumindest in macOS 10.14 muss im Skript nichts Besonderes getan werden. Wenn es das erste Mal ausgeführt wird, fordert das Betriebssystem den Benutzer auf, dem Skript unterstützenden Zugriff zu gewähren, und wenn es akzeptiert wird, führt es ihn zum entsprechenden Fenster in den Systemeinstellungen. Das Skript wird automatisch zur Liste hinzugefügt, aber nicht aktiviert. Es ist dann Sache des Benutzers, den Zugriff des Skripts manuell umzuschalten.