¿Cómo cambio el fondo del escritorio con un comando de terminal?

17

Intento agregar a mi secuencia de comandos de configuración de OS X un comando que establece el fondo para el sin embargo, cuando se aplica, solo se configura en el monitor principal y todos los monitores adicionales actualmente conectados mantienen su fondo actual y los que se agreguen posteriormente recibirán el fondo de espacio predeterminado. Lo que tengo hasta ahora es el siguiente:

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

¿Cómo configuro el fondo gris oscuro predeterminado a través de un comando de terminal? ¿Cómo cambio todos los monitores ya configurados a gris mediante un comando de terminal?

    
pregunta rudolph9 16.02.2012 - 22:54

7 respuestas

19

Ninguna de estas otras soluciones funciona en Mavericks porque Apple movió la configuración a una base de datos sqlite. Pero está bien porque ahora es más fácil, el png puede estar en cualquier parte del sistema de archivos y todos los escritorios (incluso los virtuales) se actualizan.

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

O, agréguelo como una función a su ~ / .bash_profile y llámelo como un comando de terminal con cualquier ruta no relativa.

#   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

    
respondido por el jeremyjjbrown 13.09.2014 - 19:27
13

Esto debería funcionar para usted:

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

Hay varias otras formas en este hilo de Mac Rumores , pero su forma es la más sencilla.

    
respondido por el daviesgeek 16.02.2012 - 23:11
12

La forma más sencilla de hacerlo en una línea:

osascript -e 'tell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Earth Horizon.jpg"'
    
respondido por el aculich 13.10.2014 - 06:23
1

Las rutas deben ser referenciadas correctamente usando POSIX file para /posix/paths o as alias con Old:Mac:Style:Paths .

Elige tu veneno ...

ruta 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

ruta de 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

Puedes convertir fácilmente cualquiera de los Applescripts anteriores en un comando de 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 configurar varios escritorios, puedes probar algo como tell application "System Events" to set picture of every desktop to "<path>" . Desafortunadamente, esto parece haberse roto en 10.7, por lo que terminará recibiendo el siguiente error: Expected class name but found application constant or consideration.

    
respondido por el fny 22.10.2012 - 09:41
1

Combinación de respuesta de jeremyjjbrown y Gist by willurd , la forma más conveniente para El Capitán es la siguiente:

  1. Abra Automator (en Aplicaciones) y cree un nuevo Servicio
  2. Establezca Service receives selected en image files en la parte superior del flujo de trabajo. Opcionalmente, puede limitarlo para que solo funcione en el Finder.

  • Agregue una acción Run Shell Script al flujo de trabajo
  • Vacíe el script predeterminado e inserte una versión ligeramente modificada de respuesta de jeremyjjbrown en el editor:

    read -e IMAGE;
    sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '$IMAGE'";
    killall Dock;
    
  • Guarde el servicio con un nombre de su elección, por ejemplo, Set Desktop Picture on all Spaces .

  • Ahora puede hacer clic con el botón derecho en cualquier imagen directamente desde el Finder y elegir el servicio en el menú contextual, configurando fácilmente el fondo para todos los escritorios.

        
    respondido por el Nit 16.08.2016 - 19:22
    1

    Si prefieres instalar una nueva aplicación para crear una nueva función, usar m-cli es el camino a seguir. Es fácil de usar y tiene muchas otras funciones útiles si las necesita.

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

    m-cli auto detecta la versión del sistema operativo, internamente hace lo mismo que otras respuestas correctas utilizando bash script.

        
    respondido por el Sanghyun Lee 19.02.2017 - 19:41
    0

    Un script en perl para lograr lo mismo:

    #!/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'");
    
        
    respondido por el TheIrishGuy 16.02.2012 - 23:50

    Lea otras preguntas en las etiquetas