Bagaimana cara mengubah latar belakang desktop dengan perintah terminal?

19

Saya mencoba untuk menambahkan ke skrip konfigurasi OS X saya perintah yang mengatur latar belakang ke abu-abu gelap polos, namun, ketika diterapkan, itu hanya mengaturnya ke monitor utama dan setiap monitor tambahan yang terhubung saat ini menjaga latar belakang mereka saat ini dan tambahan yang ditambahkan setelah itu masih menerima latar belakang ruang default. Apa yang saya miliki sejauh ini adalah sebagai berikut:

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

Bagaimana cara mengatur default latar belakang abu-abu gelap melalui perintah terminal? Bagaimana cara mengubah semua monitor yang sudah dikonfigurasikan menjadi abu-abu melalui perintah terminal?

rudolph9
sumber
Itu seperangkat perintah yang cukup berguna! Saya juga suka. Juga satu Anda. Terima kasih!
binarybob
Saya tidak dapat mengambil semua kredit, saya mengambilnya dari mathiasbynens , saya menambahkan keyboard, mouse, dan pengaturan latar belakang yang tidak berfungsi.
rudolph9
Ohh dan kecepatan lacak tetikus saya diatur lebih tinggi daripada yang diijinkan oleh preferensi sistem :() itu saya menjerit karena treknya cepat.
rudolph9

Jawaban:

22

Tidak satu pun dari solusi lain ini yang berfungsi lagi pada Mavericks karena Apple memindahkan pengaturan ke DB sqlite. Tapi tidak apa-apa karena sekarang lebih mudah, png dapat berada di mana saja di sistem file, dan semua desktop (bahkan virtual) diperbarui.

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

Atau, tambahkan sebagai fungsi ke ~ / .bash_profile Anda dan panggil itu sebagai perintah terminal dengan jalur 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
sumber
Ini adalah satu-satunya yang berfungsi saat ini.
saruftw
2
@ jeremyjjbrown: terima kasih atas jawaban Anda! Sayangnya ini tidak lagi berfungsi di macOS Sierra .. Apakah ada ide di mana Apple sekarang mungkin menyimpan gambar mana yang akan digunakan sebagai wallpaper?
Benjamin Herzog
Apakah Anda tahu cara membawanya ke tengah / ubin / pas ke layar dll?
BSUK
@BenjaminHerzog Jawaban oleh Sanghyun Lee masih bekerja (di Mojave), hanya membangun dari sumber GitHub, bukan buatan: apple.stackexchange.com/a/273628/1195
Mint
15

Ini seharusnya bekerja untuk Anda:

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

Ada beberapa cara lain di utas Mac Rumours ini , tetapi caranya adalah yang termudah.

daviesgeek
sumber
Apakah Anda mendapatkan ini untuk bekerja sendiri? Itu tidak berhasil untuk saya.
rudolph9
1
memberi saya./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
Mencoba lagi dengan warna yang berbeda untuk melihat apakah itu ada hubungannya dengan desktop yang sudah diatur ke abu-abu gelap dan mendapat./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 Coba jalankan dalam AppleScript Editor. Apakah ini berhasil di sana? Saya tidak mencobanya, tetapi saya percaya saya pernah melakukannya.
daviesgeek
Berdasarkan jawaban @ faraz, tampaknya Anda perlu memberi tahu Apple Script bahwa Anda memasok jalur POSIX dengan memasukkan kata kunci POSIX sebelum kata kunci file, mis.tell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png"
Jason Musgrove
12

Cara paling sederhana untuk melakukannya dalam satu baris:

osascript -e 'tell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Earth Horizon.jpg"'
aculich
sumber
Metode menggunakan osascriptberfungsi untuk saya hanya jika saya jalankan killall Docksesudahnya. Apakah ada orang lain yang memperhatikan hal itu?
Quinn Comendant
2

Jika Anda lebih suka menginstal aplikasi baru untuk membuat fungsi baru, menggunakan m-cliadalah cara untuk pergi. Mudah digunakan, dan memiliki banyak fitur berguna lainnya jika Anda memerlukannya.

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

m-cliotomatis mendeteksi versi OS, secara internal melakukan hal yang sama seperti jawaban benar lainnya menggunakan bashskrip.

Sanghyun Lee
sumber
Terima kasih!! Yang ini bekerja untuk saya di macOS Mojave (meskipun Anda perlu mendapatkan m-cli dari sumber Github, karena versi pembuatannya sudah ketinggalan zaman dari 2017)
Mint
1

Jalur harus direferensikan dengan benar menggunakan POSIX fileuntuk /posix/pathsatau as aliasdengan Old:Mac:Style:Paths.

Pilih racunmu ...

Jalur 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

Jalur 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

Anda dapat dengan mudah mengubah Applescripts di atas menjadi perintah terminal menggunakan 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'

Untuk mengatur beberapa desktop, Anda dapat mencoba sesuatu seperti tell application "System Events" to set picture of every desktop to "<path>". Sayangnya, ini tampaknya rusak di 10.7, sehingga Anda akhirnya akan mendapatkan kesalahan berikut:Expected class name but found application constant or consideration.

fny
sumber
1

Menggabungkan jawaban jeremyjjbrown dan Intisari ini oleh willurd , cara yang paling nyaman bagi El Capitan dan selanjutnya adalah sebagai berikut:

  1. Buka Automator (di Aplikasi) dan buat Layanan baru
  2. Set Service receives selecteduntuk image filesdi bagian atas alur kerja. Anda dapat membatasinya secara opsional agar hanya berfungsi di Finder.

Contoh gambar 1

  1. Tambahkan Run Shell Scriptaksi ke alur kerja
  2. Kosongkan skrip default dan masukkan versi jeremyjjbrown yang sedikit dimodifikasi ke dalam editor:

    read -e IMAGE;
    sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '$IMAGE'";
    killall Dock;
    
  3. Simpan layanan dengan nama yang Anda pilih, misalnya Set Desktop Picture on all Spaces.

Anda sekarang dapat mengklik kanan gambar apa saja langsung dari Finder dan memilih layanan dari menu konteks, dengan mudah mengatur latar belakang untuk semua desktop.

Nit
sumber
0

Script perl untuk mencapai hal yang sama:

#!/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
sumber
3
Tidak, itu skrip perl yang menjalankan menjalankan osascript yang melakukan operasi yang sama seperti posting pertama dengan sekelompok kode perl yang tidak perlu memasukkan file gambar yang akan ditetapkan sebagai latar belakang.
rudolph9
0

Tidak ada solusi yang disebutkan bekerja untuk saya di macOS 10.14.2 Sierra dan saya berakhir dengan AppleScript ini:

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

Itu dapat dijalankan dari terminal seperti itu:

osascript path_to_applescript_file.scpt

Atau sebagai oneliner:

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