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

Вопрос или проблема

Я пользователь Linux Mint. Одна из функций, которую я часто хотел бы иметь в Linux, это возможность переключаться между светлым и темным режимами в зависимости от времени суток, как в macOS и мобильных устройствах.

Я собрал следующий скрипт для переключения со светлого на темный режим:

#!/bin/bash
notify-send "Переключение на темный режим"
gsettings set org.cinnamon.desktop.wm.preferences theme Mint-Y-Dark
gsettings set org.cinnamon.desktop.interface gtk-theme Mint-Y-Dark
gsettings set org.cinnamon.theme name Mint-Y-Dark

и у меня есть еще один для обратного направления

#!/bin/bash
gsettings set org.cinnamon.desktop.wm.preferences theme Mint-Y
gsettings set org.cinnamon.desktop.interface gtk-theme Mint-Y
gsettings set org.cinnamon.theme name Mint-Y

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

Большинство программ учитывают тему всей ОС, что делает этот метод удивительно эффективным! Однако есть три проблемы, которые я хотел бы решить с помощью этого подхода:

  1. Автоматическое переключение между светлыми/темными режимами в зависимости от времени дня (как в macOS). Я пробовал использовать cron и anacron, но они не работают хорошо для этой цели. Когда мой компьютер включается после отключения, я хочу, чтобы он осознал, что время переключения прошло, и выполнил переключение режима (как в macOS и различных мобильных устройствах);
  2. Я хотел бы, чтобы мой терминал (GNOME Terminal, по умолчанию Cinnamon) переключался с светлой темы на темную (и наоборот); и
  3. Я хотел бы, чтобы мой текстовый редактор (Emacs) загружал светлую/темную тему.

Даже если получится сделать только (1), это было бы неплохо!

Лучше иметь один скрипт со всеми вашими командами для принудительного переключения на светлый или темный режим. Вот пример:

#!/bin/bash

function set_light_mode () {
    echo "установка светлого режима"
}

function set_dark_mode () {
    echo "установка темного режима"
}

case "$1" in
    light)
        set_light_mode
        ;;
    dark)
        set_dark_mode
        ;;
    *)
        light_time="0800"
        dark_time="1700"
        d="$(date +"%H%M")"

        if [ "$d" -ge "$light_time" ] && [ "$d" -lt "$dark_time" ]; then
            set_light_mode
        else
            set_dark_mode
        fi
        ;;
esac

Теперь вы можете:

  • использовать его, когда захотите, с одной командой. Либо укажите первый аргумент dark или light для установки вашего X независимо от времени. Либо не указывайте аргументы, и текущее время решит.
  • добавить 2 записи в crontab для указанных выше времен (без аргументов) или для любых времен. Когда ваш ноутбук включен, они будут принудительно устанавливать настройки X в зависимости от текущего времени.
  • добавить команду для выполнения скрипта (без аргументов) в “Автозапуск приложений” вашего любимого окружения рабочего стола, используя графический интерфейс, такой как этот, процесс аналогичен для Xfce, Kde, Gnome и т.д., все они следуют некоторым стандартным спецификациям. Вы можете сделать это и через консоль.

Примечание: Мы не проверяем, работает ли X в приведенном выше, я полагаю, ваши команды в этом не нуждаются (за исключением, возможно, send-notify, который, как мне кажется, может просто не сработать в таком случае)

Вы можете найти и добавить больше команд в указанные выше функции для переключения тем, режимов и т.д. для вашего окружения рабочего стола или некоторых из ваших программ, все, что можно сделать через консоль, хорошо задокументировано.

Для Cinnamon теперь есть новый апплет, который предоставляет эту возможность, синхронизируя с местоположением, чтобы сменить темы в сумерках.

https://cinnamon-spices.linuxmint.com/applets/view/397

Для Cinnamon есть еще один апплет, который может автоматически переключать темы:

Темный режим (от slgobinath)

В отличие от другого (Автоматические светлые/темные темы – от guillaume-mueller), где вы устанавливаете географическое местоположение, в этом вы можете просто установить время, когда переключать.

Ответ или решение

Автоматизация смены тем светленной и тёмной в Linux Mint

Вопрос о том, как автоматизировать переключение между светлой и тёмной темами на Linux Mint, становится всё более актуальным. Пользователи стремятся создать комфортные условия работы в зависимости от времени суток, подобно тому, как это реализовано в macOS и мобильных устройствах. Ниже представлен подробный подход к решению этой задачи, включая создание скриптов и использование существующих решений для Cinnamon.

Шаг 1: Создание скриптов для переключения тем

Для начала, создадим один скрипт, который будет управлять переключением между светлой и тёмной темами, а также учитывать текущее время. Пример скрипта:

#!/bin/bash

function set_light_mode () {
    notify-send "Переключение на светлую тему"
    gsettings set org.cinnamon.desktop.wm.preferences theme Mint-Y
    gsettings set org.cinnamon.desktop.interface gtk-theme Mint-Y
    gsettings set org.cinnamon.theme name Mint-Y
}

function set_dark_mode () {
    notify-send "Переключение на тёмную тему"
    gsettings set org.cinnamon.desktop.wm.preferences theme Mint-Y-Dark
    gsettings set org.cinnamon.desktop.interface gtk-theme Mint-Y-Dark
    gsettings set org.cinnamon.theme name Mint-Y-Dark
}

case "$1" in
    light)
        set_light_mode
        ;;
    dark)
        set_dark_mode
        ;;
    *)
        light_time="0800"
        dark_time="1700"
        current_time="$(date +"%H%M")"

        if [ "$current_time" -ge "$light_time" ] && [ "$current_time" -lt "$dark_time" ]; then
            set_light_mode
        else
            set_dark_mode
        fi
        ;;
esac

Шаг 2: Автоматическое выполнение скрипта

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

crontab -e

Добавьте следующие строки, чтобы запускать скрипт в заданные часы:

0 8 * * * /path/to/your/script.sh
0 17 * * * /path/to/your/script.sh

Эти команды будут запускать скрипт в 08:00 и 17:00. При этом скрипт автоматически переключит тему в зависимости от текущего времени.

Шаг 3: Настройка автозапуска

Для выполнения скрипта при включении системы добавьте его в автозагрузку. Для этого:

  1. Откройте «Приложения автозагрузки» через меню.
  2. Добавьте новую запись, указав имя и путь к вашему скрипту.

Шаг 4: Настройка тем в терминале и редакторе

Для переключения тем в GNOME Terminal и Emacs, вы можете добавить команды в соответствующие функции set_light_mode и set_dark_mode. Например, для GNOME Terminal:

dconf write /org/gnome/terminal/legacy/profiles:/:<your-profile-id>/foreground-color "'#FFFFFF'"
dconf write /org/gnome/terminal/legacy/profiles:/:<your-profile-id>/background-color "'#000000'"

Для Emacs, вам потребуется настроить его конфигурационный файл (~/.emacs):

(load-theme 'light-theme 'no-confirm)

или

(load-theme 'dark-theme 'no-confirm)

Альтернативные Решения

Существует также несколько апплетов для Cinnamon, которые могут помочь в автоматизации этого процесса:

  1. Automatic dark/light themes — этот апплет позволяет переключать темы на основе геолокации.

  2. Dark Mode — апплет, который позволяет настраивать время переключения тем.

Заключение

Используя предложенные шаги и инструменты, вы сможете настроить автоматическое переключение между светлой и тёмной темами на Linux Mint. Это не только улучшит вашу продуктивность, но и создаст более комфортную среду для работы. Выбор адаптивных решений, таких как использование скриптов и установленных апплетов, обеспечит максимальную гибкость и простоту в использовании.

Оцените материал
Добавить комментарий

Капча загружается...