阅读提示:
本文已过时。
自从听说过 Linux 以来,滇狐一直都是使用 KDE 的(当时还没有 GNOME)。然而,自从有了 GNOME 之后,GNOME 那边总是有不少很优秀的程序,滇狐无法完全避免使用——滇狐并不是那种为了系统的“纯洁性”就完全排斥非本系的程序那种人。但 GNOME 程序的外观和 KDE 程序有很大差别,为了让它们的外观尽量统一,滇狐写了这篇文章。遗憾的是,滇狐并没有给出 GNOME 和 KDE 外观的完美统一终极解决方案,这里给出的,仅仅是在 GNOME/GTK 程序中使用 KeramiK 的方案,因为滇狐只用 KeramiK 主题。
目前在 GNOME/GTK 程序中使用 KeramiK 主题有两种方案,第一种是使用 Geramik 主题,第二种是使用 gtk-qt 引擎。然而,这两种方案都存在一些问题。
Geramik 主题是使用 png 图片绘制常用控件,仿制一个类似 KeramiK 的外观。由于所有控件都是用图片实现的,所以兼容性非常好。但 Geramik 的缺点有:
Debian 下安装 Geramik 引擎的命令行如下:
gtk-qt 引擎有一个直接通过代码实现的控件界面引擎,使 GTK/GNOME 程序能够具有 KDE 程序相似的界面;还有一个修改 GTK 配置文件,使 GNOME 程序能够使用 KDE 图标的系统。根据引擎原理可以知道,gtk-qt 引擎并不局限与 KeramiK 主题,理论上说,任何 KDE 主题都可以通过它,应用到 GTK/GNOME 程序中。
理论上,理论和实际没有差异;实际上,理论和实际差异很大。虽然其它主题滇狐没有经过详细测试,但至少就 KeramiK 主题而言,该引擎存在许多问题:
另外,suzhe 曾经说过 gtk-qt 引擎是万恶之源,bugs 很多,常导致许多程序崩溃。根据引擎的实现原理,出现这样的事情是完全可能的。不过在滇狐近一个月的使用中,并没有出现这样的情况,因此不妨继续使用。
Debian 下 gtk-qt 引擎的安装命令行为:
为解决以上两者存在的问题,滇狐采取了以下步骤:
在 gtk-qt-engine 发明之前,KDE 就具有了向 GTK/GNOME
程序导出颜色配置的功能。打开 KDE
控制中心,在“外观和主题”→
“颜色”中选择“KeramiK”,选中“将颜色应用到非 KDE
应用程序中”,单击应用,此时控制中心会创建
~/.kde/share/config/gtkrc
文件。将这个文件备份下来,然后将刚才的复选框取消。单击“应用”后,刚才提到的那个文件将消失。
然后,打开 KDE 控制中心,在“外观和主题”→ “GTK
styles and fonts”中选择:“Use my KDE style in GTK
applications”,这样就会启用 gtk-qt-engine,并生成
~/.gtk_qt_engine_rc
文件。将这个文件备份好,备用。
再次打开 KDE 控制中心,在“外观和主题”→ “GTK
styles and fonts”中选择:“Use another
style”,然后选择“Geramik”。接下来,在命令行中启动
gnome-theme-manager
,点“主题细节”,在“控件”选项页中选择“Geramik”,在“图标”选项页中选择“SphereCrystal”。完成后关闭这些对话框。
创建配置文件
~/.gtkrc.mine
,然后将我们刚才备份的两个文件复制进去,开头部分是原
~/.kde/share/config/gtkrc
,然后是原
~/.gtk_qt_engine_rc
。合并完成后,找到含有
gtk-qt-dynamic-52
的行,在这行前面加上一个“#”,将这行整行注释掉。
然后,创建这几个文件:~/.gtkrc
、~/.gtkrc-2.0
、~/.gtkrc-2.0-kde
,内容均如下:
注意这里提到的 $HOME
路径必须替换为你真实的路径,滇狐没有测试这里是否支持
$HOME/.gtkrc.mine
这样的写法。
最后,删除 ~/.gtkrc-1.2-gnome2
,杀掉
gnome-settings-daemon
,应该就能看到最终效果了,如下图所示:
某些旧版本的 gtk-qt-engine 会在你的 ~/.bashrc
中添加一句恶心的:
export GTK_RC_FILES="..."
这样的字样,现在你完全可以放心地删除这行字。
为了让 Firefox 与 KeramiK 的风格更加协调,我们可以安装 KDEFF 扩展,它可以让 Firefox 拥有和 CrystalSVG 更加协调的图标风格。
目前存在的问题就是在 Firefox 下,菜单不是 KeramiK 下标准的凹下的样式,仍然是 Geramik 下的凸起模式。至于原先存在的滚动条溢出的故障,在新版本的 gtk-qt 引擎里已经得到完美解决。