GTK
来自 GTK 网站
- GTK,或称 GIMP 工具包,是一个用于创建图形用户界面的多平台工具包。GTK 提供了一整套完整的部件,适用于从小型一次性工具到完整的应用程序套件的各种项目。
GTK 最初由 GNU 项目 为 GIMP 制作,但现在它是一个非常流行的工具包,为多种语言提供绑定。本文将探讨用于配置 GTK 主题、样式、图标、字体和字体大小的工具,并详细介绍手动配置。
安装
目前有多个版本的 GTK 可用。可以使用以下软件包安装
主题
GTK 3 和 GTK 4
在 GTK 3 和 GTK 4 中,默认主题是 Adwaita,但也包含了 HighContrast 和 HighContrastInverse 主题。
要应用特定主题,请通过 dconf 编辑器在 org.gnome.desktop.interface
命名空间中设置 gtk-theme
属性
$ gsettings set org.gnome.desktop.interface gtk-theme Adwaita
GTK_THEME
环境变量强制指定 GTK 主题,或者使用 libadwaita 的修补版本:libadwaita-without-adwaita-gitAUR。如果您不使用 dconf 属性,则可以使用 GTK_THEME
应用 GTK 3 和 GTK 4 主题。例如,使用 Adwaita 的深色变体启动 GNOME 计算器
$ GTK_THEME=Adwaita:dark gnome-calculator
ADW_DISABLE_PORTAL=1
,才能使通过 GSettings 设置的主题生效。请参阅https://gitlab.gnome.org/GNOME/libadwaita/-/commit/e715fae6a509db006a805af816f9d163f81011efGTK 2
在 GTK 2 中,默认主题是 Raleigh,但 Arch Linux 在 /usr/share/gtk-2.0/gtkrc
中有一个自定义配置文件,它将默认主题设置为 Adwaita。
要更改 GTK 2 主题,请使用 GTK2_RC_FILES
。例如,使用 Raleigh 主题启动 GIMP
$ GTK2_RC_FILES=/usr/share/themes/Raleigh/gtk-2.0/gtkrc gimp
更多主题可以从官方仓库或 AUR 安装。手动提取的主题放在 ~/.themes/
或 ~/.local/share/themes/
目录中。
支持 GTK 2 和 GTK 3 的主题
- Adapta — 基于 Material Design Guidelines 的自适应 GTK 主题。包括:Adapta、Adapta-Eta、Adapta-Nokto、Adapta-Nokto-Eta
- Arc — 具有现代外观和透明元素的扁平主题。包括:Arc、Arc-Dark、Arc-Darker
- Bluebird — Xfce 的蓝色桌面套件。
- Breeze — KDE 默认部件主题的 GTK 版本。包括:Breeze、Breeze-Dark
- Deepin — Deepin 桌面的默认主题。包括:deepin、deepin-dark
- GNOME Extra Themes — GNOME 桌面的额外主题。包括:Adwaita、Adwaita-dark、HighContrast
- Greybird — 一款灰色和蓝色的 Xfce 主题,Xubuntu 12.04 默认使用。
- Materia — 一款类似于 Material Design 的扁平主题,适用于 GTK3、GTK2 和 GNOME-Shell。
- MATE Themes — MATE 桌面的默认主题。包括:BlackMATE、Blue-Submarine、BlueMenta、ContrastHighInverse、Green-Submarine、GreenLaguna、Menta、TraditionalGreen、TraditionalOk
- Numix — 一款扁平轻巧且具有现代外观的主题 (GNOME, Openbox, Unity, Xfce)。包括:Numix
- Vertex — 适用于 GTK 3、GTK 2、Gnome-Shell 和 Cinnamon 的主题。
- Zuki — 适用于 GTK、gnome-shell 等的主题。
AUR 中还有许多其他 GTK 主题,例如:搜索 gtk-theme。
GTK 和 Qt
如果您的桌面上同时有 GTK 和 Qt (KDE) 应用程序,那么您就会知道它们的外观并不协调。如果您希望 GTK 样式与 Qt 样式相匹配,请阅读Qt 和 GTK 应用程序的统一外观。
配置工具
大多数主要的桌面环境都提供了用于配置 GTK 主题、图标、字体和字体大小的工具,并通过XSettings 管理这些设置
- 如果您使用 Cinnamon,请使用主题工具 (cinnamon-settings themes):转到系统设置 > 主题。
- 如果您使用 Enlightenment:转到设置 > 全部 > 外观 > 应用程序主题。
- 如果您使用 GNOME,请使用 GNOME Tweaks (gnome-tweaks):安装 gnome-tweaks。
- 如果您使用 MATE,请使用外观首选项工具 (mate-appearance-properties):转到系统 > 设置 > 外观。
- 如果您使用 Xfce,请使用外观工具:转到设置 > 外观。
其他 GUI 工具通常会覆盖配置文件。
同时支持 GTK 2 和 GTK 3
- nwg-look — 适用于 wlroots 环境的 GTK3 设置编辑器。
- https://github.com/nwg-piotr/nwg-look || nwg-look
- 安装后,可以在首选项 > GTK 设置中找到
nwg-look
。
- KDE GTK Configurator — 允许您更改 GTK 2 和 GTK 3 应用程序的样式和字体的应用程序。
- https://invent.kde.org/plasma/kde-gtk-config || kde-gtk-config
- 安装后,可以在系统设置 > 外观 > 应用程序样式 > 配置 GNOME/GTK 应用程序样式中找到
kde-gtk-config
。
- LXAppearance — 来自 LXDE 项目的独立于桌面的 GTK 2 和 GTK 3 样式配置工具(它不需要 LXDE 桌面的其他部分)。
- Oo-mox — 用于生成 Numix 和 Flat-Plat 主题(GTK 2 和 3)、Archdroid 和 Gnome-Colors 图标主题的不同颜色变体的图形应用程序。还允许生成用于 HiDPI 显示器的预缩放 GTK 2 主题。
仅支持 GTK 2
- GTK Change Theme — 一款小程序,可让您更改 GTK 2.0 主题(被认为是 switch2 的更好替代品)。
- GTK Preference Tool — GTK 主题选择器和字体切换器。
- https://gtk-win.sourceforge.io/home/index.php/Main/GTKPreferenceTool[死链 2024-07-30 ⓘ] || gtk2_prefsAUR
- GTK Theme Switch — 简单的 GTK 主题切换器。
配置
GTK 设置可以在配置文件中手动指定,但桌面环境和应用程序可以覆盖这些设置。根据 GTK 版本,这些文件位于
- GTK 2 用户特定:
$GTK2_RC_FILES
,~/.gtkrc-2.0
- GTK 2 系统范围:
/etc/gtk-2.0/gtkrc
- GTK 3 用户特定:
$XDG_CONFIG_HOME/gtk-3.0/settings.ini
,或者如果未设置$XDG_CONFIG_HOME
,则为$HOME/.config/gtk-3.0/settings.ini
- GTK 3 系统范围:
/etc/gtk-3.0/settings.ini
基本主题配置
要手动更改 GTK 主题、图标、字体和字体大小,请将以下内容添加到配置文件中,例如
- GTK 2
~/.gtkrc-2.0
gtk-icon-theme-name = "Adwaita" gtk-theme-name = "Adwaita" gtk-font-name = "DejaVu Sans 11"
- GTK 3
$XDG_CONFIG_HOME/gtk-3.0/settings.ini
[Settings] gtk-icon-theme-name = Adwaita gtk-theme-name = Adwaita gtk-font-name = DejaVu Sans 11
如果主题未应用于 GTK 3,请另外使用 gsettings
$ gsettings set org.gnome.desktop.interface gtk-theme theme_name
同样,如果图标主题未应用于 GTK 3,请使用 gsettings
$ gsettings set org.gnome.desktop.interface icon-theme icon_theme_name
有关手动下载和安装图标的信息,请参阅 图标。
gtk-icon-theme-name
和 gtk-theme-name
是其目录的名称,而不是其 index.theme
中的 name 属性。深色主题变体
某些 GTK 3 主题包含深色主题变体,但仅当应用程序显式请求时才默认使用。要将深色主题变体用于所有 GTK 3 应用程序,请设置
gtk-application-prefer-dark-theme = true
对于 GTK 4,请使用
$ gsettings set org.gnome.desktop.interface color-scheme prefer-dark
键盘快捷键
可以通过将鼠标悬停在相应的菜单项上并按下所需的组合键来更改键盘快捷键(在 GTK 中也称为加速器)。要启用此功能,请设置
gtk-can-change-accels = 1
Emacs 键绑定
要在 GTK 应用程序中具有类似 Emacs 的键绑定,请添加以下内容
~/.gtkrc-2.0
gtk-key-theme-name = "Emacs"
~/.config/gtk-3.0/settings.ini
[Settings] gtk-key-theme-name = Emacs
对于 GTK3,也请运行
$ gsettings set org.gnome.desktop.interface gtk-key-theme "Emacs"
XFCE 具有类似的设置
$ xfconf-query -c xsettings -p /Gtk/KeyThemeName -s Emacs
声明键绑定
配置文件(例如 /usr/share/themes/Emacs/
中的文件)确定了 Emacs 绑定的内容,并且可以更改。
/usr/share/themes/Emacs/gtk-2.0-key/gtkrc
binding "gtk-emacs-text-entry" { bind "<ctrl>b" { "move-cursor" (logical-positions, -1, 0) } ... }
/usr/share/themes/Emacs/gtk-3.0/gtk-keys.css
@binding-set gtk-emacs-text-entry { bind "<ctrl>b" { "move-cursor" (logical-positions, -1, 0) }; ... }
将部分内容复制到用户的 ~/.gtkrc-2.0
和 ~/.themes/your-new-key-theme/gtk-3.0/gtk-keys.css
分别允许对 GTK 2 和 3 进行基于用户的更改。
此设置控制鼠标指向菜单和菜单打开之间的延迟。此延迟以毫秒为单位。
gtk-menu-popup-delay = 0
减小部件尺寸
如果您有一个小屏幕,或者您只是不喜欢大图标和小部件,则可以轻松调整大小。
要在工具栏中拥有没有文本的图标(有效值),请使用
gtk-toolbar-style = GTK_TOOLBAR_ICONS
要使用较小的图标,请使用如下行
gtk-icon-sizes = "panel-menu=16,16:panel=16,16:gtk-menu=16,16:gtk-large-toolbar=16,16\ :gtk-small-toolbar=16,16:gtk-button=16,16"
或者完全从按钮中删除图标
gtk-button-images = 0
您也可以从菜单中删除图标
gtk-menu-images = 0
隐藏 CSD 按钮
要从 gtk3 窗口中删除客户端装饰 (CSD)[3] 最小化和最大化按钮
gtk-decoration-layout=menu:close
请参阅 GTK 文档。
禁用鼠标粘贴
要关闭在单击鼠标中键时从剪贴板(PRIMARY 选择)粘贴,请设置
gtk-enable-primary-paste=false
文件选择器启动位置
在当前工作目录而不是最近位置中打开文件选择器。通常当前工作目录是主目录。
GTK 3
使用以下命令更改 设置
$ gsettings set org.gtk.Settings.FileChooser startup-mode cwd
GTK 2
将以下内容添加到 ~/.config/gtk-2.0/gtkfilechooser.ini
StartupMode=cwd
旧式滚动行为
在 GTK 3.6 之前,单击滚动条中滑块的任一侧都会使滚动条沿单击方向移动大约一页。自 GTK 3.6 起,滑块将直接移动到单击位置。可以通过创建包含以下内容的文件,在某些应用程序中恢复此行为
~/.config/gtk-3.0/settings.ini
[Settings] gtk-primary-button-warps-slider = false
禁用覆盖滚动条
自 GTK 3.15 起,默认启用覆盖滚动条,这意味着滚动条仅在 GTK 3 应用程序中鼠标悬停时显示。可以通过设置以下环境变量来恢复此行为:GTK_OVERLAY_SCROLLING=0
。请参阅环境变量#图形环境。
或者,自 GTK 3.24.9 起,可以在 GTK 3 设置中禁用覆盖滚动条。为此,必须在设置文件的 [Settings] 部分中将 gtk-overlay-scrolling 的值设置为 false
~/.config/gtk-3.0/settings.ini
[Settings] gtk-overlay-scrolling = false
GTK 4 将不再支持 GTK_OVERLAY_SCROLLING
。它已从 master 分支中删除。从 GTK 4 开始,滚动条的覆盖性质是工具包的一部分。已删除 blanket 开关,以防止开发人员破坏尚未针对两种组合进行测试的应用程序。为了让应用程序开发人员决定其应用程序的外观,工具包反而提供了一种机制,允许选择退出或为用户添加设置。gtk_scrolled_window_set_overlay_scrolling() 函数可用于在每个应用程序的基础上启用/禁用覆盖滚动。应用程序开发人员可以选择使用 GSettings 将用户设置绑定到该属性。
移除覆盖滚动指示器
覆盖滚动条的位置由应用程序窗口中的细虚线指示。即使使用上面部分讨论的环境变量禁用覆盖滚动,这些虚线仍然存在。要删除指示线,请创建以下文件
~/.config/gtk-3.0/gtk.css
/* Remove dotted lines from GTK 3 applications */ undershoot.top, undershoot.right, undershoot.bottom, undershoot.left { background-image: none; }
示例
GTK 示例配置
~/.gtkrc-2.0
gtk-theme-name="Arc-Dark" gtk-icon-theme-name="breeze-dark" gtk-font-name="Sans 11" gtk-cursor-theme-name="Breeze_Amber" gtk-cursor-theme-size=0 gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ gtk-toolbar-icon-size=GTK_ICON_SIZE_SMALL_TOOLBAR gtk-button-images=0 gtk-menu-images=0 gtk-enable-event-sounds=0 gtk-enable-input-feedback-sounds=0 gtk-xft-antialias=1 gtk-xft-hinting=1 gtk-xft-hintstyle="hintslight" gtk-xft-rgba="rgb"
~/.config/gtk-3.0/settings.ini
[Settings] gtk-theme-name=Arc-Dark gtk-icon-theme-name=breeze-dark gtk-font-name=Sans 11 gtk-cursor-theme-name=Breeze_Amber gtk-cursor-theme-size=0 gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ gtk-toolbar-icon-size=GTK_ICON_SIZE_SMALL_TOOLBAR gtk-button-images=0 gtk-menu-images=0 gtk-enable-event-sounds=0 gtk-enable-input-feedback-sounds=0 gtk-xft-antialias=1 gtk-xft-hinting=1 gtk-xft-hintstyle=hintslight gtk-xft-rgba=rgb # gtk-decoration-layout=menu:close # gtk-application-prefer-dark-theme=1
GDK 后端
GDK(GTK 的底层抽象层)支持多个后端来显示 GTK 应用程序。
Wayland 后端
GDK Wayland 后端仅受 gtk3 或更高版本支持,并且是在使用 Wayland 显示服务器时的默认后端。
使用早于 gtk3 版本的 GTK 的应用程序不具有 Wayland 支持,并且需要使用 Xwayland 才能在使用 X11 后端的 Wayland 会话上运行。
使用 Wayland 后端时,某些变量不是从 settings.ini
获取的。GSettings 架构 org.gnome.desktop.interface
中存在的任何键都将从那里读取,而不是从 settings.ini
读取。
此类变量的示例包括 gtk-color-scheme
和 icon-theme
,必须使用 GSettings 设置其键,才能在 Wayland 下主题化 GTK 应用程序。或者,如果只需要自定义主题,则可以设置环境变量 GTK_THEME
。
有关此方面的更多详细信息,请参阅 sway wiki 上的相关文章。
Xorg 后端
如果正在使用 Xorg 显示服务器,则后端默认设置为 x11。
可以通过设置环境变量 GDK_BACKEND=x11
,强制在 wayland 会话上运行的 GTK3 应用程序使用 X11 后端(通过 Xwayland)。
Broadway 后端
GDK Broadway 后端提供对使用 HTML5 和 Web 套接字在 Web 浏览器中显示 GTK 应用程序的支持。[4]
使用 broadwayd 时,请指定要使用的显示编号,并在其前面加上冒号,类似于 X。默认显示编号为 0(零)。
$ display_number=:5
启动它。
$ broadwayd $display_number
默认使用的端口
port = 8080 + $display_number
将您的浏览器指向 http://127.0.0.1:port
要启动应用程序
$ GDK_BACKEND=broadway BROADWAY_DISPLAY=$display_number <<application>>
或者可以设置地址和端口
$ broadwayd --port $port_number --address $address $display_number
故障排除
GTK 2 和 GTK 3 应用程序之间主题不同
一般来说,如果选定的主题同时支持 GTK 2 和 GTK 3,则该主题将应用于所有 GTK 2 和 GTK 3 应用程序。如果选定的主题仅支持 GTK 2,则它将用于 GTK 2 应用程序,而默认 GTK 主题将用于 GTK 3 应用程序。如果选定的主题仅支持 GTK 3,则它将用于 GTK 3 应用程序,而默认 GTK 主题将用于 GTK 2 应用程序。因此,为了应用程序主题的一致性,最好使用同时支持 GTK 2 和 GTK 3 的主题。
您可以使用以下命令找到系统上安装的哪些主题同时具有 GTK 2 和 GTK 3 版本(不适用于包含空格的名称)
find $(find ~/.themes /usr/share/themes/ -wholename "*/gtk-3.0" | sed -e "s/^\(.*\)\/gtk-3.0$/\1/") -wholename "*/gtk-2.0" | sed -e "s/.*\/\(.*\)\/gtk-2.0/\1"/
主题未应用于 root 应用程序
由于其他帐户不会读取用户主题文件($XDG_CONFIG_HOME/gtk-3.0/settings.ini
、~/.gtkrc-2.0
),因此选定的主题将不适用于以 root 身份运行的 X 应用程序。可能的解决方案包括
- 创建符号链接,例如
# ln -s $HOME/.gtkrc-2.0 /etc/gtk-2.0/gtkrc # ln -s $HOME/.config/gtk-3.0/settings.ini /etc/gtk-3.0/settings.ini
- 配置系统范围的主题文件:
/etc/gtk-3.0/settings.ini
(GTK 3) 或/etc/gtk-2.0/gtkrc
(GTK 2) - 以 root 身份调整主题
# lxappearance
- 使用设置守护程序(这是大多数桌面环境的做法)。使用 XSettings 的桌面无关变体可通过 xsettingsd-gitAUR 获得。
客户端装饰
GTK 3.12 引入了客户端装饰,它将标题栏从窗口管理器中移开。这可能会出现诸如双标题栏、根本没有标题栏、启用合成时出现双阴影或无法移动冻结的应用程序等问题。
要删除窗口周围的阴影和间隙(例如与平铺窗口管理器结合使用),请创建以下文件
~/.config/gtk-3.0/gtk.css
.window-frame, .window-frame:backdrop { box-shadow: 0 0 0 black; border-style: none; margin: 0; border-radius: 0; } .titlebar { border-radius: 0; } .window-frame.csd.popup { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.13); } .header-bar { background-image: none; background-color: #ededed; box-shadow: none; } /* You may want to use this if you do not like the double title. GtkLabel.title { opacity: 0; }*/
请注意,如果视觉问题仍然存在,您可能需要使用 GTK Inspector 查找有问题的元素,如此处所述 [5]。
要调整标题栏中的按钮,请使用 gtk-decoration-layout
设置。[6] 以下示例删除了所有按钮
~/.config/gtk-3.0/settings.ini
gtk-decoration-layout=menu:
要完全删除客户端装饰,您可以使用 gtk3-classicAUR,其中包含一个默认禁用它们的补丁。要启用客户端装饰,请使用任何值设置 GTK_CSD
环境变量。
或者,您可以使用 gtk3-nocsd-gitAUR,有关详细信息,请参阅 README。
cedilla ç/Ç 而不是 ć/Ć
请参阅 [7] 和 [8],了解使用 Xcompose(美国国际键盘布局)的解决方法。
抑制关于辅助功能总线的警告
如果您不使用任何 Gnome 辅助功能,您可能会收到如下警告:
WARNING **: Couldn't connect to accessibility bus:
要抑制这些警告,请使用 NO_AT_BRIDGE=1
执行程序,或者将其设置为全局环境变量。
标题栏背景颜色不匹配
如果您正在使用一个窗口管理器,它使用的窗口装饰主题模仿了 GTK 主题背景颜色,您可能会发现在某些 GTK 3 应用程序中,标题栏颜色不再与应用程序颜色完全匹配。作为一种解决方法,请创建以下文件:
~/.config/gtk-3.0/gtk.css
/* Always use background color */ GtkWindow { background-color: @theme_bg_color; } /* Fix tooltip background override */ .tooltip { background-color: rgba(0, 0, 0, 0.8); } .tooltip * { background-color: transparent; } /* Fix Nautilus desktop window background override */ NautilusWindow { background-color: transparent; }
平铺窗口管理器中错误的焦点事件
定义 GDK_CORE_DEVICE_EVENTS=1
以使用 GTK2 风格的输入,而不是 xinput2。[10]
GTK 文件对话框的缩略图支持
安装 gtk2-patched-filechooser-icon-viewAUR 和 gtk3-patched-filechooser-icon-viewAUR,以便在 GTK 文件选择器中可以选择将文件显示为缩略图而不是列表。
对于 GNOME Wayland 会话中的某些应用程序,您的 ~/.config/gtk-3.0/settings.ini
文件配置错误。如果您尝试其他基于 GTK 的桌面环境,可能会发生这种情况。以下是导致问题的数值:
~/.config/gtk-3.0/settings.ini
[Settings] gtk-button-images=1 gtk-menu-images=1
只需将它们设置为 0 或删除整个文件即可使用 GNOME 默认设置。
没有 polkit 的 GTK 3
GTK3 通过 colord 依赖于 polkit,而 colord 是打印所必需的。但是,即使没有安装 polkit,打印也可以正常工作;至少在使用单色打印机和软件包版本 gtk3-print-backends=3.22.19-2 以及 colord=1.4.1-1 的情况下是这样。
一些 GTK 2 主题仅更改 UI 调色板
根据所选主题对 GTK 2 的支持程度,UI 控件可能仍然具有默认的 Raleigh 外观,可能只是调色板不同。这是因为这些主题需要 GTK 2 Murrine 引擎,但该引擎缺失(GTK 2 程序应该会在其标准错误输出中抱怨这一点)。安装 gtk-engine-murrine 软件包。
补丁 GTK 文件选择器以使用常规的提前输入
GTK 文件选择器使用与 GNOME/Files 相同的提前查找功能。这可能会非常不协调,并且与其他桌面环境不太协调。
一些应用程序支持 XDG Desktop Portal,它允许应用程序使用原生文件选择器。如果这不起作用,您可以通过使用打过补丁的 GTK 来恢复提前输入功能,例如 gtk3-classicAUR。
GTK 4 应用程序中的文本模糊或渲染不正确
GTK 4 在渲染字体时切换到无 hinting 的灰度抗锯齿。有一个设置可以恢复 GTK 3 的某些行为 [11]。对于非 HiDPI 屏幕,默认情况下它是开启的(截至 2023 年 8 月),这应该为大多数用户产生良好的效果。亚像素抗锯齿不可用。
~/.config/gtk-4.0/settings.ini
[Settings] gtk-hint-font-metrics=1
GTK 4 应用程序运行缓慢
因为 GTK 切换到了新的 GPU 渲染器 ngl(以及更高版本中的 vulkan),其性能比旧的 gl 渲染器更差(#6438, #6682, #6644, #6324 以及可能更多的问题),GTK 4 应用程序可能会感觉迟缓并且比以前消耗更多资源。
这可以通过设置下面的环境变量来恢复。
GSK_RENDERER=gl GDK_DEBUG=gl-no-fractional
GTK4 的渲染和缩放问题
amdvlk 的用户报告说,自 gtk4 版本 4.15.3 以来,他们看到了 黑边框和异常大的光标。
这可以通过将 amdvlk 替换为 vulkan-radeon 来解决,尽管也有人报告说使用 最新的 GTK4 版本已切换到 vulkan 渲染器;这对于使用 NVIDIA dGPU 的用户来说是有问题的,因为 默认情况下会使用这些渲染器,原因是 GTK 在枚举设备时选择第一个可用的 GPU,而 NVIDIA 通常将 dGPU 作为第一个呈现。目前最可靠的解决方案是恢复到基于 OpenGL 的渲染器之一;这可以通过设置 或者,设置 GSK_RENDERER=ngl
在 NVIDIA Optimus 设置上使用 dGPU 的 GTK4 应用程序
GSK_RENDERER=ngl
可能性能更好)。GDK_VULKAN_DEVICE=device_index
参见