Как изменить фон рабочего стола с помощью команды терминала?

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

Как установить по умолчанию темно-серый фон с помощью команды терминала? Как изменить все мониторы, уже настроенные на серый, с помощью команды терминала?

rudolph9
источник
Это довольно полезный набор команд! Мне тоже нравятся ваши .aliases один тоже. Благодарность!
двоичный боб
Я не могу взять весь кредит, я раздобыл его у 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

jeremyjjbrown
источник
Это единственное, что работает на данный момент.
saruftw
2
@jeremyjjbrown: спасибо за ответ! К сожалению, это больше не работает в macOS Sierra .. У вас есть идея, где Apple теперь может сохранять изображение, которое будет использоваться в качестве обоев?
Бенджамин Херцог
Знаете ли вы, как расположить его по центру / плитке / по размеру экрана и т. Д.?
БСУК
@BenjaminHerzog Ответ Санхьюна Ли все еще работает (на Мохаве), только сборка из источника 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 есть несколько других способов , но его путь самый простой.

daviesgeek
источник
Вы заставили это работать самостоятельно? Это не сработало для меня.
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. Это работает там? Я не пробовал это, но я верю, что в прошлом.
Дэвисджик
Исходя из ответа @ 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"'
aculich
источник
Метод использования osascriptработает для меня, только если я бегу killall Dockпозже. Кто-нибудь еще замечает это?
Куинн Комендант
2

Если вы предпочитаете устанавливать новое приложение, а не создавать новую функцию, используйте m-cliэтот способ. Это простой в использовании, и он имеет много других полезных функций, если вам нужно.

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

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

Санхьюн Ли
источник
Благодарность!! Этот работал для меня на MacOS Mojave (хотя вам нужно получить m-cli из источника на Github, так как версия brew устарела с 2017 года)
Mint
1

На пути нужно правильно ссылаться, используя POSIX filefor /posix/pathsили as aliaswith 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

Вы можете легко превратить любой из приведенных выше скриптов в команду терминала, используя 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.

Fny
источник
1

Комбинируя ответ Джереми Брауна и этот Гист Уиллурда , наиболее удобный способ для Эль-Капитана и выше заключается в следующем:

  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'");
TheIrishGuy
источник
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"'
синтагма
источник