Включить темный режим в определенное время

После обновления до macOS Mojave мне было интересно, есть ли настройка, которая автоматически включала бы темный режим в определенное время суток?

Я нашел только настройку, чтобы включать и выключать его вручную.

какая настройка, где
У меня есть AppleScript, который вносит изменения (на самом деле это тот же параметр, который контролировал «Панель темного меню и док-станцию» в более ранних версиях), поэтому, вероятно, можно что-то сделать с помощью launchctl...
github.com/ApolloZhu/Dynamic-Dark-Mode у меня работает

Ответы (6)

В случае, если кто-то заинтересован в ответе, который не требует от вас ничего устанавливать, но требует, чтобы вы немного коснулись кода... Вот, пожалуйста....

Как переключить темный режим с помощью Applescript :

tell application "System Events"
    tell appearance preferences
        set dark mode to not dark mode
    end tell
end tell

Как включить темный режим с помощью Applescript :

tell application "System Events"
    tell appearance preferences
        set dark mode to true
    end tell
end tell

Как отключить темный режим с помощью Applescript :

tell application "System Events"
    tell appearance preferences
        set dark mode to false
    end tell
end tell

Существуют довольно надежные приложения, которые могут запускать сценарии или действия в определенное время, но эти приложения в основном довольно обширны и дороги. Я хотел бы упомянуть один, потому что он позволяет вам делать больше, чем просто переключать темный режим: Keyboard Maestro — это что-то вроде Automator, но лучше. Не позволяйте устаревшему виду обмануть вас.

Я бы использовал launchd , потому что вам не нужно ничего устанавливать. Это требует от вас небольшого прикосновения к коду, но ничего серьезного.

Как запустить Applescript в определенное время с помощью файла списка свойств Launchd (plist):

  1. Вам нужно создать новый .plistфайл в ~/Library/LaunchAgents(~ представляет вашу пользовательскую папку)

    • Если вы хотите, чтобы он работал для всех пользователей, поместите его в /Library/LaunchAgents(Macintosh HD).
    • Это .plistпросто текстовый файл, который вы можете отредактировать в любом текстовом редакторе и сохранить как текст с расширениями .plist.
    • Скорее всего, в этих папках у вас уже есть файлы, которые вы можете продублировать, чтобы создать свои собственные. Если вы откроете существующий .plistфайл с помощью TextEdit.app, вы не сможете случайно сохранить его как .rtfфайл или что-то в этом роде.
  2. Скопируйте и вставьте это в .plistфайл:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>com.time.trigger.darkmode</string>
    <key>Program</key>
    <string>/usr/bin/osascript</string>
    <key>ProgramArguments</key>
    <array>
      <string>osascript</string>
      <string>/Users/joonaspaakko/Desktop/toggle-darkmode.scpt</string>
    </array>
    <key>StartCalendarInterval</key>
    <array>
      <dict>
        <key>Hour</key>
        <integer>21</integer>
        <key>Minute</key>
        <integer>20</integer>
      </dict>
    </array>
  </dict>
</plist>
  • Строка ниже <string>osascript</string>указывает на файл Applescript .scpt, который должен быть запущен. Вы измените это на шаге 3 после создания файла сценария.
  • Массив ниже <key>StartCalendarInterval</key>, который говорит Hourи Minuteявляется местом, где вы устанавливаете время. Текущее установленное время H 21 M 20= 21:20.

Эти шаги, возможно, немного обратные, так как у меня уже есть местоположение скрипта, установленное в файле, .plistно давайте создадим .scptфайл дальше.

  1. Запустите приложение «Редактор сценариев» /Applications/Utilities/Script Editor.app.
    • Вставьте любой Applescript, который вы хотите использовать (в верхней части ответа, если вы забыли)
    • Вы можете протестировать Applescripts в этом приложении, нажав кнопку воспроизведения.
    • Сохранить как Scriptфайл. Если вы сами используете скрипт, сохраните его где-нибудь в своем домашнем каталоге. Если вы настраиваете это для всех учетных записей, вам нужно будет хранить их в месте, доступном для всех, например в /Library/Scripts.
    • Вернитесь к своему .plistфайлу с шага 2 и измените строку ниже <string>osascript</string>, чтобы она указывала на ваш новый Applescript ( .scptфайл).
  2. Когда оба файла созданы, важным шагом является выход из системы (или перезапуск), поскольку эти агенты запуска начинают работать в фоновом режиме при запуске.
    • Если вы хотите остановить его запуск, вы можете переместить его .plistиз папки или просто удалить.
Уточните, пожалуйста, что строку ниже <string>osascript</string> необходимо изменить. (поскольку в настоящее время он содержит вашу пользовательскую папку. Также уточните, что файлы должны находиться в другом месте, если они должны запускаться глобально.
@ Gert-JanRoeleveld, если честно, я не совсем уверен, как бы я это сделал. Обе эти вещи я упоминаю в ответе, и я понимаю, как их можно пропустить или даже неправильно истолковать, но я не могу разумно исказить эти слова, чтобы сделать их более ясными. Лучшее, что я смог придумать, это заменить маркеры на числа, чтобы как бы укрепить идею о том, что их важно читать, а не просто небольшие подсказки. Хотя я не знаю. Не стесняйтесь редактировать ответ, если у вас есть идеи, как сделать его лучше.
Сначала я использовал это и дал ему баллы за тщательность, но стоит также взглянуть на apple.stackexchange.com/a/346808/25450 , чтобы увидеть, как поместить скрипт в plist, объединив шаги 2 и 3.

f.lux может переключаться между светлым/темным режимом Мохаве на рассвете/закате («Цветовые эффекты»):

Темная тема OS X на закате: использует обычную тему в течение дня и переключается на темную тему (док-станция и строка меню) каждую ночь на закате. Отключение f.lux также отключит темную тему.

О, я забыл об этом приложении!

На данный момент нет собственного способа ОС, но вы можете использовать некоторые программы, такие как

» Сова

Ночная Сова

или напишите свой собственный сценарий в редакторе сценариев Apple , чтобы сделать это, нажав

tell application "System Events"

  tell appearance preferences

    set dark mode to not dark mode

  end tell

end tell

Другой вариант — список запуска, который я создал для себя и выложил на Github.

Мой профиль настроен на 9 вечера и 7:15 утра, вы можете легко изменить это. Я включил одну команду терминала для его установки. Он не устанавливает никакого программного обеспечения, использует только стандартные инструменты macOS. На самом деле я сделал почти то же самое, что Йоонас предложил вам сделать в своем ответе, и поделился им, чтобы вам не пришлось его печатать.

https://github.com/superman-lopez/switchdarkmode

Как упомянул @Gert-JanRoeleveld, у @Joonas во многом правильный подход. Однако есть несколько недостающих деталей, которые необходимо уточнить/улучшить:

  • Как уже упоминалось, если вы хотите, чтобы этот launchdсценарий автоматически запускался при каждом входе в систему, его необходимо поместить в ~/Library/LaunchAgentsили /Library/LaunchAgents, а имя файла должно соответствовать ключу «Label», т. е. com.time.trigger.darkmode.plist. Это должен быть обычный текстовый файл. Он не запустится, пока вы не войдете в систему, если вы, launchctl load ~/LaunchAgents/com.time.trigger.darkmode.plistнапример.
  • Реализация (как написано в настоящее время) в настоящее время вызывает внешний AppleScript, который находится в /Users/joonaspaakko/Desktop/toggle-darkmode.scpt. Другие пользователи не будут иметь доступа к этому файлу, поэтому скрипт не будет работать ни для кого другого (обычно это считается плохой практикой).

Вместо этого включите AppleScript в сам plist:

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
  <dict>
    <key>Label</key>
      <string>com.time.trigger.darkmode</string>
    <key>Program</key>
      <string>/usr/bin/osascript</string>
    <key>ProgramArguments</key>
    <array>
      <string>osascript</string>
      <string>-e</string>
      <string>tell app "System Events" to tell appearance preferences to set dark mode to not dark mode</string>
    </array>
    <key>StartCalendarInterval</key>
    <array>
      <dict>
        <key>Hour</key>
          <integer>21</integer>
            <key>Minute</key>
          <integer>20</integer>
      </dict>
   </array>
  </dict>
</plist>

  • (Нет необходимости использовать редактор сценариев или создавать файл AppleScript вообще.)
  • Кроме того, если я не ошибаюсь: заслуга в функциональности «переключения» (чтение значения dark modeс отрицательным логическим значением внутри команды ) действительно должна быть передана Бретту Терпстра .
Кроме того, FWIW, на github.com/katernet/darkmode есть прекрасная реализация , где светлый и темный режимы переключаются на закате и восходе солнца в зависимости от местоположения и даты.
Мне нравится это изменение, когда скрипт находится в plist. Я выбрал local.toggle-dark-mode для сценария/метки, но я думаю, это зависит от того, как вы хотите управлять файлами. Мне нравится сразу знать, какие из них мои.

Другой сторонний вариант — LightsOff .

Он также позволяет контролировать, какие приложения переключают темы, а также может переключать их для некоторых других сторонних приложений со светлой / темной темой, хотя и не для всех .