Cómo hacer que un servicio funcione al iniciarse

3

Hace un tiempo, escribí algunos servicios y les asigné combinaciones de teclas. El problema es que, aunque los servicios están bajo el elemento del menú Archivo de la aplicación, debo invocarlos manualmente la primera vez, luego puedo usar la combinación de teclas. ¿Hay alguna forma de poder utilizar los servicios cuando inicie la aplicación por primera vez? Miré esta respuesta , pero preferiría usar una aplicación de terceros solo si es absolutamente necesario.

    
pregunta Tolga Ozses 09.12.2016 - 13:09

1 respuesta

1

Puedes hacer que esto funcione con launchd. Esto requiere dos pasos: primero, crear un script que invoque su (s) servicio (s), y segundo crear un archivo plist LaunchAgent que llamará al script en el inicio.

Primer paso: crear un script que invoque su (s) servicio (s)

  1. Escriba un archivo de texto con el siguiente contenido, donde ~/Library/Services/myservice.workflow apunta al servicio que desea iniciar (si desea iniciar más de un servicio, repita la segunda línea que apunta a los diferentes servicios):

    #!/bin/bash
    automator ~/Library/Services/myservice.workflow
    
  2. Guarda el archivo, por ejemplo, como ~/Library/LaunchAgents/me.myname.launchmyservice.sh

  3. Hazlo ejecutable emitiendo el siguiente comando en la Terminal:

    chmod u+x ~/Library/LaunchAgents/me.myname.launchmyservice.sh
    

Segundo paso: crear una lista de LaunchAgent que llame al script

  1. Escriba un archivo de texto con el siguiente contenido. Debe adaptar la cadena /Users/myusername/Library/LaunchAgents/me.myname.launchmyservice.sh para que apunte al script creado en el primer paso. No puedes usar una ruta relativa con ~ .

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
      <key>Label</key>
      <string>me.myname.launchmyservice</string>
      <key>ProgramArguments</key>
      <array>
        <string>/Users/myusername/Library/LaunchAgents/me.myname.launchmyservice.sh</string>
      </array>
      <key>RunAtLoad</key>
      <true/>
    </dict>
    </plist>
    
  2. Guarde el archivo de texto en ~/Library/LaunchAgents/me.myname.update-desktop-from-webcam.plist ; el nombre debe coincidir con la tecla "Etiqueta" del archivo.

  3. Cárguelo emitiendo el siguiente comando:

    launchctl load ~/Library/LaunchAgents/me.myname.update-desktop-from-webcam.plist
    
respondido por el mach 05.02.2017 - 22:21

Lea otras preguntas en las etiquetas