Come posso cambiare lo sfondo del desktop con un comando terminale?


19

Sto cercando di aggiungere al mio script di configurazione di OS X un comando che imposta lo sfondo sul semplice grigio scuro, tuttavia, quando applicato, lo imposta solo sul monitor principale e tutti i monitor aggiuntivi attualmente collegati mantengono il loro sfondo corrente e quelli aggiunti successivamente riceve lo sfondo dello spazio predefinito. Quello che ho finora è il seguente:

# 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; }; }; }'

Come imposto il default sullo sfondo grigio scuro tramite un comando terminale? Come faccio a cambiare tutti i monitor già configurati in grigio tramite un comando terminale?


È un set di comandi abbastanza utile! Mi piace anche il tuo. Alias ​​uno. Grazie!
binarybob,

Non posso prendermi tutto il merito, l'ho biforcuto da Mathiasbynens , ma ho aggiunto la tastiera, il mouse e le impostazioni di sfondo non funzionanti.
rudolph9,

Ohh e la mia velocità di tracciamento del mouse è impostata più in alto di quanto permetteranno le preferenze di sistema :() questo mi grida perché traccia velocemente.
Rudolph9,

Risposte:


22

Nessuna di queste altre soluzioni funziona più su Mavericks perché Apple ha spostato le impostazioni su un DB sqlite. Ma va bene perché ora è più semplice, il png può essere ovunque nel filesystem e tutti i desktop (anche virtuali) vengono aggiornati.

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

Oppure, aggiungilo come funzione al tuo ~ / .bash_profile e chiamalo come comando terminale con qualsiasi percorso non 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


Questa è l'unica cosa che funziona attualmente.
saruftw,

2
@jeremyjjbrown: grazie per la risposta! Sfortunatamente questo non funziona più in macOS Sierra. Hai idea di dove Apple potrebbe ora salvare quale immagine utilizzare come sfondo?
Benjamin Herzog,

Sai come posizionarlo al centro / affiancare / adattare allo schermo ecc.?
BSUK

@BenjaminHerzog La risposta di Sanghyun Lee funziona ancora (su Mojave), basandosi sulla fonte GitHub, non prodotta
Menta

15

Questo dovrebbe funzionare per te:

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

Ci sono molti altri modi su questo thread di Rumors per Mac , ma il suo modo è il più semplice.


Hai avuto questo per funzionare da solo? Non ha funzionato per me.
Rudolph9,

1
mi ha dato./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 il

Ho provato di nuovo con un colore diverso per vedere se aveva qualcosa a che fare con il desktop già impostato su grigio scuro e ottenuto./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 Prova a eseguirlo in AppleScript Editor. Funziona lì? Non l'ho provato, ma credo di averlo fatto in passato.
daviesgeek,

Sulla base della risposta di @ faraz, sembrerebbe che tu debba dire ad Apple Script che stai fornendo un percorso POSIX includendo la parola chiave POSIX prima della parola chiave del file, ad esempiotell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png"
Jason Musgrove

12

Il modo più semplice per farlo in una riga:

osascript -e 'tell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Earth Horizon.jpg"'

Il metodo di utilizzo osascriptfunziona per me solo se corro in killall Dockseguito. Qualcun altro lo nota?
Quinn Comendant,

2

Se si preferisce installare una nuova applicazione per creare una nuova funzione, utilizzare m-cliè la strada da percorrere. È facile da usare e ha molte altre utili funzioni se ne hai bisogno.

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

m-clirileva automaticamente la versione del sistema operativo, fa internamente le stesse cose delle altre risposte corrette usando lo bashscript.


Grazie!! Questo ha funzionato per me su macOS Mojave (anche se è necessario ottenere m-cli dalla fonte Github, poiché la versione brew è obsoleta dal 2017)
Menta,

1

I percorsi devono essere correttamente referenziati usando POSIX fileper /posix/pathso as aliascon Old:Mac:Style:Paths.

Scegli il tuo veleno...

Percorso 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

Percorso 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

Puoi facilmente trasformare uno qualsiasi degli Applescripts sopra in un comando terminale 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'

Per impostare più desktop, puoi provare qualcosa di simile tell application "System Events" to set picture of every desktop to "<path>". Sfortunatamente, questo sembra essere rotto in 10.7, quindi finirai per ottenere il seguente errore:Expected class name but found application constant or consideration.


1

Combinando la risposta di Jeremyjjbrown e questo Gist di Willurd , il modo più conveniente per El Capitan e successivi è il seguente:

  1. Apri Automator (in Applicazioni) e crea un nuovo servizio
  2. Impostato Service receives selectedsu image filesnella parte superiore del flusso di lavoro. Puoi facoltativamente limitarlo per funzionare solo nel Finder.

Immagine di esempio 1

  1. Aggiungi Run Shell Scriptun'azione al flusso di lavoro
  2. Svuota lo script predefinito e inserisci una versione leggermente modificata della risposta di jeremyjjbrown nell'editor:

    read -e IMAGE;
    sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '$IMAGE'";
    killall Dock;
    
  3. Salvare il servizio con un nome a scelta, ad esempio Set Desktop Picture on all Spaces.

Ora puoi fare clic con il pulsante destro del mouse su qualsiasi immagine direttamente dal Finder e scegliere il servizio dal menu di scelta rapida, impostando facilmente lo sfondo per tutti i desktop.


0

Uno script perl per ottenere lo stesso risultato:

#!/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'");

3
No, questo è uno script perl che esegue l'esecuzione di un JavaScript eseguendo la stessa operazione del primo post con un mucchio di codice perl non necessario che immette il file di immagine che deve essere impostato come sfondo.
Rudolph9,

0

Nessuna delle soluzioni menzionate ha funzionato per me su macOS 10.14.2 Sierra e ho finito con questo AppleScript:

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

Può essere eseguito da un terminale del genere:

osascript path_to_applescript_file.scpt

O come oneliner:

osascript -e 'tell application "System Events" to tell every desktop to set picture to "path_to_wallpaper.jpg"'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.