31 votes

Comment changer le fond d'écran avec une commande en terminal ?

J'essaie d'ajouter à mon Configuration OS X script une commande qui définit l'arrière-plan en gris foncé uni, cependant, lorsqu'elle est appliquée, elle ne le définit que pour le moniteur principal et tous les moniteurs supplémentaires actuellement connectés conservent leur arrière-plan actuel et tous ceux qui sont ajoutés par la suite reçoivent toujours l'arrière-plan spatial 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 puis-je définir le fond gris foncé par défaut via une commande de terminal ? Comment puis-je changer tous les moniteurs déjà configurés en gris via une commande de terminal ?

1voto

Les chemins doivent être correctement référencés en utilisant POSIX file pour /posix/paths ou as alias avec Old:Mac:Style:Paths .

Choisissez votre poison...

Chemin d'accès 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 n'importe lequel des Applescripts 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, cette fonction ne semble pas fonctionner dans la version 10.7, et vous obtiendrez l'erreur suivante : Expected class name but found application constant or consideration.

1voto

Etheryte Points 73

NB : A partir de Mojave, la solution ci-dessous fait pas travail .


Combinaison de La réponse de jeremyjjbrown y ce Gist par willurd la méthode la plus pratique pour El Capitan et les versions ultérieures est la suivante :

  1. Ouvrez Automator (dans Applications) et créez un nouveau Service
  2. Définir Service receives selected à image files en haut du flux de travail. Vous pouvez éventuellement le limiter pour qu'il ne fonctionne que dans le Finder.

Sample image 1

  1. Ajouter un Run Shell Script au flux de travail

  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 désormais cliquer avec le bouton droit de la souris sur n'importe quelle image directement dans le Finder et choisir le service dans le menu contextuel, ce qui permet de définir facilement l'arrière-plan pour tous les bureaux.

1voto

rubynorails Points 704

Ce n'est peut-être pas la réponse que vous cherchez, mais c'est de loin ma préférée (elle nécessite Python3) :

J'ai toujours utilisé pywal sur toutes mes machines Linux, et je voulais juste voir s'il fonctionnerait aussi sur MacOS, et c'est le cas. Non seulement il change l'image du bureau pour tous les bureaux avec une seule commande, mais il a également la capacité de définir les couleurs de votre terminal à un thème pour correspondre à votre fond d'écran (tant que vous utilisez iTerm2 et non Terminal.app).

https://github.com/dylanaraps/pywal/

Je suggère de le cloner à partir du dépôt git et de le construire à partir des sources, car il y a un problème avec la version actuelle sur PyPI qui n'inclut pas un correctif pour montrer l'emplacement du curseur dans iTerm2.

Si vous pensez qu'il serait plus facile de l'installer à partir de PyPI et de patcher le fichier, c'est également une option -- il suffit d'exécuter pip3 install pywal et ensuite trouver l'emplacement de sequences.py dans votre site-packages/pywal (le mien se trouvait à ~/Library/Python/3.9/lib/python/site-packages/pywal/sequences.py ), puis copiez simplement sequences.py de la branche master à votre site-packages, et vous êtes prêt à partir.

Mon installation complète s'est déroulée comme suit :

$ pip3 install --user pywal
$ find /usr/local -type f -name "sequences.py"
(or)
$ find $HOME -type f -name "sequences.py"
> ./Library/Python/3.9/lib/python/site-packages/pywal/sequences.py
$ git clone https://github.com/dylanaraps/pywal
$ cp pywal/sequences.py ~/Library/Python/3.9/lib/python/site-packages/pywal/sequences.py

Ensuite, tout ce que vous avez à faire pour définir le fond d'écran pour tous les bureaux est d'exécuter ce qui suit :

wal -i $HOME/Pictures/Wallpapers/your_image.jpg

...et bingo-bango, il définit le fond d'écran pour TOUS les bureaux ET vous donne de jolies couleurs assorties dans iTerm2.

Il y a des instructions dans le wiki pywal sur la manière de faire persister les couleurs du terminal à travers les redémarrages en ajoutant une ligne à ~/.bash_profile .

Tout cela étant dit, si cette méthode prend un peu plus de temps à mettre en place, à long terme, elle est de loin la plus facile et la plus satisfaisante.

Aussi, juste une mise au point : wal -i /path/to/image ne fonctionne pas pour certaines images, et je ne sais pas trop pourquoi, mais il a fonctionné pour la plupart des images que j'ai testées.

1voto

slifty Points 101

Sur Monterey, la commande a légèrement changé :

osascript -e "tell application \"System Events\" to tell every desktop to set picture to \"/path/to/file/goes/here.jpg\" as POSIX file"

Aussi pour l'après-Monterey : je pense que vous pouvez regarder ce fichier pour voir la "dernière" façon de faire, tant que m-cli reste un projet vivant.

0voto

Tom Leys Points 10453

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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X