Atualize o fundo da área de trabalho do Mac OS X a partir de um script

3

Eu tenho um script de shell que é executado por um cron job que atualiza um jpeg. O plano de fundo da área de trabalho no meu monitor externo está definido para esse mesmo arquivo. No entanto, o Mac OS X não atualiza automaticamente o plano de fundo da área de trabalho quando o arquivo é atualizado.

Como faço para forçar o plano de fundo da área de trabalho a ser atualizado a partir do script?

    
por p00ya 02.09.2009 / 06:08

5 respostas

5

Uma maneira apropriada (sem usar outra coisa para chamar seu script) seria adicionar a seguinte linha ao seu script de shell:

osascript -e 'tell Application "Finder"' -e 'set the desktop picture to {"NAME OF STARTUP DRIVE:PATH:TO:PICTURE.jpg"} as alias' -e 'end tell'

Nota: O caminho usa dois pontos em vez de um / e você deve nomear o disco rígido.

Uma alternativa muito mais estranha para os risos, é um kludge maciço de uma solução alternativa é adicionar a seguinte linha ao seu script de shell executado pelo cron:

killall Dock

Isso eliminará o Dock, que quando for reiniciado (automaticamente) atualizará o segundo plano da área de trabalho. Desvantagens? Os ícones da sua estação de aplicativo aberta serão reordenados (se os ícones de aplicativos ainda não tiverem sido salvos em uma posição no dock) e qualquer janela minimizada será desimpedida. Então, se você não usa esses recursos, tudo bem.

    
por 14.09.2009 / 00:02
3

Minha resposta anterior a esta sugada, então aqui está uma melhor.

Eu uso um script de shell e um fluxo de trabalho do Automator para fazer isso. O shell script faz o download da imagem que eu quero, salva em algum lugar e ecoa o caminho completo para a imagem (essa é a parte importante). O fluxo de trabalho do Automator é mais ou menos assim:

[run shell script ~/bin/getAPOD.sh] -> [Set the Desktop Picture]

A ação "Definir a imagem da área de trabalho", até onde eu sei, veio com o Automator.

Eu tenho uma entrada crontab que se parece com isso:

* 4 * * * /usr/bin/open /Users/myuser/bin/APODset.app

Se você quiser, posso postar o script, o fluxo de trabalho do Automator, o que for.

    
por 13.09.2009 / 22:39
1

Aqui está o último applescript que estou usando:

tell application "System Events"
    set myfolder to folder "foo" of the pictures folder
    tell desktop 2 to set picture to file "empty.jpeg" of myfolder as alias
    tell desktop 2 to set picture to file "bar.jpeg" of myfolder as alias
end tell

Isso é passado para osascript do script shell (na verdade, ruby) que atualiza o jpeg.

A questão anteriormente discutida do plano de fundo não atualizar se o novo caminho é o mesmo que o caminho atual (que ainda era um problema com a resposta do Chealion) é hackeado ao mudar temporariamente para "empty.jpeg". Isso é irritante já que a transição é espasmódica, mas é melhor reiniciar o Finder / Dock.

Estou usando o aplicativo System Events porque os exemplos da Apple também .

    
por 30.10.2009 / 08:56
0

Sei que não responde totalmente à sua pergunta, mas esta pode ser interessante para você ler. A maneira como alguém fez isso foi usando um AppleScript que reiniciou o Finder; quando o Finder reinicia, ele automaticamente atualiza a imagem de fundo; não parece haver outro jeito.

    
por 02.09.2009 / 08:38
0

É bem simples fazer isso sem usar um script externo ...

Primeiro, mantenha seu cron job ...

Em segundo lugar, crie uma pasta na qual seu trabalho do cron colocará uma única foto / jpg. Essa pasta deve conter apenas uma única foto / jpg ... (Vários arquivos darão um efeito aleatório, veja abaixo).

Em terceiro lugar, abra as Preferências do Sistema - > Desktop & Protetor de tela - > Guia da área de trabalho

Em quarto lugar, arraste ou use o sinal + para adicionar a nova pasta à sua lista.

Quinto, destaque a pasta na lista de pastas

Em sexto lugar, ative Alterar imagem e escolha um período de tempo.

Você também pode executar um Applescript para redefinir a imagem, mas essa é a maneira mais óbvia e simplista que eu posso ver para fazer isso ...

    
por 02.09.2009 / 16:15

Tags