Adicionar aplicativo ao OSX “Login Items” do script bash

2

Eu preciso de uma maneira de adicionar um aplicativo aos itens de login a partir de um script de postflight que é executado como parte do meu instalador. Precisa funcionar em 10.5+. De preferência, funcionaria em um script bash. Meu aplicativo já requer direitos administrativos.

A abordagem que encontrei aqui: link parecia estar à direita faixa (incluído abaixo) ... mas não funcionou quando eu tentei na linha de comando e eu não tenho certeza de como fazê-lo instalar para todos os usuários ou se eu precisar adicionar lógica para verificar se ele já está adicionado aos itens de inicialização antes de chamar este código.

#!/bin/bash
/usr/bin/osascript -e "tell application \"System Events\" to make new login item with properties { path: \"$1\", hidden:false } at end"

Eu suspeito que eu também poderia fazer algo com um launchd. Mas não tenho certeza de qual abordagem é a melhor prática para compatibilidade entre versões.

    
por blak3r 09.08.2011 / 04:20

2 respostas

0

A fissão é bem visível.

Há alguns detalhes adicionais sobre como adicionar itens de login do bash na seguinte postagem do stackoverflow:

link

    
por 04.10.2011 / 06:24
2

Se você não se importar com um pouco de leitura, sugiro começar com Apple Nota Técnica TN2083: Daemons e Agentes .

Eu não testei, mas acredito que a maneira mais fácil de fazer o que você quer é através de um launchd agent . Isso envolve essencialmente a remoção de um arquivo plist em /Library/LaunchAgents . Um bom benefício disso é que você pode sobrescrever o mesmo arquivo quantas vezes desejar, e você não deve obter múltiplas instâncias do seu item (por usuário).

Algo como:

    #!/bin/sh
    cat > /Library/LaunchAgents/com.serverfault.myapp.plist << EOT
    <?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.serverfault.myapp</string>
            <key>ProgramArguments</key>
            <array>
                    <string>/Library/MyApp/myapp.app/Contents/MacOS/myapp</string>
            </array>
            <key>RunAtLoad</key>
            <true/>
    </dict>
    </plist>
    EOT

A outra possibilidade é um item de login global . A partir dessa nota técnica mencionada acima, eu recolhi:

  • Um item de login global é um item de login que é iniciado quando qualquer usuário faz login.
  • No Mac OS X 10.5 e posterior, você pode instalar um item de login global usando a interface de listas de arquivos compartilhados no Launch Services [API].
  • Em sistemas anteriores, você pode instalar um item de login [ não um item de login global ] enviando eventos da Apple para o System Events processo. [Então talvez isso não funcione mais confiavelmente a partir de 10.5?]
  • Antes do Mac OS X 10.5, não há maneira de instalar um item de login global. [Uau! Isso é loucura.]

Acredito que muitos aplicativos (antes de launchd em 10.5) costumavam manipular diretamente o arquivo loginwindow.plist . Infelizmente, muitos deles fizeram isso incorretamente - não posso dizer quantos arquivos loginwindow.plist do meio-XML-meio-binário-todo-quebrado que vi.

    
por 09.08.2011 / 07:38