Dark mode switching (Русский)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Состояние перевода: На этой странице представлен перевод статьи Dark mode switching. Дата последней синхронизации: 15 сентября 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Приятно иметь возможность переключения между светлой и тёмной темой. Существуют варианты переключения по заходу солнца или по сочетанию клавиш.

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

Для переключения требуется поддержка от приложения или использование приложением GTK или Qt.

Инструменты

  • darkman — darkman — инструмент, позволяющий автоматизировать переход в тёмную тему на закате и возврат к светлой теме на восходе. Он позволяет разместить drop-in скрипты, которые будут автоматически выполняться в нужное время.
https://gitlab.com/WhyNotHugo/darkman/ || darkmanAUR
  • Yin-Yang — Yin-Yang — другой инструмент с похожими возможностями, однако запуск произвольных скриптов ещё не поддерживается.
https://github.com/oskarsh/Yin-Yang || yin-yang-gitAUR

GTK

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

Большинство тем GTK имеют тёмный вариант, обычно они обозначены суффиксом -dark. Например стандартная тема для GTK называется Adwaita, а тёмный вариант называется Adwaita-dark.

Чтобы залочить тёмный вариант, смотрите GTK (Русский)#Вариант тёмной темы.

Чтобы мгновенно сменить тему уже работающих приложений, требуется или демон, предоставляющий xsettings spec, или gsettings. Для окружений, работающих в Xorg нужен демон xsettings. Для Wayland нужен gsettings.

Демон xsettings

xsettings нужен для сессий Xorg.

Демон xsettings для Xfcexfsettingsd, доступен в пакете xfce4-settings.

Получить текущую используемую тему:

$ xfconf-query -c xsettings -p /Net/ThemeName

Установить тему:

$ xfconf-query -c xsettings -p /Net/ThemeName -s "new-theme"

Изменения применяются мгновенно и влияют на все приложения, использующие GTK.

gsettings

gsettings нужен для сессий Wayland.

Получить текущую используемую тему:

$ gsettings get org.gnome.desktop.interface gtk-theme

Установить тему:

$ gsettings set org.gnome.desktop.interface gtk-theme "new-theme"

Изменения применяются мгновенно и влияют на все приложения, использующие GTK.

Qt

Qt имеет механизм поддержки тем, похожий на GTK.

Один из вариантов — использовать GTK для стилизации Qt-приложений. Тогда изменение темы GTK повлияет и на Qt-приложения тоже.

Другой способ — использовать родную тему Qt, например adwaita-qtAUR. Для переключения тем смотрите Qt#Configuration of Qt5 apps under environments other than KDE Plasma.

Xfce

Смена темы в Xfce происходит похожим образом через xsettingsd, который распространяется в виде пакета xfce4-settings.

Приложения

Firefox

Firefox автоматически подхватывает текущую тему GTK и адаптирует свой интерфейс. Смотри раздел Firefox (Русский)#Тёмные темы чтобы узнать больше.

Чтобы изменить тему веб страниц, в магазине расширений Firefox рекомендуется расширение Dark Reader.

Thunderbird

Thunderbird применяет текущую тему GTK, но рекомендуются некоторые самостоятельные действия.

Смотрите Thunderbird#Theming tweaks.

Visual Studio Code

Для Visual Studio Code может пригодиться этот скрипт.

Alacritty

Alacritty поддерживает множество тем. Примеры конфигурации можно найти на странице color schemes на вики в GitHub репозитории проекта. Например, известная в IDEA тема Darkula есть в разделе Dracula на этой же странице.

Чтобы быстро сменить тему, требуется определить указатель для каждой цветовой схемы. Например укажите &black после названия. После этого просто выполните colors: *black. Изменение в файле конфигурации применится мгновенно и затронет все запущенные экземпляры. Если нет, возможно понадобится прописать live_config_reload: true.

Границы окна и тайтлбар подчиняются теме GTK, но можно форсировать собственное поведение, установив настроку gtk_theme_variant в положение None.