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


19

Intento agregar a mi script de configuración de OS X un comando que establece el fondo en el gris oscuro, sin embargo, cuando se aplica, solo lo establece en el monitor principal y cualquier monitor adicional conectado actualmente mantiene su fondo actual y cualquier agregado posterior. recibir el fondo del 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 mediante un comando de terminal? ¿Cómo cambio todos los monitores ya configurados a gris mediante un comando de terminal?


¡Es un conjunto de comandos bastante útil! También me gustan tus .aliases uno también. ¡Gracias!
binarybob

No puedo tomar todo el crédito, lo bifurqué de mathiasbynens , aunque agregué el teclado, el mouse y la configuración de fondo que no funciona.
rudolph9

Ohh, y la velocidad de seguimiento de mi mouse está configurada a una altura alta de lo que las preferencias del sistema permitirán :() eso es lo que me grita porque rastrea rápido.
rudolph9

Respuestas:


22

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 bien, 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


Esto es lo único que funciona actualmente.
saruftw

2
@ jeremyjjbrown: gracias por tu respuesta! Desafortunadamente, esto ya no funciona en macOS Sierra. ¿Tienes una idea de dónde Apple podría estar guardando qué imagen usar como fondo de pantalla?
Benjamin Herzog

¿Sabes cómo llevarlo al centro / mosaico / ajuste a la pantalla, etc.?
BSUK

@BenjaminHerzog La respuesta de Sanghyun Lee todavía funciona (en Mojave), solo compila
Mint

15

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 Rumores de Mac , pero su camino es el más fácil.


¿Conseguiste que esto funcionara por tu cuenta? No me funcionó.
rudolph9

1
me dio./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

Lo intenté de nuevo con un color diferente para ver si tenía algo que ver con el escritorio ya configurado en gris oscuro y obtuve./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 Intente ejecutarlo en el Editor AppleScript. ¿Funciona allí? No lo intenté, pero creo que lo he hecho en el pasado.
daviesgeek

Según la respuesta de @ faraz, parece que necesita decirle a Apple Script que está proporcionando una ruta POSIX al incluir la palabra clave POSIX antes de la palabra clave del archivo, por ejemplotell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png"
Jason Musgrove

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"'

El método de uso osascriptfunciona para mí solo si corro killall Dockdespués. ¿Alguien más lo nota?
Quinn Commandado

2

Si prefiere instalar una nueva aplicación a hacer una nueva función, usar m-clies el camino a seguir. Es fácil de usar y tiene muchas otras características útiles si lo necesita.

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

m-cliauto detecta la versión del sistema operativo, internamente hace las mismas cosas que otras respuestas correctas usando bashscript.


¡¡Gracias!! Este funcionó para mí en macOS Mojave (aunque necesita obtener m-cli de la fuente de Github, ya que la versión de preparación está desactualizada desde 2017)
Mint

1

Las rutas deben ser referenciadas adecuadamente usando POSIX filefor /posix/pathso as aliaswith 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 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

Puede 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, puede intentar algo como tell application "System Events" to set picture of every desktop to "<path>". Desafortunadamente, esto parece estar roto en 10.7, por lo que terminará recibiendo el siguiente error:Expected class name but found application constant or consideration.


1

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

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

Imagen de muestra 1

  1. Agregar una Run Shell Scriptacción al flujo de trabajo
  2. Vacíe el script predeterminado e inserte una versión ligeramente modificada de la respuesta de jeremyjjbrown en el editor:

    read -e IMAGE;
    sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '$IMAGE'";
    killall Dock;
    
  3. Guarde el servicio con el nombre que elija, por ejemplo Set Desktop Picture on all Spaces.

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


0

Un script 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'");

3
No, ese es un script perl que se ejecuta ejecutando un osascript que realiza la misma operación que la primera publicación con un montón de código perl innecesario que ingresa el archivo de imagen que se establecerá como fondo.
rudolph9

0

Ninguna de las soluciones mencionadas funcionó para mí en macOS 10.14.2 Sierra y terminé con este AppleScript:

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

Se puede ejecutar desde una terminal como esa:

osascript path_to_applescript_file.scpt

O como un oneliner:

osascript -e 'tell application "System Events" to tell every desktop to set picture to "path_to_wallpaper.jpg"'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.