ฉันจะเปลี่ยนพื้นหลังของเดสก์ท็อปด้วยคำสั่งเทอร์มินัลได้อย่างไร


19

ฉันพยายามเพิ่มสคริปต์กำหนดค่า OS Xของฉันคำสั่งที่กำหนดพื้นหลังเป็นสีเทาเข้มธรรมดา แต่เมื่อนำไปใช้จะตั้งเฉพาะกับจอภาพหลักและจอภาพเพิ่มเติมใด ๆ ที่เชื่อมต่ออยู่ในปัจจุบันให้พื้นหลังปัจจุบัน รับพื้นหลังพื้นที่เริ่มต้น สิ่งที่ฉันมีจนถึงตอนนี้มีดังนี้:

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

ฉันจะตั้งค่าเริ่มต้นพื้นหลังสีเทาเข้มผ่านคำสั่งเทอร์มินัลได้อย่างไร ฉันจะเปลี่ยนจอภาพทั้งหมดที่กำหนดค่าเป็นสีเทาผ่านคำสั่งเทอร์มินัลได้อย่างไร


นั่นเป็นชุดคำสั่งที่มีประโยชน์มาก! ฉันก็ชอบ. aliases ของคุณเช่นกัน ขอบคุณ!
binarybob

ฉันไม่สามารถรับเครดิตทั้งหมดได้ฉันแยกจากmathiasbynensฉันได้เพิ่มการตั้งค่าแป้นพิมพ์เมาส์และพื้นหลังที่ไม่ทำงาน
rudolph9

โอ้และความเร็วการติดตามเมาส์ของฉันถูกตั้งค่าสูงกว่าการตั้งค่าระบบจะอนุญาต :() ฉันกรีดร้องเพราะมันติดตามอย่างรวดเร็ว
rudolph9

คำตอบ:


22

โซลูชันอื่น ๆ เหล่านี้ไม่สามารถใช้งานได้กับ Mavericks อีกต่อไปเพราะ Apple ย้ายการตั้งค่าไปยัง sqlite DB แต่ก็ไม่เป็นไรเพราะตอนนี้มันง่ายกว่า png สามารถอยู่ที่ใดก็ได้ในระบบไฟล์และเดสก์ท็อปทั้งหมด (แม้แต่เสมือน) ก็อัปเดต

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

หรือเพิ่มเป็นฟังก์ชั่นใน ~ / .bash_profile ของคุณและเรียกมันว่าเป็นคำสั่งเทอร์มินัลที่มีเส้นทางที่ไม่ใช่แบบสัมพัทธ์

#   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


นี่เป็นสิ่งเดียวที่ใช้งานได้ในปัจจุบัน
saruftw

2
@jeremyjjbrown: ขอบคุณสำหรับคำตอบของคุณ! น่าเสียดายที่นี่ไม่ทำงานใน macOS Sierra อีกต่อไป .. มีความคิดว่าตอนนี้ Apple อาจบันทึกรูปภาพที่ใช้เป็นภาพพื้นหลังหรือไม่
Benjamin Herzog

คุณรู้วิธีที่จะไปที่ศูนย์ / กระเบื้อง / พอดีกับหน้าจอและอื่น ๆ ?
BSUK

@BenjaminHerzog คำตอบของ Sanghyun Lee ยังคงใช้งานได้ (บน Mojave) เพียงสร้างจากแหล่ง GitHub ไม่ใช่ชง: apple.stackexchange.com/a/273628/1195
มิ้นที่

15

สิ่งนี้น่าจะเหมาะกับคุณ:

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

มีหลายวิธีในหัวข้อข่าวลือ Mac นี้แต่วิธีของเขาเป็นวิธีที่ง่ายที่สุด


คุณได้รับสิ่งนี้เพื่อทำงานของคุณเอง? มันไม่ได้ผลสำหรับฉัน
rudolph9

1
ให้ฉัน./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

ลองอีกครั้งด้วยสีที่แตกต่างกันเพื่อดูว่ามีบางอย่างที่เกี่ยวข้องกับเดสก์ท็อปที่ถูกตั้งค่าเป็นสีเทาเข้มและได้รับ./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 ลองเรียกใช้ภายใน AppleScript Editor มันใช้งานได้ไหม ฉันไม่ได้ลอง แต่ฉันเชื่อว่าฉันมีในอดีต
daviesgeek

ตามคำตอบของ @ faraz มันจะปรากฏว่าคุณต้องบอก Apple Script ว่าคุณกำลังจัดหาเส้นทาง POSIX โดยรวมคำสำคัญ POSIX ไว้หน้าคำหลักของไฟล์เช่นtell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png"
Jason Musgrove

12

วิธีที่ง่ายที่สุดในการทำหนึ่งบรรทัด:

osascript -e 'tell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Earth Horizon.jpg"'

วิธีการใช้osascriptงานสำหรับฉันเฉพาะเมื่อฉันเรียกใช้killall Dockหลังจากนั้น มีใครสังเกตเห็นอีกไหม?
Quinn Comendant

2

หากคุณต้องการติดตั้งแอพพลิเคชั่นใหม่เพื่อสร้างฟังก์ชั่นใหม่การใช้m-cliเป็นวิธีที่จะทำ ใช้งานง่ายและมีคุณสมบัติที่มีประโยชน์อื่น ๆ อีกมากมายหากคุณต้องการ

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

m-cliตรวจพบเวอร์ชันของระบบปฏิบัติการโดยอัตโนมัติทำในสิ่งเดียวกันกับคำตอบที่ถูกต้องอื่น ๆโดยใช้bashสคริปต์


ขอบคุณ !! อันนี้ใช้ได้กับฉันใน macOS Mojave (แม้ว่าคุณจะต้องได้รับ m-cli จากแหล่ง Github เนื่องจากเวอร์ชั่นการชงนั้นล้าสมัยตั้งแต่ปี 2017)
มิ้นท์

1

เส้นทางที่จะต้องมีการอ้างอิงอย่างถูกต้องโดยใช้POSIX fileสำหรับ/posix/pathsหรือกับas aliasOld:Mac:Style:Paths

เลือกพิษของคุณ ...

เส้นทาง 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

เส้นทาง 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

คุณสามารถเปลี่ยน Applescripts ข้างต้นเป็นคำสั่งเทอร์มินัลได้อย่างง่ายดายโดยใช้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'

หากต้องการตั้งค่าเดสก์ท็อปหลายเครื่องคุณสามารถลองใช้งานtell application "System Events" to set picture of every desktop to "<path>"ได้ น่าเสียดายที่สิ่งนี้ดูเหมือนจะเสียใน 10.7 ดังนั้นคุณจะได้รับข้อผิดพลาดต่อไปนี้:Expected class name but found application constant or consideration.


1

รวมคำตอบ jeremyjjbrown ของและสรุปสาระสำคัญนี้โดย willurd , วิธีที่สะดวกที่สุดสำหรับ El Capitan และถึงจะเป็นดังนี้:

  1. เปิด Automator (ในแอปพลิเคชั่น) และสร้างบริการใหม่
  2. ตั้งค่าService receives selectedเป็นimage filesที่ด้านบนของเวิร์กโฟลว์ คุณสามารถเลือก จำกัด ให้ทำงานใน Finder ได้เท่านั้น

ภาพตัวอย่าง 1

  1. เพิ่มการRun Shell Scriptกระทำให้กับเวิร์กโฟลว์
  2. ล้างสคริปต์เริ่มต้นและแทรกคำตอบของ jeremyjjbrownรุ่นที่แก้ไขเล็กน้อยลงในตัวแก้ไข:

    read -e IMAGE;
    sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '$IMAGE'";
    killall Dock;
    
  3. Set Desktop Picture on all Spacesประหยัดค่าใช้บริการที่มีชื่อที่คุณเลือกเช่น

ตอนนี้คุณสามารถคลิกขวาที่รูปภาพใด ๆ ได้โดยตรงจาก Finder และเลือกบริการจากเมนูบริบทตั้งค่าพื้นหลังสำหรับเดสก์ท็อปทั้งหมดได้อย่างง่ายดาย


0

สคริปต์ perl เพื่อให้บรรลุเดียวกัน:

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

3
ไม่ว่าเป็นสคริปต์ Perl ที่รันสคริปต์ os ที่ดำเนินการเช่นเดียวกับโพสต์แรกที่มีรหัส Perl ที่ไม่จำเป็นใส่เข้าไปในไฟล์ภาพซึ่งจะถูกตั้งค่าเป็นพื้นหลัง
rudolph9

0

ไม่มีวิธีการแก้ปัญหาที่กล่าวถึงใช้งานได้กับฉันใน macOS 10.14.2 Sierra และฉันลงเอยด้วย AppleScript นี้:

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

มันสามารถเรียกใช้จาก terminal เช่นนั้น:

osascript path_to_applescript_file.scpt

หรือเป็นผู้ดำเนินการ:

osascript -e 'tell application "System Events" to tell every desktop to set picture to "path_to_wallpaper.jpg"'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.