阅读提示:

本文已过时。

1 概述

自从听说过 Linux 以来,滇狐一直都是使用 KDE 的(当时还没有 GNOME)。然而,自从有了 GNOME 之后,GNOME 那边总是有不少很优秀的程序,滇狐无法完全避免使用——滇狐并不是那种为了系统的“纯洁性”就完全排斥非本系的程序那种人。但 GNOME 程序的外观和 KDE 程序有很大差别,为了让它们的外观尽量统一,滇狐写了这篇文章。遗憾的是,滇狐并没有给出 GNOME 和 KDE 外观的完美统一终极解决方案,这里给出的,仅仅是在 GNOME/GTK 程序中使用 KeramiK 的方案,因为滇狐只用 KeramiK 主题。

2 Geramik 与 gtk-qt 引擎的问题

目前在 GNOME/GTK 程序中使用 KeramiK 主题有两种方案,第一种是使用 Geramik 主题,第二种是使用 gtk-qt 引擎。然而,这两种方案都存在一些问题。

2.1 Geramik 的问题

Geramik 主题是使用 png 图片绘制常用控件,仿制一个类似 KeramiK 的外观。由于所有控件都是用图片实现的,所以兼容性非常好。但 Geramik 的缺点有:

  1. 有些特殊的控件使用 GNOME 默认基于图片的引擎无法正常显示。 例如菜单条, 默认的 KDE 菜单被选中的时候应该凹下, 如左图所示; 但 GNOME 默认基于图片的引擎无法实现这个效果, 因此在 Geramik 中只好委屈使用凸起的效果, 如右图所示。
    correct_kdeflaw_geramik
  2. Geramik 主题仅仅提供了控件主题, 而没有提供相应的图标主题, 而 GNOME 下很难找到与 KDE 的 Crystal 图标主题相搭配的图标主题。 Sphere Crystal 效果与 Crystal 比较接近, 但也不是非常令人满意。

Debian 下安装 Geramik 引擎的命令行如下:

sudo apt-get install gtk-engines-geramik
sudo apt-get install gtk2-engines-geramik

2.2 gtk-qt 引擎的问题

gtk-qt 引擎有一个直接通过代码实现的控件界面引擎,使 GTK/GNOME 程序能够具有 KDE 程序相似的界面;还有一个修改 GTK 配置文件,使 GNOME 程序能够使用 KDE 图标的系统。根据引擎原理可以知道,gtk-qt 引擎并不局限与 KeramiK 主题,理论上说,任何 KDE 主题都可以通过它,应用到 GTK/GNOME 程序中。

理论上,理论和实际没有差异;实际上,理论和实际差异很大。虽然其它主题滇狐没有经过详细测试,但至少就 KeramiK 主题而言,该引擎存在许多问题:

  1. 配色方案存在失常现象。 该引擎定义了许多不同的 GTK 配置文件, 却又无法保证在所有情况下都能正确加载配置文件, 因此在某些情况下会出现配色失常的情况。 例如, 下图中出现了菜单背景为浅灰色, 菜单文字为白色, 从而导致几乎无法阅读菜单文字的情况。
    flaw_gtk_qt
  2. 许多按钮尺寸偏小。 由于 KeramiK 主题本身比较特殊, 按钮体积都比较肥硕。 gtk-qt 引擎对按钮尺寸的计算, 也许对于其它 KDE 主题比较美观, 但对于 KeramiK, 总是显得非常拘谨。
  3. 进度条不可见。 这是最致命的问题, 在许多程序中, 进度条背景色和前景色完全相同, 以至于我们完全无法知道当前工作已经进行到什么程度了。

另外,suzhe 曾经说过 gtk-qt 引擎是万恶之源,bugs 很多,常导致许多程序崩溃。根据引擎的实现原理,出现这样的事情是完全可能的。不过在滇狐近一个月的使用中,并没有出现这样的情况,因此不妨继续使用。

Debian 下 gtk-qt 引擎的安装命令行为:

sudo apt-get install gtk-qt-engine
sudo apt-get install gtk2-engines-gtk-qt

3 综合两者的解决方案

为解决以上两者存在的问题,滇狐采取了以下步骤:

3.1 获取 KDE 颜色配置

在 gtk-qt-engine 发明之前,KDE 就具有了向 GTK/GNOME 程序导出颜色配置的功能。打开 KDE 控制中心,在“外观和主题”→ “颜色”中选择“KeramiK”,选中“将颜色应用到非 KDE 应用程序中”,单击应用,此时控制中心会创建 ~/.kde/share/config/gtkrc 文件。将这个文件备份下来,然后将刚才的复选框取消。单击“应用”后,刚才提到的那个文件将消失。

3.2 获取 gtk-qt-engine 的配置文件

然后,打开 KDE 控制中心,在“外观和主题”→ “GTK styles and fonts”中选择:“Use my KDE style in GTK applications”,这样就会启用 gtk-qt-engine,并生成 ~/.gtk_qt_engine_rc 文件。将这个文件备份好,备用。

3.3 选择 Geramik 作为 GTK 主题

再次打开 KDE 控制中心,在“外观和主题”→ “GTK styles and fonts”中选择:“Use another style”,然后选择“Geramik”。接下来,在命令行中启动 gnome-theme-manager,点“主题细节”,在“控件”选项页中选择“Geramik”,在“图标”选项页中选择“SphereCrystal”。完成后关闭这些对话框。

3.4 合并配置文件

创建配置文件 ~/.gtkrc.mine,然后将我们刚才备份的两个文件复制进去,开头部分是原 ~/.kde/share/config/gtkrc,然后是原 ~/.gtk_qt_engine_rc。合并完成后,找到含有 gtk-qt-dynamic-52 的行,在这行前面加上一个“#”,将这行整行注释掉。

然后,创建这几个文件:~/.gtkrc~/.gtkrc-2.0~/.gtkrc-2.0-kde,内容均如下:

gtk-theme-name="Geramik"
gtk-icon-theme-name="SphereCrystal"
gtk-font-name="Sans Serif 9"
include "/home/YOUR_USER_ID/.gtkrc.mine"

注意这里提到的 $HOME 路径必须替换为你真实的路径,滇狐没有测试这里是否支持 $HOME/.gtkrc.mine 这样的写法。

最后,删除 ~/.gtkrc-1.2-gnome2,杀掉 gnome-settings-daemon,应该就能看到最终效果了,如下图所示:

KeramiK

某些旧版本的 gtk-qt-engine 会在你的 ~/.bashrc 中添加一句恶心的:

export GTK_RC_FILES="..."

这样的字样,现在你完全可以放心地删除这行字。

3.5 改进 Firefox 的外观

为了让 Firefox 与 KeramiK 的风格更加协调,我们可以安装 KDEFF 扩展,它可以让 Firefox 拥有和 CrystalSVG 更加协调的图标风格。

kdeff

4 仍存在的问题

目前存在的问题就是在 Firefox 下,菜单不是 KeramiK 下标准的凹下的样式,仍然是 Geramik 下的凸起模式。至于原先存在的滚动条溢出的故障,在新版本的 gtk-qt 引擎里已经得到完美解决。