Wie ändere ich den Desktop-Hintergrund mit einem Terminalbefehl?

19

Ich versuche, meinem OS X-Konfigurationsskript einen Befehl hinzuzufügen, mit dem der Hintergrund auf ein schlichtes Dunkelgrau eingestellt wird. Wenn dieser Befehl angewendet wird, wird er jedoch nur auf den Hauptmonitor festgelegt, und alle derzeit verbundenen zusätzlichen Monitore behalten ihren aktuellen Hintergrund und alle danach hinzugefügten Monitore werden weiterhin verwendet Erhalte den Standardraumhintergrund. Was ich bisher habe, ist wie folgt:

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

Wie setze ich den dunkelgrauen Hintergrund über einen Terminalbefehl als Standard? Wie ändere ich alle bereits konfigurierten Monitore über einen Terminalbefehl auf Grau?

rudolph9
quelle
Das ist ein ziemlich nützlicher Befehlssatz! Ich mag auch Ihre .aliases auch. Vielen Dank!
Binarybob
Ich kann nicht den ganzen Kredit nehmen, ich gabelte ihn von mathiasbynens , ich fügte die Tastatur, die Maus und die nicht arbeitenden Hintergrundeinstellungen zwar hinzu.
Rudolph9
Ohh und meine Maus-Tracking-Geschwindigkeit ist so hoch eingestellt, wie es die Systemeinstellungen erlauben :() Das schreie ich, weil es schnell verfolgt.
Rudolph9

Antworten:

22

Keine dieser anderen Lösungen funktioniert mehr mit Mavericks, da Apple die Einstellungen in eine SQLite-Datenbank verschoben hat. Aber das ist in Ordnung, denn jetzt ist es einfacher, das PNG kann überall im Dateisystem sein und alle Desktops (auch virtuelle) werden aktualisiert.

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

Oder fügen Sie es als Funktion zu Ihrem ~ / .bash_profile hinzu und rufen Sie es als Terminalbefehl mit einem nicht relativen Pfad auf.

#   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
quelle
Dies ist das einzige, was derzeit funktioniert.
Saruftw
2
@jeremyjjbrown: danke für deine antwort! Leider funktioniert dies in macOS Sierra nicht mehr. Haben Sie eine Idee, wo Apple möglicherweise das Bild speichert, das als Hintergrundbild verwendet werden soll?
Benjamin Herzog
Wissen Sie, wie man es in die Mitte bringt / auf den Bildschirm passt usw.?
BSUK
@BenjaminHerzog Die Antwort von Sanghyun Lee funktioniert immer noch (auf Mojave), sie wird nur aus der GitHub-Quelle erstellt und nicht gebraut
Mint
15

Das sollte für Sie funktionieren:

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

Es gibt mehrere andere Möglichkeiten in diesem Mac-Gerüchte-Thread , aber sein Weg ist der einfachste.

Daviesgeek
quelle
Hast du es geschafft, dich selbst zu bearbeiten? Es hat bei mir nicht funktioniert.
Rudolph9
1
gab mir./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
Versuchte es noch einmal mit einer anderen Farbe, um zu sehen, ob es etwas damit zu tun hatte, dass der Desktop bereits auf dunkelgrau eingestellt war und ./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)
Uhr
@ KurtRudolph Versuchen Sie es mit AppleScript Editor. Funktioniert es dort? Ich habe es nicht ausprobiert, aber ich glaube, ich habe es in der Vergangenheit getan.
Daviesgeek
Basierend auf der Antwort von @ faraz müssen Sie Apple Script anscheinend mitteilen, dass Sie einen POSIX-Pfad angeben, indem Sie das Schlüsselwort POSIX vor dem Schlüsselwort file tell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png"
Jason Musgrove,
12

Der einfachste Weg, dies in einer Zeile zu tun:

osascript -e 'tell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Earth Horizon.jpg"'
aculich
quelle
Die Methode der Verwendung osascriptfunktioniert nur, wenn ich killall Dockdanach renne. Hat das sonst noch jemand bemerkt?
Quinn Comendant
2

Wenn Sie es vorziehen, eine neue Anwendung zu installieren, anstatt eine neue Funktion zu erstellen, m-cliist die Verwendung von der richtige Weg. Es ist einfach zu bedienen und bietet bei Bedarf viele weitere nützliche Funktionen.

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

m-cliErkennt automatisch die Version des Betriebssystems und erledigt intern dieselben Aufgaben wie andere korrekte Antworten mithilfe von bashSkripten.

Sanghyun Lee
quelle
Vielen Dank!! Dieser hat für mich unter macOS Mojave funktioniert (obwohl Sie m-cli aus der Github-Quelle herunterladen müssen, da die Brau-Version ab 2017 veraltet ist)
Mint
1

Die Pfade müssen mit POSIX filefor /posix/pathsoder as aliaswith korrekt referenziert werden Old:Mac:Style:Paths.

Wähle dein Gift...

POSIX-Pfad:

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

Mac-Pfad:

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

Sie können jedes der oben genannten Applescripts einfach in einen Terminalbefehl umwandeln, indem Sie Folgendes verwenden 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'

Um mehrere Desktops einzurichten, können Sie beispielsweise Folgendes versuchen tell application "System Events" to set picture of every desktop to "<path>". Leider scheint dies in 10.7 nicht zu funktionieren, so dass am Ende die folgende Fehlermeldung angezeigt wird:Expected class name but found application constant or consideration.

fny
quelle
1

Wenn man die Antwort von Jeremyjjbrown und diesen Gist von Willurd kombiniert , ist der bequemste Weg für El Capitan und andere , wie folgt:

  1. Öffnen Sie Automator (in Applications) und erstellen Sie einen neuen Service
  2. Setzen Sie Service receives selectedauf image filesan der Spitze des Workflows. Sie können ihn optional auf die Arbeit im Finder beschränken.

Beispielbild 1

  1. Fügen Sie Run Shell Scriptdem Workflow eine Aktion hinzu
  2. Leeren Sie das Standardskript und fügen Sie eine leicht geänderte Version der Antwort von jeremyjjbrown in den Editor ein:

    read -e IMAGE;
    sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '$IMAGE'";
    killall Dock;
    
  3. Speichern Sie den Dienst beispielsweise unter einem Namen Ihrer Wahl Set Desktop Picture on all Spaces.

Sie können jetzt mit der rechten Maustaste auf ein beliebiges Bild direkt im Finder klicken und den Dienst aus dem Kontextmenü auswählen, um den Hintergrund für alle Desktops festzulegen.

Nit
quelle
0

Ein Perl-Skript, um dasselbe zu erreichen:

#!/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
quelle
3
Nein, das ist ein Perl-Skript, das ein Javascript ausführt, das den gleichen Vorgang ausführt wie der erste Beitrag, mit einer Menge unnötigem Perl-Code, der die Bilddatei eingibt, die als Hintergrund festgelegt werden soll.
Rudolph9
0

Keine der genannten Lösungen funktionierte für mich unter macOS 10.14.2 Sierra und ich bekam dieses AppleScript:

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

Es kann von einem Terminal wie folgt ausgeführt werden:

osascript path_to_applescript_file.scpt

Oder als Oneliner:

osascript -e 'tell application "System Events" to tell every desktop to set picture to "path_to_wallpaper.jpg"'
syntagma
quelle