Вопрос или проблема
Я пользователь 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
В настоящее время я запускаю их вручную, когда хочу переключиться между двумя темами.
Большинство программ учитывают тему всей ОС, что делает этот метод удивительно эффективным! Однако есть три проблемы, которые я хотел бы решить с помощью этого подхода:
- Автоматическое переключение между светлыми/темными режимами в зависимости от времени дня (как в macOS). Я пробовал использовать
cron
иanacron
, но они не работают хорошо для этой цели. Когда мой компьютер включается после отключения, я хочу, чтобы он осознал, что время переключения прошло, и выполнил переключение режима (как в macOS и различных мобильных устройствах); - Я хотел бы, чтобы мой терминал (GNOME Terminal, по умолчанию Cinnamon) переключался с светлой темы на темную (и наоборот); и
- Я хотел бы, чтобы мой текстовый редактор (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 теперь есть новый апплет, который предоставляет эту возможность, синхронизируя с местоположением, чтобы сменить темы в сумерках.
Для Cinnamon есть еще один апплет, который может автоматически переключать темы:
В отличие от другого (Автоматические светлые/темные темы – от 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: Настройка автозапуска
Для выполнения скрипта при включении системы добавьте его в автозагрузку. Для этого:
- Откройте «Приложения автозагрузки» через меню.
- Добавьте новую запись, указав имя и путь к вашему скрипту.
Шаг 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, которые могут помочь в автоматизации этого процесса:
-
Automatic dark/light themes — этот апплет позволяет переключать темы на основе геолокации.
-
Dark Mode — апплет, который позволяет настраивать время переключения тем.
Заключение
Используя предложенные шаги и инструменты, вы сможете настроить автоматическое переключение между светлой и тёмной темами на Linux Mint. Это не только улучшит вашу продуктивность, но и создаст более комфортную среду для работы. Выбор адаптивных решений, таких как использование скриптов и установленных апплетов, обеспечит максимальную гибкость и простоту в использовании.