Como altero o plano de fundo da área de trabalho com um comando terminal?

19

Estou tentando adicionar ao meu script de configuração do OS X um comando que define o plano de fundo para o cinza escuro liso; no entanto, quando aplicado, ele o define apenas para o monitor principal e todos os monitores adicionais conectados no momento mantêm o plano de fundo atual e os itens adicionados posteriormente posteriormente receber o plano de fundo padrão do espaço. O que tenho até agora é o seguinte:

# Change Desktop default BackgroundColor to grey
defaults write com.apple.desktop '{ Background = { default = {BackgroundColor = ( "0.2549019753932953", "0.4117647111415863", "0.6666666865348816" ); Change = Never; ChangePath = "/Library/Desktop Pictures/Solid Colors"; ChangeTime = 1800; DrawBackgroundColor = 1; ImageFileAlias = <00000000 00ce0003 00000000 c73804cd 0000482b 00000000 000c2624 000c2633 0000ca1c 0a310000 00000920 fffe0000 00000000 0000ffff ffff0001 000c000c 2624000c 25fc000a 0789000e 00280013 0053006f 006c0069 00640020 00470072 00610079 00200044 00610072 006b002e 0070006e 0067000f 000c0005 006f0073 00780038 00360012 00394c69 62726172 792f4465 736b746f 70205069 63747572 65732f53 6f6c6964 20436f6c 6f72732f 536f6c69 64204772 61792044 61726b2e 706e6700 00130001 2f00ffff 0000>; ImageFilePath = "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png"; NewChangePath = "/Library/Desktop Pictures/Solid Colors"; NewImageFilePath = "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png"; NoImage = 0; Placement = Crop; Random = 0; }; }; }'

Como definir o padrão de fundo cinza escuro por meio de um comando de terminal? Como altero todos os monitores já configurados para cinza por meio de um comando do terminal?

rudolph9
fonte
Esse é um conjunto de comandos bastante útil! Também gosto do seu .aliases também. Obrigado!
Binarybob
Não posso receber todo o crédito, peguei no mathiasbynens , mas adicionei o teclado, o mouse e as configurações de segundo plano que não funcionam.
precisa
Ohh, e a velocidade de rastreamento do mouse está definida como a velocidade permitida pelas preferências do sistema :() é isso que eu grito porque rastreia rapidamente.
precisa

Respostas:

22

Nenhuma dessas outras soluções funciona mais no Mavericks porque a Apple moveu as configurações para um banco de dados sqlite. Mas tudo bem, porque agora é mais fácil, o png pode estar em qualquer lugar do sistema de arquivos e todos os desktops (mesmo virtuais) são atualizados.

 #!/usr/bin/env bash
 sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '/path/to/any/picture.png'";
 killall Dock;

Ou adicione-o como uma função ao seu ~ / .bash_profile e chame-o como um comando terminal com qualquer caminho não relativo.

#   Update all Wallpapers
function wallpaper() {
    sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '$1'" && killall Dock 
}

wallpaper ~/path/to/any/picture.png

jeremyjjbrown
fonte
Esta é a única coisa que funciona atualmente.
saruftw
2
@jeremyjjbrown: obrigado pela resposta! Infelizmente, isso não está mais funcionando no macOS Sierra. Você tem uma idéia de onde a Apple pode estar salvando agora qual imagem usar como papel de parede?
Benjamin Herzog
Você sabe como colocá-lo no centro / lado a lado / encaixar na tela etc.?
BSUK
@BenjaminHerzog A resposta de Sanghyun Lee ainda funciona (no Mojave), basta construir a partir da fonte do GitHub, não preparar: apple.stackexchange.com/a/273628/1195
Mint
15

Isso deve funcionar para você:

osascript
tell application "Finder"
set desktop picture to POSIX file "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png"
end tell

Existem várias outras maneiras nesse segmento de rumores do Mac , mas o jeito dele é o mais fácil.

daviesgeek
fonte
Você conseguiu que isso funcionasse? Não funcionou para mim.
precisa
1
me deu./a.scpt:31:46: execution error: Finder got an error: Can’t set file "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png" to file "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png". (-10006)
rudolph9
Tentou fazê-lo novamente com uma cor diferente para ver se ele tinha algo a ver com o ambiente de trabalho já sendo definido como cinza escuro e tem./a.scpt:31:46: execution error: Finder got an error: Can’t set file "/Library/Desktop Pictures/Solid Colors/Solid Gray Medium.png" to file "/Library/Desktop Pictures/Solid Colors/Solid Gray Medium.png". (-10006)
rudolph9
@KurtRudolph Tente executá-lo no AppleScript Editor. Isso funciona lá? Eu não tentei, mas acredito que já o fiz.
daviesgeek
Com base na resposta de @ faraz, parece que você precisa dizer a Apple Script que você está fornecendo um caminho POSIX, incluindo a palavra-chave POSIX antes da palavra-chave arquivo, por exemplotell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png"
Jason Musgrove
12

A maneira mais simples de fazer isso em uma linha:

osascript -e 'tell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Earth Horizon.jpg"'
aculich
fonte
O método de usar osascriptfunciona para mim somente se eu for executado killall Dockposteriormente. Alguém mais notou isso?
Quinn Comendant 11/11/2015
2

Se você preferir instalar um novo aplicativo a criar uma nova função, usar m-clié o caminho a percorrer. É fácil de usar e possui muitos outros recursos úteis, se necessário.

brew install m-cli 
m wallpaper ./wallpapers/tree.jpg

m-cliauto detecta a versão do sistema operacional, faça internamente as mesmas coisas que outras respostas corretas usando o bashscript.

Sanghyun Lee
fonte
Obrigado!! Este funcionou para mim no macOS Mojave (embora você precise obter o m-cli da fonte Github, pois a versão brew está desatualizada em 2017)
hortelã
1

Os caminhos precisam ser referenciados corretamente usando POSIX filepara /posix/pathsou as aliascom Old:Mac:Style:Paths.

Escolha seu veneno...

Caminho POSIX:

set desktopImage to POSIX file "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png"
tell application "Finder"
    set desktop picture to desktopImage
end tell

Caminho do Mac:

set localLibrary to path to library folder from local domain as string
set desktopImage to localLibrary & "Desktop Pictures:Solid Colors:Solid Gray Dark.png" as alias

tell application "Finder"
    set desktop picture to desktopImage
end tell

Você pode facilmente transformar qualquer um dos Applescripts acima em um comando terminal usando osascript [-e statement]:

osascript -e 'set desktopImage to POSIX file "/Library/Desktop Pictures/Solid Colors/Solid Gray Light.png"
tell application "Finder"
    set desktop picture to desktopImage
end tell'

Para definir várias áreas de trabalho, você pode tentar algo como tell application "System Events" to set picture of every desktop to "<path>". Infelizmente, isso parece estar quebrado na versão 10.7, então você receberá o seguinte erro:Expected class name but found application constant or consideration.

fny
fonte
1

Combinando a resposta de jeremyjjbrown e este Gist por willurd , a maneira mais conveniente para El Capitan e para cima é a seguinte:

  1. Abra o Automator (em Aplicativos) e crie um novo Serviço
  2. Defina Service receives selectedcomo image filesna parte superior do fluxo de trabalho. Opcionalmente, você pode limitá-lo para funcionar apenas no Finder.

Imagem de amostra 1

  1. Adicionar uma Run Shell Scriptação ao fluxo de trabalho
  2. Esvazie o script padrão e insira uma versão ligeiramente modificada da resposta de jeremyjjbrown no editor:

    read -e IMAGE;
    sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '$IMAGE'";
    killall Dock;
    
  3. Salve o serviço com um nome de sua escolha, por exemplo Set Desktop Picture on all Spaces.

Agora você pode clicar com o botão direito do mouse em qualquer imagem diretamente do Finder e escolher o serviço no menu de contexto, definindo facilmente o plano de fundo para todas as áreas de trabalho.

Nit
fonte
0

Um script perl para realizar o mesmo:

#!/usr/bin/perl
use Cwd;

if ($#ARGV != 1) {
    die "\nUsage: ./changedesktop <filename> <startup disk> \nwhere <filename> may be    any JPEG, PNG, GIF, TIFF or PSD and <startup disk> is the name of your boot volume.\n\n";
}

my $filename = $ARGV[0];
my $bootdisk = $ARGV[1];
my $directory = getcwd;
my $file = $bootdisk.$directory."/".$filename;
$file =~ tr/\//:/;
system("osascript -e \'tell application \"Finder\"\' -e \'set theFile to \"$file\"\' -   e     \'set desktop picture to \(theFile as alias\)\' -e \'end tell'");
TheIrishGuy
fonte
3
Não, esse é um script perl que executa a execução de um osascript executando a mesma operação da primeira postagem com um monte de códigos perl desnecessários inserindo o arquivo de imagem que deve ser definido como plano de fundo.
rudolph9
0

Nenhuma das soluções mencionadas funcionou para mim no macOS 10.14.2 Sierra e acabei com este AppleScript:

tell application "System Events"
    tell every desktop
        set picture to "path_to_wallpaper.jpg"
    end tell
end tell

Pode ser executado a partir de um terminal assim:

osascript path_to_applescript_file.scpt

Ou como um oneliner:

osascript -e 'tell application "System Events" to tell every desktop to set picture to "path_to_wallpaper.jpg"'
sintagma
fonte