Bash Script que llama a osascript deja de funcionar cuando se ejecuta por launchd

Estoy tratando de solucionar un problema con un script bash que se llama mediante launchd. Aquí hay un resumen rápido

  • Llamar al script manualmente solo funciona bien sin errores.
  • Dentro del script bash llama a un AppleScript que publica una notificación que AppleScript funciona bien.
  • El .plist se carga y se inicia en el intervalo correcto y llama al script bash. Entonces eso funciona correctamente
  • El .plist se llama desde /Library/LaunchDaemons (para que pueda ejecutarse independientemente de si hay alguien conectado o no). Esto significa que todo se ejecuta como root.

El problema ocurre dentro del script bash que llama a un AppleScript para publicar una notificación, simplemente nunca sucede.

  • Cerrar el Dock y la barra superior
  • ¿Qué podría estar impidiendo que se ejecute mi script de copy de security?
  • Guarde la session de la Terminal Mac en el file de text
  • ¿Cómo copio el contenido de un disco completo en OSX 10.3?
  • ¿Por qué "si existe" falla con un falso positivo?
  • Convierte el command .bat para asignar la unidad compartida a AppleScript
  •  #!/bin/bash # ------------------------------------------------------------------ sleep 11 echo "This is a test" > test.txt /usr/bin/osascript /Users/allan/Documents/Scripts/AppleScript/notify.scpt "This is a test" "-Test Test Test" "nosound" exit 0 

    Eso es. Un resumen rápido de lo que estoy haciendo:

    1. sleep 11 – launchd necesita un min. de 10 segundos de time de ejecución del progtwig por defecto. Acabo de poner esto aquí para acomodar launchd
    2. echo "This is a test" : simplemente escribo una cadena simple en un file de text para asegurarme de que se está llamando al script bash. Este file se crea con la cadena esperada ; esto funciona.
    3. /usr/bin/osascript /Users......blah blah blah... esto falla . Esto es solo un AppleScript simple que toma tres arguments (cuerpo, título y sonido) para proporcionar una notificación.

    Funcionando solo o bash script que lo llama, funciona:

    enter image description here

    Cuando se llama al script bash desde launchd, parece que simplemente no funciona. ¿Alguien puede señalarme en la dirección correcta? ¿Qué me estoy perdiendo?

    (OS X 10.11.6)


    Este es el .plist que estoy usando (sí, sé que está configurado para un intervalo de 45 segundos … estoy probando)

     <?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.user.podcastCleanup</string> <key>Program</key> <string>/Users/allan/Documents/Scripts/Unix/podcastCleanup.sh</string> <key>StartInterval</key> <integer>45</integer> <key>WorkingDirectory</key> <string>/Users/allan/Documents</string> </dict> </plist> 


    A continuación está el notify.scpt AppleScript que se utiliza para generar la notificación.

     on run argv set Message to item 1 of argv set Title to item 2 of argv set aud to item 3 of argv set STitle to "Terminal" set Snd to "Blow.aiff" if (aud = "sound") then display notification Message with title Title subtitle STitle sound name Snd else display notification Message with title Title subtitle STitle end if end run 

  • ¿Cómo hago un lanzamiento de AppleScript tan pronto como sale del protector de pantalla?
  • ¿Cómo puedo eliminar los files de copy de security de Time Machine en Netgear ReadyNAS?
  • Pausar las notifications del calendar durante las presentaciones
  • Se eliminaron accidentalmente algunas particiones de pequeño tamaño al instalar Windows. La partición OSX no arranca
  • ¿Cómo uso Applescript con Keynote?
  • No puedo enviar GMAIL utilizando Outlook 2016
  • One Solution collect form web for “Bash Script que llama a osascript deja de funcionar cuando se ejecuta por launchd”

    Se requiere una session de usuario gráfica

    El error ocurre porque los commands en su osascript requieren una session gráfica de usuario . AppleScript requiere una session gráfica de usuario para funcionar.

    El trabajo de launchd se ejecuta como el usuario root en una session de usuario no gráfica.

    Enfoque alternativo

    En estas situaciones, el enfoque típico es dividir daemons en dos partes: una computadora de ancho y otra dentro de cada session gráfica de usuario. Con frecuencia se usa un tubo o zócalo para comunicarse.

    Incluso como usuario root , existen barreras que no se pueden cruzar en macOS.

    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).