Come cambio sfondo del desktop con un comando di terminale?

17

Sto cercando di aggiungere al mio script di configurazione OS X un comando che imposta lo sfondo al Un semplice grigio scuro, tuttavia, una volta applicato, lo imposta solo sul monitor principale e tutti i monitor aggiuntivi attualmente collegati mantengono il loro background corrente e qualsiasi altro aggiunto successivamente continua a ricevere 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 faccio a impostare il predefinito sullo sfondo grigio scuro tramite un comando del terminale? Come cambio tutti i monitor già configurati in grigio tramite un comando di terminale?

    
posta rudolph9 16.02.2012 - 22:54
fonte

8 risposte

19

Nessuna di queste altre soluzioni funziona 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 una funzione al tuo ~ / .bash_profile e chiamalo come un 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

    
risposta data 13.09.2014 - 19:27
fonte
13

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 Mac Rumors , ma il suo modo è il più facile.

    
risposta data 16.02.2012 - 23:11
fonte
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"'
    
risposta data 13.10.2014 - 06:23
fonte
1

I percorsi devono essere correttamente referenziati usando POSIX file per /posix/paths o as alias con 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 dei suddetti Applescript 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 come tell application "System Events" to set picture of every desktop to "<path>" . Sfortunatamente, sembra essere rotto in 10.7, quindi finirai per ricevere il seguente errore: Expected class name but found application constant or consideration.

    
risposta data 22.10.2012 - 09:41
fonte
1

Combinazione della risposta di jeremyjjbrown e questo Gist di willurd , il modo più conveniente per El Capitan e su è il seguente:

  1. Apri Automator (in Applicazioni) e crea un nuovo servizio
  2. Imposta Service receives selected su image files nella parte superiore del flusso di lavoro. Puoi facoltativamente limitarlo a funzionare solo in Finder.

  • Aggiungi un'azione Run Shell Script al flusso di lavoro
  • 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;
    
  • Salva il servizio con un nome di tua 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.

        
    risposta data 16.08.2016 - 19:22
    fonte
    1

    Se preferisci installare una nuova applicazione per creare una nuova funzione, utilizzare m-cli è la strada da percorrere. È facile da usare e ha molte altre utili funzionalità se necessario.

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

    m-cli rileva automaticamente la versione del sistema operativo, fa internamente le stesse cose delle altre risposte corrette utilizzando lo script bash .

        
    risposta data 19.02.2017 - 19:41
    fonte
    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'");
    
        
    risposta data 16.02.2012 - 23:50
    fonte
    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 come questo:

    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"'
    
        
    risposta data 13.01.2019 - 12:32
    fonte

    Leggi altre domande sui tag