喜欢 KDE 不喜欢 Gnome —— 这是个个人喜好和应用程度的选择,我们并没有也无法否定 Gnome 在桌面领域的杰出成就 :-) 就我而言安装之后能尽快的完成审美核查并进入实用阶段就很好。

KDE 的默认主题窗体设计平滑配色冷峻,整体感觉冷静平实,Oxygen 图标有些扎眼但是看久了也就无视了。

KDE 本身使用 Qt 进行开发,可以为原生的 Qt 程序提供系统的界面资源。但仍有很多优秀软件使用 Gtk 开发,为了使其在 KDE 环境下和系统视觉风格一致需要做一些美化工作(我恨用户美化 :x 个性开放得像 SNS 一样,少了执著多了迷失)。

什么是主题?

一般来说:主题=风格+图标组+配色+字体
英文的说:Theme/Appearance = Style + Colors Scheme + Icons set + Fonts

风格(窗体边框+控件风格)——指的是窗体和控件的外观表现,包括贴图、边角设计等;
图标组——指的是整个系统所使用的所有的图标的集合,他们基于一个既定的映射关系,只要遵循这种关系的图标组都可以用来替换当前所用的;
配色——指的是 UI 设计过程中所用的纯色参数的集合,例如某处文本的颜色、某处阴影的颜色、某个控件在不同激活状态下的色彩表现,同样基于既定的映射关系可被替换;
字体——“字体”在中文中是一个很容易混淆的概念,这里指的是系统各处文本所用字体族(font-family: serif, sans-serif, mono ...)、电脑字体名称(中易宋体/Simsun, 华文细黑/STXihei ...)、风格(常规、斜体、加粗 ...)、字号(10pt, 13px ...)的集合;

以上几种资源都遵循着既定的映射关系,例如只要是按钮资源我们都必须命名为 buttons.png,只要依照这种关系来制作或组装出来的美化资源都可以用以替换当前所用。

将以上几种视觉资源合理搭配便形成桌面的“主题”。

Gtk 和 KDE/Qt 默认主题风格差异

我们知道 Qt 和 Gtk 都可以进行图形界面应用程序的开发,而二者预设的“主题”却是不同的。当我们在一个环境中使用另一种环境开发出的程序时就可能出现观感的冲突,例如下图:

gtk-in-kde-02-contrast-of-gtk-and-kde

常见 Linux 桌面主题的对比

这是用 gtk-switch2 调用常见桌面风格的预览对比,由后至前依次是 Raleigh、Clearlooks、KDE 4 Oxygen。其中 Raleigh 较为接近原生无贴图的 Gtk 风格,KDE 4 Oxygen 较为接近 KDE 4.3.3 所用的 Oxygen 风格。也就是说,如果不做美化,在 KDE 中安装 gvim、pidgin、Firefox、Eclipse、GIMP 等 Gtk 程序所得到的外观是近似 Raleigh 的,美丑无法定论,至少是不统一。

统一 Qt 和 Gtk 程序外观

看到了二者的差别,我们要做的就是为 Gtk 程序指定一套完整的模仿所在环境风格的主题资源,又或者将二者同时更换为第三方的风格。

为 Qt/Gtk 同时指定第三方主题风格: QtCurve

# pacman -S qtcurve-gtk2 qtcurve-kde3 qtcurve-kde4

通过安装 QtCurve 一系列包可以获得适用于 Gtk2、Qt3、Qt4 各种环境的统一的风格和配色。之后我们在相应的配置中分别指向 QtCurve 即可。

gtk-in-kde-03-QtCurve

QtCurve 和 KDE 4.3.3 视觉风格对比

我们看到 QtCurve(右) 类似于 KDE 4.3.3 Oxygen(左),但有一些差异。

为 Qt 程序指定 QtCurve:System Settings - Appearance - Style - Widget style - QtCurve;System Settings - Appearance - Colors - Scheme - QtCurve;System Settings - Appearance - Windows - Window Decoration - QtCurve;

为 Gtk 程序指定 QtCurve:安装 gtk-chtheme、gtk-theme-switch4(执行 switch4) 等 Gtk 主题指定工具或者直接修改 ~/.gtkrc-2.0 或 ~/.gtkrc-2.0-kde4 文件即可.我的示例,

# -- THEME AUTO-WRITTEN DO NOT EDIT
# 修改 qtcurve 为你预先安装的 Gtk 主题,路径如下
include "/usr/share/themes/qtcurve/gtk-2.0/gtkrc"
# 这是为 Gtk 程序指定界面字体设置,稍后讨论
style "user-font" {
	font_name = "Segoe UI Symbol 10"
}
 
widget_class "*" style "user-font"
 
gtk-font-name="Segoe UI Symbol 10"
 
include "/home/bodhi/.gtkrc.mine"
 
# -- THEME AUTO-WRITTEN DO NOT EDIT

如果你喜欢让整个系统保持 KDE 4.3.3 Oxygen 的模样,可以单独为 Gtk 程序指定高仿 Oxygen 的风格而不修改 Qt 默认设置。

为 Gtk 程序指定高仿 Oxygen 的风格

和上面的方法类似,我们需要为 Gtk 预先安装(就是拷贝粘贴 :neutral: )相应主题包,这里提供一款模仿 KDE 4.3.3 较好的选择——kde43-oxygen-molecule(作者:S. Christian Collins)。

解压之后我们得到的目录 kde43-oxygen-molecule (下级包含 gtk-2.0)拷贝至 Gtk 主题目录:

# cp -R kde43-oxygen-molecule /usr/share/themes/

之后使用 gtk-chtheme 或 switch2 工具来选择主题 kde43-oxygen-molecule 即可。至于配色以及该主题对主题引擎的依赖请参考下载包中的文档。

当然还有一些仿制的主题例如使用 GTK-QT-Engine 主题引擎的 Qt4 主题,但应用之后 Firefox 的标签栏显示很有问题,可能是 Firefox 标签高度大于系统控件中的标签高度造成的,我试图修改 Firefox userChrome.css 未果。

至此,KDE 的 Qt 程序和 Gtk 程序外观基本一致了。

统一 Qt/Gtk 程序界面字体样式

对于用户来讲 Linux 桌面环境下字体设置很灵活,高深的我也不懂……

基本的是可以通过类似 CSS 字体筛选的方法在多语言混排的情况下为每一种语言的文字指定字体族(衬线与否、等宽与否)以及相应的字体,还有 Ubuntu 下的 language-selector 好像原理不太一样(不懂 :oops: )。

配置 Qt 西文字体:System Settings - Appearance - Fonts,这里指定了 Qt 界面各种组件的西文默认字体,我选择的是 Segoe UI Symbol 10 号非衬线字体和 Courier 10 Pitch 等宽字体,配置文件在 ~/.kderc 中。如果你修改了抗锯齿和微调配置,那么会在你的家目录下生成一个当前用户的字体配置文件 ~/.fonts.conf 。
配置 Gtk 西文字体:使用上面提到的 gtk-chtheme 或 switch4 工具即可配置,配置文件保存在 ~/.gtkrc-2.0 或 ~/.gtkrc-2.0-kde4 中。
配置中文字体:由于全局和个体用户的影响范围不同,如果你的桌面环境只有一个非 root 用户,那么最好在自己的字体配置文件(前文提到的 ~/.fonts.conf)中进行修改,大致示例如下,

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
#允许点阵字体
 <match target="font" >
  <edit name="embeddedbitmap" >
   <bool>true</bool>
  </edit>
 </match>
# 微调设置
 <match target="font" >
  <edit mode="assign" name="rgba" >
   <const>rgb</const>
  </edit>
 </match>
 <match target="font" >
  <edit mode="assign" name="hinting" >
   <bool>true</bool>
  </edit>
 </match>
 <match target="font" >
  <edit mode="assign" name="hintstyle" >
   <const>hintslight</const>
  </edit>
 </match>
 # 为衬线、非衬线、等宽字体族指定默认的中文字体,STXihei 是华文西黑,不推荐使用
 <alias>
  <family>serif</family>
  <prefer>
   <family>STXihei</family>
  </prefer>
 </alias>
 <alias>
  <family>sans-serif</family>
  <prefer>
   <family>STXihei</family>
  </prefer>
 </alias>
 <alias>
  <family>monospace</family>
  <prefer>
   <family>Monaco</family>
   <family>STXihei</family>
  </prefer>
 </alias>
# 抗锯齿
 <match target="font" >
  <edit mode="assign" name="antialias" >
   <bool>true</bool>
  </edit>
 </match>
</fontconfig>

重启某个程序例如 Dolphin 或者整个 KDE 这些字体设置就会为之生效。

改良 Gtk 字体渲染

完成以上设置之后在相应字形上显示没问题了,但是 Gtk 程序的字体渲染和 Qt 的还是有一些差别,Gtk 的 hinting 效果不如 Qt 重,如下图:

Konqueror/Qt 和 Firefox/Gtk 主菜单字体渲染对比

Konqueror/Qt 和 Firefox/Gtk 主菜单字体渲染对比

我使用了 libxft-cleartype 来替换 libxft 达到了目的:

$ yaourt libxft-cleartype

而常说的 GDK_USE_XFT="1"好像是针对 Gtk2 之前的设置吧?我没有使用这个选项。那么现在的 Qt Gtk 字体效果基本一致了,如图:

gtk-in-kde-05

应用 Cleartype 补丁之后的 Qt/Gtk 字体效果

由上至下:Qt/Qt/Gtk/Gtk

另外,我所用的 STXihei 和 Segoe UI Symbol 是不是支持 Cleartype 功能,又或者能否通过其他方法来实现统一我就不得而知了。

不同用户的配置

我们都知道每个用户都有个家目录,一般的应用程序配置都记录在这里,每当这个用户登录的时候就会调用相应的 bash 或者 gui 配置来组建操作环境。那么频繁执行 sudo 来获取 root 权限的人灰发现以上种种配置都会失效,也就是因为 root 他也是个用户需要相应的配置文件。

那么我们需要把上面的操作用 sudo/kdesu/gksu 来重做一遍或者把相应的配置文件拷贝到 root 用户的家目录(/root),又或者在全局层面进行修改,当然以后重做系统的话记得备份。

总结陈词

美化个屁啊!能用就得了,赶紧干正事儿去!