如何获取、安装和制作 GTK 主题

多数桌面版 Linux 都支持主题。GUI(LCTT 译注:图形用户界面)独有的外观或者“风格”叫做主题。用户可以改变主题让桌面看起来与众不同。通常,用户也会更改图标,然而,主题和图标包是两个独立的实体。很多人想制作他们自己的主题,因此这是一篇关于 GTK 主题的制作以及各种制作时所必需的信息的文章。

注意: 这篇文章着重讨论 GTK3,但会稍微谈一下 GTK2、Metacity 等。本文不会讨论光标和图标。

基本概念

GIMP 工具包(简称 GTK)是一个用来在多种系统上(因此造就了 GTK 的跨平台)创建图形用户界面的构件工具包。GTK(http://www.gtk.org/)通常被误认为代表“GNOME 工具包”,但实际上它代表“GIMP 工具包”,因为最初创造它是为了给 GIMP 设计用户界面。GTK 是一个用 C 语言编写的面向对象工具包(GTK 本身不是一种语言)。GTK 遵循 LGPL 协议完全开源。GTK 是一个广泛使用的图形用户界面工具包,它含有很多用于 GTK 的工具。

为 GTK 制作的主题无法用在基于 Qt 的应用上。QT 应用需要使用 Qt 主题。

主题使用层叠样式表(CSS)来生成主题样式。这里的 CSS 和网站开发者在网页上使用的相同。然而不是引用 HTML 标签,而是引用 GTK 构件的专用标签。学习 CSS 对主题开发者来说很重要。

主题存放位置

主题可能会存储在 ~/.themes 或者 /usr/share/themes 文件夹中。存放在 ~/.themes 文件夹下的主题只有此 home 文件夹的所有者可以使用。而存放在 /usr/share/themes 文件夹下的全局主题可供所有用户使用。当执行 GTK 程序时,它会按照某种确定的顺序检查可用主题文件的列表。如果没有找到主题文件,它会尝试检查列表中的下一个文件。下述文字是 GTK3 程序检查时的顺序列表。

  1. $XDG_CONFIG_HOME/gtk-3.0/gtk.css (另一写法 ~/.config/gtk-3.0/gtk.css
  2. ~/.themes/NAME/gtk-3.0/gtk.css
  3. $datadir/share/themes/NAME/gtk-3.0/gtk.css (另一写法 /usr/share/themes/name/gtk-3.0/gtk.css

注意: “NAME”代表当前主题名称。

如果有两个主题名字相同,那么存放在用户 home 文件夹(~/.themes)里的主题会被优先使用。开发者可以利用这个 GTK 主题查找算法的优势来测试存放在本地 home 文件夹的主题。

主题引擎

主题引擎是软件的一部分,用来改变图形用户界面构件的外观。引擎通过解析主题文件来了解应当绘制多少种构件。有些引擎随着主题被开发出来。每种引擎都有优点和缺点,还有些引擎添加了某些特性和特色。

从默认软件源中可以获取很多主题引擎。Debian 系的 Linux 发行版可以执行 apt-get install gtk2-engines-murrine gtk2-engines-pixbuf gtk3-engines-unico 命令来安装三种不同的引擎。很多引擎同时支持 GTK2 和 GTK3。以下述列表为例:

  • gtk2-engines-aurora - Aurora GTK2 引擎
  • gtk2-engines-pixbuf - Pixbuf GTK2 引擎
  • gtk3-engines-oxygen - 将 Oxygen 组件风格移植 GTK 的引擎
  • gtk3-engines-unico - Unico GTK3 引擎
  • gtk3-engines-xfce - 用于 Xfce 的 GTK3 引擎

创作 GTK3 主题

开发者创作 GTK3 主题时,或者从空文件着手,或者将已有的主题作为模板。从现存主题着手可能会对新手有帮助。比如,开发者可以把主题复制到用户的 home 文件夹,然后编辑这些文件。

GTK3 主题的通用格式是新建一个以主题名字命名的文件夹。然后新建一个名为 gtk-3.0 的子目录,在子目录里新建一个名为 gtk.css 的文件。在文件 gtk.css 里,使用 CSS 代码写出主题的外观。为了测试可以将主题移动到 ~/.theme 里。使用新主题并在必要时进行改进。如果有需求,开发者可以添加额外的组件,使主题支持 GTK2、Openbox、Metacity、Unity 等桌面环境。

为了阐明如何创造主题,我们会学习 Ambiance 主题,通常可以在 /usr/share/themes/Ambiance 找到它。此目录包含下面列出的子目录以及一个名为 index.theme 的文件。

  • gtk-2.0
  • gtk-3.0
  • metacity-1
  • unity

index.theme 含有元数据(比如主题的名字)和一些重要的配置(比如按钮的布局)。下面是 Ambiance 主题的 index.theme 文件内容。


  1. [Desktop Entry]
  2. Type=X-GNOME-Metatheme
  3. Name=Ambiance
  4. Comment=Ubuntu Ambiance theme
  5. Encoding=UTF-8
  6. [X-GNOME-Metatheme]
  7. GtkTheme=Ambiance
  8. MetacityTheme=Ambiance
  9. IconTheme=ubuntu-mono-dark
  10. CursorTheme=DMZ-White
  11. ButtonLayout=close,minimize,maximize:
  12. X-Ubuntu-UseOverlayScrollbars=true

gtk-2.0 目录包括支持 GTK2 的文件,比如文件 gtkrc 和文件夹 apps。文件夹 apps 包括具体程序的 GTK 配置。文件 gtkrc 是 GTK2 部分的主要 CSS 文件。下面是 /usr/share/themes/Ambiance/gtk-2.0/apps/nautilus.rc 文件的内容。


  1. # ==============================================================================
  2. # NAUTILUS SPECIFIC SETTINGS
  3. # ==============================================================================
  4. style "nautilus_info_pane" {
  5. bg[NORMAL] = @bg_color
  6. }
  7. widget_class "*Nautilus*<GtkNotebook>*<GtkEventBox>" style "nautilus_info_pane"
  8. widget_class "*Nautilus*<GtkButton>" style "notebook_button"
  9. widget_class "*Nautilus*<GtkButton>*<GtkLabel>" style "notebook_button"

gtk-3.0 目录里是 GTK3 的文件。GTK3 使用 gtk.css 取代了 gtkrc 作为主文件。对于 Ambiance 主题,此文件有一行 @import url("gtk-main.css");settings.ini 包含重要的主题级配置。GTK3 主题的apps 目录和 GTK2 有同样的作用。assets 目录里有单选按钮、多选框等的图像文件。下面是/usr/share/themes/Ambiance/gtk-3.0/gtk-main.css 的内容。


  1. /*default color scheme */
  2. @define-color bg_color #f2f1f0;
  3. @define-color fg_color #4c4c4c;
  4. @define-color base_color #ffffff;
  5. @define-color text_color #3C3C3C;
  6. @define-color selected_bg_color #f07746;
  7. @define-color selected_fg_color #ffffff;
  8. @define-color tooltip_bg_color #000000;
  9. @define-color tooltip_fg_color #ffffff;
  10. /* misc colors used by gtk+
  11. *
  12. * Gtk doesn't currently expand color variables for style properties. Thus,
  13. * gtk-widgets.css uses literal color names, but includes a comment containing
  14. * the name of the variable. Please remember to change values there as well
  15. * when changing one of the variables below.
  16. */
  17. @define-color info_fg_color rgb (181, 171, 156);
  18. @define-color info_bg_color rgb (252, 252, 189);
  19. @define-color warning_fg_color rgb (173, 120, 41);
  20. @define-color warning_bg_color rgb (250, 173, 61);
  21. @define-color question_fg_color rgb (97, 122, 214);
  22. @define-color question_bg_color rgb (138, 173, 212);
  23. @define-color error_fg_color rgb (235, 235, 235);
  24. @define-color error_bg_color rgb (223, 56, 44);
  25. @define-color link_color @selected_bg_color;
  26. @define-color success_color #4e9a06;
  27. @define-color error_color #df382c;
  28. /* theme common colors */
  29. @define-color button_bg_color shade (@bg_color, 1.02); /*shade (#cdcdcd, 1.08);*/
  30. @define-color notebook_button_bg_color shade (@bg_color, 1.02);
  31. @define-color button_insensitive_bg_color mix (@button_bg_color, @bg_color, 0.6);
  32. @define-color dark_bg_color #3c3b37;
  33. @define-color dark_fg_color #dfdbd2;
  34. @define-color backdrop_fg_color mix (@bg_color, @fg_color, 0.8);
  35. @define-color backdrop_text_color mix (@base_color, @text_color, 0.8);
  36. @define-color backdrop_dark_fg_color mix (@dark_bg_color, @dark_fg_color, 0.75);
  37. /*@define-color backdrop_dark_bg_color mix (@dark_bg_color, @dark_fg_color, 0.75);*/
  38. @define-color backdrop_selected_bg_color shade (@bg_color, 0.92);
  39. @define-color backdrop_selected_fg_color @fg_color;
  40. @define-color focus_color alpha (@selected_bg_color, 0.5);
  41. @define-color focus_bg_color alpha (@selected_bg_color, 0.1);
  42. @define-color shadow_color alpha(black, 0.5);
  43. @define-color osd_fg_color #eeeeec;
  44. @define-color osd_bg_color alpha(#202526, 0.7);
  45. @define-color osd_border_color alpha(black, 0.7);
  46. @import url("gtk-widgets-borders.css");
  47. @import url("gtk-widgets-assets.css");
  48. @import url("gtk-widgets.css");
  49. @import url("apps/geary.css");
  50. @import url("apps/unity.css");
  51. @import url("apps/baobab.css");
  52. @import url("apps/gedit.css");
  53. @import url("apps/nautilus.css");
  54. @import url("apps/gnome-panel.css");
  55. @import url("apps/gnome-terminal.css");
  56. @import url("apps/gnome-system-log.css");
  57. @import url("apps/unity-greeter.css");
  58. @import url("apps/glade.css");
  59. @import url("apps/california.css");
  60. @import url("apps/software-center.css");
  61. @import url("public-colors.css");

metacity-1 文件夹含有 Metacity 窗口管理器按钮(比如“关闭窗口”按钮)的图像文件。此目录还有一个名为 metacity-theme-1.xml 的文件,包括了主题的元数据(像开发者的名字)和主题设计。然而,主题的 Metacity 部分使用 XML 文件而不是 CSS 文件。

unity 文件夹含有 Unity 按钮使用的 SVG 文件。除了 SVG 文件,这里没有其他的文件。

一些主题可能也会包含其他的目录。比如, Clearlooks-Phenix 主题有名为 openbox-3 和 xfwm4 的文件夹。openbox-3 文件夹仅有一个 themerc 文件,声明了主题配置和外观(下面有文件示例)。xfwm4 目录含有几个 xpm 文件、几个 png 图像文件(在 png 文件夹里)、一个 README 文件,还有个包含了主题配置的 themerc 文件(就像下面看到的那样)。

/usr/share/themes/Clearlooks-Phenix/xfwm4/themerc


  1. # Clearlooks XFWM4 by Casey Kirsle
  2. show_app_icon=true
  3. active_text_color=#FFFFFF
  4. inactive_text_color=#939393
  5. title_shadow_active=frame
  6. title_shadow_inactive=false
  7. button_layout=O|HMC
  8. button_offset=2
  9. button_spacing=2
  10. full_width_title=true
  11. maximized_offset=0
  12. title_vertical_offset_active=1
  13. title_vertical_offset_inactive=1

/usr/share/themes/Clearlooks-Phenix/openbox-3/themerc


  1. !# Clearlooks-Evolving
  2. !# Clearlooks as it evolves in gnome-git...
  3. !# Last updated 09/03/10
  4. # Fonts
  5. # these are really halos, but who cares?
  6. *.font: shadow=n
  7. window.active.label.text.font:shadow=y:shadowtint=30:shadowoffset=1
  8. window.inactive.label.text.font:shadow=y:shadowtint=00:shadowoffset=0
  9. menu.items.font:shadow=y:shadowtint=0:shadowoffset=1
  10. !# general stuff
  11. border.width: 1
  12. padding.width: 3
  13. padding.height: 2
  14. window.handle.width: 3
  15. window.client.padding.width: 0
  16. menu.overlap: 2
  17. *.justify: center
  18. !# lets set our damn shadows here, eh?
  19. *.bg.highlight: 50
  20. *.bg.shadow: 05
  21. window.active.title.bg.highlight: 35
  22. window.active.title.bg.shadow: 05
  23. window.inactive.title.bg.highlight: 30
  24. window.inactive.title.bg.shadow: 05
  25. window.*.grip.bg.highlight: 50
  26. window.*.grip.bg.shadow: 30
  27. window.*.handle.bg.highlight: 50
  28. window.*.handle.bg.shadow: 30
  29. !# Menu settings
  30. menu.border.color: #aaaaaa
  31. menu.border.width: 1
  32. menu.title.bg: solid flat
  33. menu.title.bg.color: #E6E7E6
  34. menu.title.text.color: #111111
  35. menu.items.bg: Flat Solid
  36. menu.items.bg.color: #ffffff
  37. menu.items.text.color: #111111
  38. menu.items.disabled.text.color: #aaaaaa
  39. menu.items.active.bg: Flat Gradient splitvertical border
  40. menu.items.active.bg.color: #97b8e2
  41. menu.items.active.bg.color.splitTo: #a8c5e9
  42. menu.items.active.bg.colorTo: #91b3de
  43. menu.items.active.bg.colorTo.splitTo: #80a7d6
  44. menu.items.active.bg.border.color: #4b6e99
  45. menu.items.active.text.color: #ffffff
  46. menu.separator.width: 1
  47. menu.separator.padding.width: 0
  48. menu.separator.padding.height: 3
  49. menu.separator.color: #aaaaaa
  50. !# set handles here and only the once?
  51. window.*.handle.bg: Raised solid
  52. window.*.handle.bg.color: #eaebec
  53. window.*.grip.bg: Raised solid
  54. window.*.grip.bg.color: #eaebec
  55. !# Active
  56. window.*.border.color: #585a5d
  57. window.active.title.separator.color: #4e76a8
  58. *.title.bg: Raised Gradient splitvertical
  59. *.title.bg.color: #8CB0DC
  60. *.title.bg.color.splitTo: #99BAE3
  61. *.title.bg.colorTo: #86ABD9
  62. *.title.bg.colorTo.splitTo: #7AA1D1
  63. window.active.label.bg: Parentrelative
  64. window.active.label.text.color: #ffffff
  65. window.active.button.*.bg: Flat Gradient splitvertical Border
  66. window.active.button.*.bg.color: #92B4DF
  67. window.active.button.*.bg.color.splitTo: #B0CAEB
  68. window.active.button.*.bg.colorTo: #86ABD9
  69. window.active.button.*.bg.colorTo.splitTo: #769FD0
  70. window.active.button.*.bg.border.color: #49678B
  71. window.active.button.*.image.color: #F4F5F6
  72. window.active.button.hover.bg.color: #b5d3ef
  73. window.active.button.hover.bg.color.splitTo: #b5d3ef
  74. window.active.button.hover.bg.colorTo: #9cbae7
  75. window.active.button.hover.bg.colorTo.splitTo: #8caede
  76. window.active.button.hover.bg.border.color: #4A658C
  77. window.active.button.hover.image.color: #ffffff
  78. window.active.button.pressed.bg: Flat solid Border
  79. window.active.button.pressed.bg.color: #7aa1d2
  80. window.active.button.hover.bg.border.color: #4A658C
  81. !# inactive
  82. !#window.inactive.border.color: #7e8285
  83. window.inactive.title.separator.color: #96999d
  84. window.inactive.title.bg: Raised Gradient splitvertical
  85. window.inactive.title.bg.color: #E3E2E0
  86. window.inactive.title.bg.color.splitTo: #EBEAE9
  87. window.inactive.title.bg.colorTo: #DEDCDA
  88. window.inactive.title.bg.colorTo.splitTo: #D5D3D1
  89. window.inactive.label.bg: Parentrelative
  90. window.inactive.label.text.color: #70747d
  91. window.inactive.button.*.bg: Flat Gradient splitVertical Border
  92. window.inactive.button.*.bg.color: #ffffff
  93. window.inactive.button.*.bg.color.splitto: #ffffff
  94. window.inactive.button.*.bg.colorTo: #F9F8F8
  95. window.inactive.button.*.bg.colorTo.splitto: #E9E7E6
  96. window.inactive.button.*.bg.border.color: #928F8B
  97. window.inactive.button.*.image.color: #6D6C6C
  98. !# osd (pop ups and what not, dock?)
  99. osd.border.width: 1
  100. osd.border.color: #aaaaaa
  101. osd.bg: flat border gradient splitvertical
  102. osd.bg.color: #F0EFEE
  103. osd.bg.color.splitto: #f5f5f4
  104. osd.bg.colorTo: #EAEBEC
  105. osd.bg.colorTo.splitto: #E7E5E4
  106. osd.bg.border.color: #ffffff
  107. osd.active.label.bg: parentrelative
  108. osd.active.label.bg.color: #efefef
  109. osd.active.label.bg.border.color: #9c9e9c
  110. osd.active.label.text.color: #444
  111. osd.inactive.label.bg: parentrelative
  112. osd.inactive.label.text.color: #70747d
  113. !# yeah whatever, this is fine anyhoo?
  114. osd.hilight.bg: flat vertical gradient
  115. osd.hilight.bg.color: #9ebde5
  116. osd.hilight.bg.colorTo: #749dcf
  117. osd.unhilight.bg: flat vertical gradient
  118. osd.unhilight.bg.color: #BABDB6
  119. osd.unhilight.bg.colorTo: #efefef

测试主题

在创作主题时,测试主题并且微调代码对得到想要的样子是很有帮助的。有相当的开发者想要用到“主题预览器”这样的工具。幸运的是,已经有了。

  • GTK+ Change Theme - 这个程序可以更改 GTK 主题,开发者可以用它预览主题。这个程序由一个含有很多构件的窗口组成,因此可以为主题提供一个完整的预览。要安装它,只需输入命令 apt-get install gtk-chtheme
  • GTK Theme Switch - 用户可以使用它轻松地更换用户主题。测试主题时确保打开了一些应用,方便预览效果。要安装它,只需输入命令 apt-get install gtk-theme-switch,然后在终端敲出 gtk-theme-switch2 即可运行。
  • LXappearance - 它可以更换主题,图标以及字体。
  • PyWF - 这是基于 Python 开发的一个 The Widget Factory 的替代品。可以在 http://gtk-apps.org/content/show.php/PyTWF?content=102024 获取 PyWF。
  • The Widget Factory - 这是一个古老的 GTK 预览器。要安装它,只需输入命令 apt-get install thewidgetfactory,然后在终端敲出 twf 即可运行。

原文发布时间为:2017-02-22

本文来自合作伙伴“Linux中国”

时间: 2024-10-24 19:15:49

如何获取、安装和制作 GTK 主题的相关文章

Ubuntu GTK主题的安装图解教程

相信很多人都想要一个漂亮美观的桌面,而在linux要做到这些,就要使用到一些主题,及特效等等,今天跟大家分享如何安装GTK主题. 今天我们会以小编正在使用的主题为例来进行讲解.首先我们需要下载主题,主题的下载可以通过本站下载,也可以从Gnome Look上下载.(今天我们用的是Uncomplicated这个主题,为方便使用已上传到百度网盘) [button-purple text="Download Uncomplicated theme" title="Download&q

Ubuntu怎么安装mac os x主题

  第一步.下载壁纸 第一步要做的事仅仅是下载Mac OS X 的壁纸,这个压缩包的大小有39.2MB, 解压之后右键点击桌面->修改背景图片->选择下载的背景. 第二步.安装主题修改工具 为了修改GTK主题,图标,系统主题,光标,字体我们需要安装unity tweak.要安装unity tweak在ubuntu14.04上通过使用如下命令: sudo apt-get install unity-tweak-tool 当然你也可以通过安装ubuntu-tweak来实现主题更换 sudo add

Photoshop怎么制作漫画主题艺术字

  Photoshop怎么制作漫画主题艺术字           效果 具体的制作步骤如下: 1.新建大小自定文件,使用两种蓝色(#1c80fc 以及 #1252a0)来创建线性渐变.滤镜->像素化->彩色半调 2.使用白色,混合模式叠加,不透明度30%.选择画笔工具,载入一个放射光笔刷,刷出下图所示效果. 3.该加入漫画字体效果了,我是用的字体是:comic book font.下载后将字体装入PS.颜色为黄色#ffd800,大小按情况调整.

hotoshop制作蒸汽机主题风格艺术字

  hotoshop制作蒸汽机主题风格艺术字           最终效果 1.管子制作. 2.夹子和铆钉.

win8系统如何制作个性化主题?

  win8系统如何制作个性化主题? Windows 8主题是一组由图片和声音定制而成的桌面元素集合,可以给人们以视听享受.我们可以通过自定义主题的方式来实现你的要求. 右击桌面空白处,选择快捷菜单中的"个性化"命令. 在弹出的个性化窗口中,任意选择一组主题.选择之后,下面的"桌面背景"相应就变成了该主题所使用的图片组. 点击"桌面背景"文字链接,进入选择桌面背景窗口.点击"浏览"按钮定位自己的数码照片存放的文件夹.选择自己要

visual studio 2010-在代码中如何获取安装目录

问题描述 在代码中如何获取安装目录 在VS2010 打包项目中,在安装类中通过this.Context.Parameters["targetdir"]; 获取安装目录. 在同一个解决方案的其它工程中需要获取安装目录的路径,请问如何实现?谢谢!

Oracle cloud control 12c的启动、关闭及获取安装信息的方法_oracle

Oracle cloud control 12c整个安装比较复杂,光是安装路径的选择,登录密码,端口号等众多个配置不免让人眼花缭乱,目不暇接.本文描述的是安装完毕后如何获取安装时设定的各类端口号,URL以及如何启动.关闭cloud control等等,供大家参考. 有关cloud control的安装配置可以参考:Oracle Enterprise Manager Cloud Control 12c Release 3 Installation 1.当前的环境配置 复制代码 代码如下: [ora

在线制作手机主题

问题描述 怎么样在线制作手机主题,即它的原理是什么.像魔秀网,吾主题网站上就有这个平台.不知它的原理是怎么实现的,高手进来探讨探讨.

Photoshop制作突显主题的放射背景效果教程

给各位Photoshop软件的使用者们来详细的解析分享一下制作突显主题的放射背景效果的教程. 教程分享: 一.暗调光束 STEP 01 打开PS,新建一个宽1000px高800px的文件.将背景填充为暗色.为什么是暗色?因为我们接下来要做的放射状的光束,光束总是在黑暗中才发光的啊.在这里,我将背景填充为一个紫色的径向渐变.   STEP 02 接下,让我们开始制作放射状光束. 再新建一个图层,填充纯黑色.然后进入到[滤镜>杂色>添加杂色].杂色面板的设置为30%,高斯模糊,勾选单色.把这个新的