Comment changer l'arrière-plan du bureau avec une commande de terminal?

19

J'essaie d'ajouter à mon script de configuration OS X une commande qui définit l'arrière-plan sur le gris foncé uni, cependant, lorsqu'elle est appliquée, elle ne le définit que sur le moniteur principal et tous les moniteurs supplémentaires actuellement connectés conservent leur arrière-plan actuel et tous ceux ajoutés par la suite encore recevoir l'arrière-plan de l'espace par défaut. Ce que j'ai jusqu'à présent est le suivant:

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

Comment définir la valeur par défaut le fond gris foncé via une commande de terminal? Comment changer tous les moniteurs déjà configurés en gris via une commande de terminal?

rudolph9
la source
C'est un ensemble de commandes assez utile! J'aime aussi votre .aliases. Merci!
binarybob
Je ne peux pas prendre tout le crédit, je l'ai créé à partir de mathiasbynens , j'ai cependant ajouté le clavier, la souris et les paramètres d'arrière-plan qui ne fonctionnent pas.
rudolph9
Ohh et la vitesse de suivi de ma souris est réglée plus haut que les préférences du système ne le permettront :() c'est moi qui crie parce qu'il suit rapidement.
rudolph9

Réponses:

22

Aucune de ces autres solutions ne fonctionne plus sur Mavericks car Apple a déplacé les paramètres vers une base de données sqlite. Mais c'est ok parce que maintenant c'est plus facile, le png peut être n'importe où dans le système de fichiers, et tous les bureaux (même virtuels) sont mis à jour.

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

Ou, ajoutez-le en tant que fonction à votre ~ / .bash_profile et appelez-le en tant que commande de terminal avec un chemin non relatif.

#   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
la source
C'est la seule chose qui fonctionne actuellement.
saruftw
2
@jeremyjjbrown: merci pour votre réponse! Malheureusement, cela ne fonctionne plus dans macOS Sierra. Avez-vous une idée où Apple pourrait maintenant enregistrer l'image à utiliser comme fond d'écran?
Benjamin Herzog
Savez-vous comment l'amener au centre / carreau / s'adapter à l'écran, etc.?
BSUK
@BenjaminHerzog La réponse de Sanghyun Lee fonctionne toujours (sur Mojave), il suffit de construire à partir de la source GitHub, pas de brew: apple.stackexchange.com/a/273628/1195
Mint
15

Cela devrait fonctionner pour vous:

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

Il existe plusieurs autres façons sur ce fil Mac Rumors , mais sa manière est la plus simple.

daviesgeek
la source
L'avez-vous fait fonctionner vous-même? Ça n'a pas marché pour moi.
rudolph9
1
m'a donné./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
Je l'ai essayé à nouveau avec une couleur différente pour voir si cela avait quelque chose à voir avec le bureau déjà réglé sur gris foncé et obtenu./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 Essayez de l'exécuter dans AppleScript Editor. Ça marche là-bas? Je ne l'ai pas essayé, mais je crois que je l'ai fait dans le passé.
daviesgeek
Sur la base de la réponse de @ faraz, il semblerait que vous deviez dire à Apple Script que vous fournissez un chemin POSIX en incluant le mot clé POSIX avant le mot clé file, par exempletell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png"
Jason Musgrove
12

La façon la plus simple de le faire en une seule ligne:

osascript -e 'tell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Earth Horizon.jpg"'
aculich
la source
La méthode d'utilisation ne osascriptfonctionne pour moi que si je cours killall Dockaprès. Quelqu'un d'autre le remarque-t-il?
Quinn Comendant
2

Si vous préférez installer une nouvelle application plutôt que de créer une nouvelle fonction, m-clic'est la voie à suivre. Il est facile à utiliser et possède de nombreuses autres fonctionnalités utiles si vous en avez besoin.

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

m-clidétecte automatiquement la version du système d'exploitation, fait en interne les mêmes choses que les autres bonnes réponses en utilisant un bashscript.

Sanghyun Lee
la source
Merci!! Celui-ci a fonctionné pour moi sur macOS Mojave (bien que vous deviez obtenir m-cli de la source Github, car la version de brassage est obsolète de 2017)
Mint
1

Les chemins doivent être correctement référencés en utilisant POSIX filepour /posix/pathsou as aliasavec Old:Mac:Style:Paths.

Choisissez votre poison...

Chemin 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

Chemin 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

Vous pouvez facilement transformer l'un des scripts Apples ci-dessus en une commande de terminal en utilisant 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'

Pour définir plusieurs bureaux, vous pouvez essayer quelque chose comme tell application "System Events" to set picture of every desktop to "<path>". Malheureusement, cela semble être cassé dans 10.7, vous finirez donc par obtenir l'erreur suivante:Expected class name but found application constant or consideration.

fny
la source
1

En combinant la réponse de jeremyjjbrown et ce Gist de willurd , le moyen le plus pratique pour El Capitan et plus est le suivant:

  1. Ouvrez Automator (dans les applications) et créez un nouveau service
  2. Mettre Service receives selectedà image filesen haut du flux de travail. Vous pouvez éventuellement le limiter à ne fonctionner que dans le Finder.

Exemple d'image 1

  1. Ajouter une Run Shell Scriptaction au workflow
  2. Videz le script par défaut et insérez une version légèrement modifiée de la réponse de jeremyjjbrown dans l'éditeur:

    read -e IMAGE;
    sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '$IMAGE'";
    killall Dock;
    
  3. Enregistrez le service avec un nom de votre choix, par exemple Set Desktop Picture on all Spaces.

Vous pouvez maintenant cliquer avec le bouton droit sur n'importe quelle image directement à partir du Finder et choisir le service dans le menu contextuel, en définissant facilement l'arrière-plan de tous les bureaux.

Lente
la source
0

Un script perl pour accomplir la même chose:

#!/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
la source
3
Non, il s'agit d'un script Perl qui exécute l'exécution d'un osascript effectuant la même opération que le premier message avec un tas de code Perl inutile entrant le fichier image qui doit être défini comme arrière-plan.
rudolph9
0

Aucune des solutions mentionnées ne fonctionnait pour moi sur macOS 10.14.2 Sierra et je me suis retrouvé avec ce AppleScript:

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

Il peut être exécuté à partir d'un terminal comme celui-ci:

osascript path_to_applescript_file.scpt

Ou comme oneliner:

osascript -e 'tell application "System Events" to tell every desktop to set picture to "path_to_wallpaper.jpg"'
syntagme
la source