Como atualizar o plano de fundo do ambiente de trabalho do Mac OS X Mavericks a partir de um script

5

Como posso atualizar o plano de fundo da área de trabalho do Mac OS X Mavericks a partir de um script?

Atualizar o plano de fundo da área de trabalho do Mac OS X de um script trabalhou até o OS X 10.8, mas não funciona mais. A área de trabalho é padronizada para o plano de fundo padrão "Wave".

    
por crane 23.10.2013 / 13:47

4 respostas

6

O documento Jan-Yves referenciado parece estar agora com torrada.

Eu uso o SQLite Database Browser 2.0 b1.app no Mavericks. É um pouco antigo, mas ainda funciona.

Se você abrir ~ / Library / Application Support / Dock / desktoppictures.db, poderá ver a tabela de "dados" crucial. É basicamente apenas um caminho para qualquer que seja a foto atual da área de trabalho. No entanto, pode haver várias linhas, dependendo de quantos monitores você está executando. Aparentemente, você pode definir diferentes fotos de desktop por monitor e essa melhora é parte do Mavericks, eu acredito.

Você pode alterar manualmente a (s) linha (s) em seu editor de sqlite e depois fazer um 'killall Dock', desde que se lembre de salvar suas alterações no editor. Isso não é realmente mais fácil do que abrir Prefs do Sistema, mas eu tentei apenas garantir como o sistema funcionava. Provavelmente faz sentido fazer um backup do seu arquivo .db antes de editar manualmente.

De qualquer forma, eu uso alguns scripts de shell pequenos para alterar minha área de trabalho como um aviso para quando eu alterei o arquivo de hosts.

O script completo se parece com:

#!/bin/sh
sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '/Users/user/Documents/My Pictures/dlanham_Phobos.sitechange.jpg'";
killall Dock;

Você pode adicionar um argumento facilmente para permitir mais controle sobre a imagem, mas essa é a lógica básica.

Você verá algumas postagens recomendando um extra "where rowid = 1". Para os meus propósitos, permito que a área de trabalho seja alterada para todos os monitores, por isso deixo de fora o rowid. Vai atualizar várias linhas.

espero que isso ajude.

    
por 17.12.2013 / 22:24
3

O Mavericks mudou onde armazena informações de segundo plano da área de trabalho. Ela costumava estar em ~/Library/Preferences/com.apple.desktop.plist (como um arquivo binário plist) e agora está em ~/Library/Application Support/Dock/desktoppictures.db (como um arquivo SQLite). Se você abri-lo (acho sqlite3 vem como padrão com o OS X? Caso contrário, você deve ser capaz de encontrar um aplicativo SQLite DB - eu uso Base mas pode haver algo melhor lá fora), você notará que tem nomes de arquivos em segundo plano na área de trabalho da tabela data . As outras tabelas são interessantes, mas um pouco mais enigmáticas. Basicamente, você pode executar uma consulta UPDATE na tabela para alterar o plano de fundo da área de trabalho de um determinado espaço, por exemplo:

UPDATE data SET value=~/Pictures/foo.png WHERE ROWID=1

Eu apenas resolvi isso: um pouco mais de detalhes está disponível aqui .

[ETA: link fixo]

    
por 01.11.2013 / 23:16
0

Eu não consegui mais usar o appscript obsoleto, então mudei para PyObjc.

Usando o python 2.7 de Macports com o pacote py27-pyobjc-cocoa instalado:

#!/opt/local/bin/python2.7

from AppKit import NSWorkspace, NSScreen
from Foundation import NSURL

def change_desktop_background(file, desk_id):
    file_url = NSURL.fileURLWithPath_(file)
    ws = NSWorkspace.sharedWorkspace()
    screen = NSScreen.screens()[desk_id]
    ws.setDesktopImageURL_forScreen_options_error_(file_url, screen, {}, None)

# Change my second screen desktop
change_desktop_background("myfile.jpg", 1)
    
por 15.11.2013 / 21:27
0

Eu tenho tentado fazer isso funcionar no osx Yosemite, e através de uma combinação da resposta do @yelling_monster e do script bash antigo que costumava trabalhar no leão da montanha, eu fiz isso:

#! /bin/bash

echo -n "Drag and drop an image file here and hit 'return' (or ctrl-c to cancel)
"
 read -e WLPR;
function change_wallpaper
 {
#!/bin/sh
sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '$WLPR'";
killall Dock;
 }
 change_wallpaper

Faça o backup de seu desktoppicture.db com um simples

cp ~/Library/Application\ Support/Dock/desktoppicture.db{,-bkp}

Siga as instruções no site que eu criei para tornar o script executável (chame de algo mais legal como wpset ) e você está pronto para ir.

Uma vez executado, você ainda pode alterar individualmente o plano de fundo de um monitor via Desktop & screensaver nas preferências do sistema, o que é útil para um segundo monitor (a antiga imagem do botão direito do mouse no menu de contexto finder - > qualquer coisa embora)

    
por 14.12.2016 / 06:55