日期:2014-05-17  浏览次数:20593 次

提前应用gnome-shell补丁修正css装载问题
补丁不是我写的,我只是把将在下一个版本中应用的补丁提前打入我正在使用的版本中而已。

题外话:GnomeShell是GNOME3的新的默认用户界面,和Windows、Mac、GNOME2、KDE的使用方法大相径庭。它使用Clutter作为后端,利用硬件加速实现桌面特效,但是仅仅是最基本的特效,不会消耗太多系统资源。一开始用会不习惯。习惯后,会发现很多设计是很人性化的。当然,Gnome3也刚刚发布,还需要很多改善。

好吧,现在进入正文。

安装了一些gnome-shell的插件(extension),包括dock, user-theme什么的。

其中,dock是在屏幕右侧边沿增加一个图标栏,包含正在运行的程序,类似苹果系统的下方的图标栏。

但是那个dock栏看上去很奇怪,白白的,一点颜色都没有,也没有背景没有边框。起码,背景做成黑色比较协调,而且程序启动了应该加个框框什么的,告诉用户程序在启动。这个插件真的这么烂吗?

打开它的css(stylesheet.css,每个extension都有的)看看。背景、框框都有,而且鼠标悬停效果也有,但是屏幕上就是没有显示出来。

难道是这个css没有被装载?我试着把它的语法改成非法的,按alt+f2,输入r,回车。出错了,说明css确实被装载了。

我以为这是dock的一个bug。

之后,安装了ibus-gnome3插件(它是输入法与gnome-shell的集成插件,使得输入法也能成为gnome-shell的扩展菜单)。按道理说,输入中文的时候,应该在光标附近出现一个框框,里面显示候选汉字。但是,这里的框框也是无色透明的,只有黑色的文字显示在界面上,很难看清。我的第一反应是,这和“dock”的症状是一样的。“黑色”的字,没有背景,很明显,是css样式表没有装载。

所以,推测,是gnome-shell本身的问题。

-------------------

google “gnomeshell extension css”,得知,很古老的一个bug,导致在安装了user-theme插件的同时,会使所有的插件自定义的css无法使用。

参考:http://www.webupd8.org/2011/06/fix-gnome-shell-to-work-with-user-theme.html

这个bug其实现在已经修复了,见bug贴:https://bugzilla.gnome.org/show_bug.cgi?id=650971

已经有了补丁,而且这个已经被提交了。只是,补丁是在GnomeShell的tag:3.0.2之后才被提交的。所以,我正在使用的Fedora15中的GnomeShell 3.0.2自然不包含这个补丁。

解决的办法:
0.先学学如何打rpm包,如何在Fedora上安装打包环境。幸好我已经学过了。

1.下载gnome-shell-3.0.2-4.fc15.src.rpm并安装。

$ yumdownloader --source gnome-shell
$ rpm -ihv gnome-shell  # 不要以root名义做


2.添加补丁。把这个补丁http://bugzilla-attachments.gnome.org/attachment.cgi?id=189086保存到~/rpmbuild/SOURCES里,起名叫gnome-shell-fix-css-loading.patch

3.修改~/rpmbuildgnome-shell.spec,让它在解包后,先把上述补丁打上,再编译。具体的说,是这两行:

  Patch0: gnome-shell-avoid-redhat-menus.patch
+ Patch1: gnome-shell-fix-css-loading.patch

  %prep
  %setup -q
  %patch0 -p1 -b .avoid-redhat-menus
+ %patch1 -p1 -b .patch-css-loading


4.重新打包

$ sudo yum-builddep gnome-shell
$ cd ~/rpmbuild/SPECS
$ rpmbuild -ba gnome-shell.spec


然后,安装这个新的gnome-shell包,bug应该修复了。如果gnome-shell崩溃了,用yum-downgrade恢复到原来的版本。