1 votos

No se puede cargar un flujo de trabajo como un servicio utilizando launchctl en MacOS

Estoy intentando cargar un flujo de trabajo como un servicio utilizando launchctl en MacOS (Ventura 13.2.1), pero me encuentro con un mensaje de error. El flujo de trabajo se encuentra en /Users/rohan/Library/Services/open-bluetooth-pane.workflow/Contents/Info.plist.

Cuando ejecuto el comando

sudo launchctl load -w /Users/rohan/Library/Services/open-bluetooth-pane.workflow/Contents/Info.plist

Me aparece el mensaje de error "Path had bad ownership/permissions" (Load failed: 122). He comprobado los permisos de las carpetas y archivos implicados, pero todo parece correcto.

He configurado el permiso de la siguiente manera

sudo chown -R rohan:staff /Users/rohan/Library/Services/open-bluetooth-pane.workflow
sudo chmod -R 755 /Users/rohan/Library/Services/open-bluetooth-pane.workflow

Intentando crear un servicio simple usando automator y configurado para ejecutar el applescript que a su vez ejecuta el shell script para abrir el panel Bluetooth.

Aquí está el applescript

on run {input, parameters}

    do shell script "/Users/rohan/Documents/bluetooth-settings.sh"

    return input
end run

aquí está el shell script

#!/bin/bash
open /System/Library/PreferencePanes/Bluetooth.prefPane

Código dentro de Info.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>NSServices</key>
        <array>
                <dict>
                        <key>NSBackgroundColorName</key>
                        <string>background</string>
                        <key>NSIconName</key>
                        <string>NSActionTemplate</string>
                        <key>NSMenuItem</key>
                        <dict>
                                <key>default</key>
                                <string>open-bluetooth-pane</string>
                        </dict>
                        <key>NSMessage</key>
                        <string>runWorkflowAsService</string>
                </dict>
        </array>
</dict>
</plist>

2voto

hjdm Puntos 18

En primer lugar, no necesitas launchctl para asignar ningún atajo de teclado. Simplemente crea un nuevo atajo en Shortcuts.app como este: Shortcuts app with open Bluetooth shell script

Aquí puede ver que puede asignar un atajo de teclado global que ejecutará este servicio.

Volver a launchctl. El archivo plist que carga launchctl no es el archivo Info.plist archivo. Tiene una estructura especial como:

<?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>com.apple.Spotlight</string>
        <key>ProgramArguments</key>
        <array>
            <string>/System/Library/CoreServices/Spotlight.app/Contents/MacOS/Spotlight</string>
        </array>
        <key>KeepAlive</key>
        <true/>
</dict>
</plist>

Aquí está el Sitio web de Apple que explica las claves utilizadas en ese archivo plist.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X