Jak zmienić tło pulpitu za pomocą polecenia terminalu?

18

Próbuję dodać do mojego skryptu konfiguracyjnego OS X polecenie, które ustawia tło na zwykły ciemnoszary, jednak po zastosowaniu ustawia je tylko na monitorze głównym, a wszelkie dodatkowe podłączone monitory zachowują swoje bieżące tło i wszelkie dodane później otrzymać domyślne tło przestrzeni. Mam do tej pory:

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

Jak ustawić domyślne ciemnoszare tło za pomocą polecenia terminalu? Jak zmienić wszystkie monitory już skonfigurowane na szare za pomocą polecenia terminalu?

rudolph9
źródło
To całkiem użyteczny zestaw poleceń! Lubię też twoje .aliases one. Dzięki!
binarybob
Nie mogę wziąć całego uznania, rozwidliłem go z mathiasbynens , dodałem jednak klawiaturę, mysz i niedziałające ustawienia tła.
rudolph9
Och, a moja prędkość śledzenia myszy jest ustawiona na wyższą wartość niż pozwalają na to preferencje systemowe :() to krzyczy, ponieważ szybko śledzi.
rudolph9

Odpowiedzi:

21

Żadne z tych innych rozwiązań nie działa już na Mavericks, ponieważ Apple przeniósł ustawienia do bazy danych sqlite. Ale to w porządku, ponieważ teraz jest łatwiej, png może znajdować się w dowolnym miejscu w systemie plików, a wszystkie pulpity (nawet wirtualne) są aktualizowane.

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

Lub dodaj go jako funkcję do swojego ~ / .bash_profile i wywołaj jako polecenie terminalowe z dowolną nierelatywną ścieżką.

#   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
źródło
To jedyna rzecz, która obecnie działa.
saruftw,
2
@jeremyjjbrown: dziękuję za odpowiedź! Niestety nie działa to już w systemie macOS Sierra. Czy masz pomysł, w którym Apple może teraz zapisywać zdjęcie, które ma zostać użyte jako tapeta?
Benjamin Herzog
Czy wiesz, jak ustawić go na środku / kafelku / dopasuj do ekranu itp.?
BSUK
13

To powinno Ci pomóc:

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

W tym wątku Mac Rumours istnieje kilka innych sposobów , ale jego sposób jest najłatwiejszy.

daviesgeek
źródło
Czy udało ci się to samodzielnie? Nie działało to dla mnie.
rudolph9
1
dał mi./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
Spróbowałem ponownie z innym kolorem, aby zobaczyć, czy ma to coś wspólnego z ustawieniem pulpitu na ciemnoszary i dostał./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 Spróbuj uruchomić go w edytorze AppleScript. Czy to tam działa? Nie próbowałem tego, ale wierzę, że tak było w przeszłości.
daviesgeek
Na podstawie odpowiedzi @ faraz wydaje się, że musisz powiedzieć Apple Script, że podajesz ścieżkę POSIX, dołączając słowo kluczowe POSIX przed słowem kluczowym pliku, np.tell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png"
Jason Musgrove
12

Najprostszy sposób, aby to zrobić w jednym wierszu:

osascript -e 'tell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Earth Horizon.jpg"'
aculich
źródło
Metoda używania osascriptdziała dla mnie tylko wtedy, gdy biegnę killall Dockpóźniej. Czy ktoś to zauważył?
Quinn Comendant
1

Ścieżki należy odpowiednio przywoływać za pomocą POSIX filefor /posix/pathslub as aliaswith Old:Mac:Style:Paths.

Wybierz swoją truciznę ...

Ścieżka 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

Ścieżka do komputera 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

Możesz łatwo zamienić dowolny z powyższych Applescripts w komendę terminalową, używając 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'

Aby ustawić wiele komputerów stacjonarnych, możesz wypróbować coś takiego tell application "System Events" to set picture of every desktop to "<path>". Niestety, wydaje się, że jest to zepsute w wersji 10.7, więc pojawi się następujący błąd:Expected class name but found application constant or consideration.

pieprzony
źródło
1

Łącząc odpowiedź jeremyjjbrown i Gist autorstwa willurd , najwygodniejszy sposób dla El Capitan i wyższych jest następujący:

  1. Otwórz Automator (w aplikacjach) i utwórz nową usługę
  2. Ustaw Service receives selectedsię image filesw górnej części pracy. Możesz opcjonalnie ograniczyć go tylko do pracy w Finderze.

Przykładowy obraz 1

  1. Dodaj Run Shell Scriptakcję do przepływu pracy
  2. Opróżnij domyślny skrypt i wstaw do edytora nieco zmodyfikowaną wersję odpowiedzi jeremyjjbrown :

    read -e IMAGE;
    sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '$IMAGE'";
    killall Dock;
    
  3. Zapisz usługę, na przykład z wybraną przez siebie nazwą Set Desktop Picture on all Spaces.

Możesz teraz kliknąć prawym przyciskiem myszy dowolny obraz bezpośrednio z Findera i wybrać usługę z menu kontekstowego, łatwo ustawiając tło dla wszystkich komputerów stacjonarnych.

Gnida
źródło
1

Jeśli wolisz zainstalować nową aplikację niż nową funkcję, skorzystaj z m-clitej metody. Jest łatwy w użyciu i ma wiele innych przydatnych funkcji, jeśli potrzebujesz.

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

m-cliauto wykrywa wersję systemu operacyjnego, wewnętrznie rób te same rzeczy, co inne poprawne odpowiedzi za pomocą bashskryptu.

Sanghyun Lee
źródło
0

Skrypt perla do osiągnięcia tego samego:

#!/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
źródło
3
Nie, to jest skrypt perla, który wykonuje tę samą operację co osascript, wykonując tę ​​samą operację, co pierwszy post z garstką niepotrzebnego kodu perla wprowadzającego plik obrazu, który ma być ustawiony jako tło.
rudolph9
0

Żadne z wymienionych rozwiązań nie działało dla mnie w systemie macOS 10.14.2 Sierra i skończyło się na tym AppleScript:

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

Można go uruchomić z takiego terminalu:

osascript path_to_applescript_file.scpt

Lub jako oneliner:

osascript -e 'tell application "System Events" to tell every desktop to set picture to "path_to_wallpaper.jpg"'
syntagma
źródło