Як змінити фон робочого столу за допомогою команди терміналу?


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 перемістила налаштування в DB DB sqlite. Але це нормально, тому що тепер це простіше, 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 може економити, яку картину використовувати як шпалери?
Бенджамін Герцог

Чи знаєте ви, як довести його до центру / плитки / підходити до екрана тощо?
БСУК

@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 Rumors , але його спосіб найпростіший.


Чи ти це змусив працювати над собою? Це не працювало для мене.
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. Це там працює? Я не пробував цього, але я вважаю, що мав у минулому.
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після цього. Хтось ще це помічає?
Квінн Комендант

2

Якщо ви віддаєте перевагу встановленню нового додатку перед створенням нової функції, скористайтеся m-cliспособом. Він простий у використанні та має багато інших корисних функцій, якщо вам це потрібно.

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

m-cliавтоматично виявляє версію ОС, внутрішньо роби те саме, що й інші правильні відповіді за допомогою bashскрипту.


Спасибі!! Цей працював для мене на macOS Mojave (хоча вам потрібно отримати m-cli від джерела Github, оскільки версія
Монетний двір,

1

Шляхи повинні бути належним чином посилатися POSIX fileна /posix/pathsабо за as aliasдопомогою Old: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 і цей Gist by willurd , найзручнішим способом для El Capitan і вище є наступне:

  1. Відкрийте Автоматизатор (у програмах) та створіть нову Службу
  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, який виконує запуску osascript, виконуючи ту саму операцію, що і перша публікація, з купою непотрібного коду 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

Його можна запустити з терміналу так:

osascript path_to_applescript_file.scpt

Або як он-лайн:

osascript -e 'tell application "System Events" to tell every desktop to set picture to "path_to_wallpaper.jpg"'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.