切换暗黑模式
在浅色和深色模式/主题之间切换是一个很实用的功能。它允许你在日落时切换到深色模式,或通过键盘快捷键切换模式。
主题的切换可以应用于当前正在运行的程序(这可能需要一个守护进程),或者仅应用于新启动的程序。本文重点讨论运行时切换,因此在使用过程中切换会影响当前运行的程序。
在浅色和深色模式之间切换需要应用程序或应用程序工具包(如 GTK 和 Qt)的支持。
如果你不需要实时主题切换,想要快速在全系统设置深色主题,请安装 gnome-themes-extra, gnome-themes-extra-gtk2AUR, adwaita-qt5-gitAUR 和 adwaita-qt6-gitAUR,然后导出环境变量 GTK_THEME=Adwaita:dark, GTK2_RC_FILES=/usr/share/themes/Adwaita-dark/gtk-2.0/gtkrc 以及 QT_STYLE_OVERRIDE=Adwaita-Dark。
工具
- darkman — darkman 是一个允许在日落时自动过渡到深色模式、在日出时恢复到浅色模式的工具。它允许放置可在这些时间点自动运行的脚本。它还提供了一个带有当前值的 XDG Desktop Portal 后端。
- Yin-Yang — Yin-Yang 是一个类似的工具,也可以手动运行(不仅限于日落/日出)。目前它支持 Plasma、GNOME 和 Budgie 桌面环境,以及一些最常用的杂项应用程序(Firefox、VSCode 等)。同时支持运行自定义脚本。
- Blueblack — Blueblack 是 darkman 的一个替代方案,不依赖于 geoclue。通过提供自己的位置信息,即可自动在日出和日落时运行脚本。
工具包
GTK
要更改浅色/深色模式,你必须更改所使用的主题。
大多数主题都有深色变体,按照惯例,这些变体带有 -dark 后缀。例如,默认的 GTK 主题 Adwaita 具有变体 Adwaita-dark。
要永久更改为深色变体,请参阅 GTK#Dark theme variant
为了让运行中的程序立即切换主题,需要一个提供 xsettings 规范 的守护进程或使用 gsettings。对于运行 Xorg 的桌面,需要 xsettings 守护进程。对于运行 Wayland 的桌面,则查询 gsettings。为了查询 gsettings 配置,GTK 要求由 xdg-desktop-portal-gtk 提供的 Settings XDG Desktop Portal 处于运行状态。
xsettings 守护进程
对于 Xorg 会话,将查询 xsettings。
Xfce 的 xsettings 守护进程是 xfsettingsd,由 xfce4-settings 软件包提供。
查询当前 GTK 主题
$ xfconf-query -c xsettings -p /Net/ThemeName
设置 GTK 主题
$ xfconf-query -c xsettings -p /Net/ThemeName -s "new-theme"
对此项的更改是即时的,并影响所有 GTK 应用程序。
gsettings
对于 Wayland 会话,将查询 gsettings。为了使其生效,你需要运行 xdg-desktop-portal-gtk。
查询当前 GTK 主题
$ gsettings get org.gnome.desktop.interface gtk-theme
设置 GTK 主题
$ gsettings set org.gnome.desktop.interface gtk-theme "new-theme"
另外,如果你的主题没有将深色方案应用于 Gtk4 应用程序,你可以请求默认主题的深色变体
$ gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
或浅色变体
$ gsettings set org.gnome.desktop.interface color-scheme 'prefer-light'
对此项的更改是即时的,并影响所有 GTK 应用程序。
请注意,并非所有 GTK 主题都支持浅色和深色变体。特别是,如果你使用的是 KDE,Breeze GTK 主题并不支持此功能。你可以通过运行以下命令切换到 Adwaita 主题。
KDE
如果你使用的是 KDE 并且想要实时切换深色和浅色模式(即使这意味着 Qt 和 GTK 应用程序使用不同的主题),你可以将 GTK 主题切换到支持深浅两种变体的主题——例如默认的 Adwaita 主题。你可以通过运行以下命令切换到 Adwaita 主题:
$ gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita'
如果你想恢复到 KDE 默认主题,请运行:
$ gsettings set org.gnome.desktop.interface gtk-theme 'Breeze'
这样做将允许你即使在已经运行的应用程序中,也能使用上述 color-scheme 命令切换主题。它还会遵循 KDE 的深色/浅色设置,该设置可以在 KDE 设置中开启。
Qt
Qt 具有与 GTK 类似的主题支持。
为 Qt 应用程序设置主题的一种方法是使用 GTK 进行样式设置。这样,对 GTK 主题的更改也会影响 Qt 应用程序。
另一种方法是使用原生 Qt 主题,例如 adwaita-qt5-gitAUR。要切换主题,你可以参考 Qt#Configuration of Qt 5/6 applications under environments other than KDE Plasma。
应用程序
Firefox
Firefox 会自动使用当前的 GTK 主题模式,并相应地调整浏览器的外观。更多设置和注意事项请参阅 Firefox#Dark themes。
为了智能地更改网页内容,建议使用 Dark Reader 扩展。
通过将 Automation 设置为 Use system color scheme,Dark Reader 会在 GTK 深色主题下自动激活。
Libreoffice
LibreOffice 会自动使用当前的 GTK 主题模式。要手动设置,请使用:
Tools > Options > Preferences > View > Appearance > Mode: Dark.
Thunderbird
Thunderbird 符合当前的 GTK 主题,但建议进行一些更改。
请参阅 Thunderbird#Theming tweaks。
Visual Studio Code
要在 Visual Studio Code 中更改主题,这个脚本可能会有所帮助。
它还支持基于系统主题的自动主题切换。配置 settings.json 文件以包含 "window.autoDetectColorScheme": true,。
还可以自定义以下设置,以确定切换时使用哪些浅色和深色主题。默认情况下,它们分别设置为 "Default Modern Light 和 Default Modern Dark
"workbench.preferredLightColorTheme": "Default Modern Light", "workbench.preferredDarkColorTheme": "Default Modern Dark",
如果 window.autoDetectColorScheme 设置为 true,它将优先于 workbench.colorTheme 设置。
IntelliJ
安装 Auto Dark Mode 插件后,它将根据当前的 GTK 主题自动切换主题。
Alacritty
Alacritty 支持多种自定义配色方案。配置语法和已发布的配色方案可以在这里找到。
要快速更改主题,你应该为每个配色方案声明一个指针,例如 &black。然后你只需设置 colors: *black 即可切换到该配色方案。对配置文件的这种更改是即时的,并影响所有当前运行的实例。如果无效,你可能需要设置 live_config_reload: true。
边框和标题栏使用 GTK 进行主题化。为了遵循 GTK 主题,你应该将 gtk_theme_variant 设置为默认的 None。
Ghostty
Ghostty 支持浅色和深色主题
要使用此功能,请在配置文件中添加一行,指定深色和浅色模式的主题
theme = dark:catppuccin-frappe,light:catppuccin-latte
Obsidian
这可以在以下位置设置:
Settings > Appearance > Base color scheme > Adapt to system