Warning: Invalid argument supplied for foreach() in /web/website/www.ownlinux.cn/www/wp-content/plugins/alimama-deluxe/alimama-deluxe.php on line 925 把完美的 notify-osd 找回来| OwnLinux.org
15
1月

把完美的 notify-osd 找回来

写在前面: 本文希望通过一个具体的修改编译安装Ubuntu系统软件包的过程 帮助在编译安装时遇到类似问题的盆友解决问题.

恩, 首先呢, 这个问题仅仅针对启用了 ppa:xorg-edgers/ppa 的 alpha tester 盆友…
这个悲剧已经有两个多月(以上)的历史拉(因为两个多月前Felix才忍不住去report了), 我report的错误参见: https://bugs.launchpad.net/ubuntu/+source/pixman/+bug/623272
不过某位大大(Peter Clifton)给出了解决方案, 这里简单解释一下…

首先获得当前版本的 notify-osd 的源代码:

sudo apt-get source notify-osd

完成后进入目录, 把下面的patch存成文件 然后用patch命令应用上去:

=== modified file 'src/tile.c'
--- src/tile.c	2009-07-31 11:07:29 +0000
+++ src/tile.c	2010-12-06 00:24:55 +0000
@@ -180,7 +180,7 @@

 	// top right
 	cairo_matrix_init_scale (&matrix, -1.0f, 1.0f);
-	cairo_matrix_translate (&matrix, -width, 0.0f);
+	cairo_matrix_translate (&matrix, -1.0f * width, 0.0f);
 	cairo_pattern_set_matrix (pattern, &matrix);
 	cairo_rectangle (cr,
 			 width - pad_width,
@@ -193,7 +193,7 @@

 	// bottom right
 	cairo_matrix_init_scale (&matrix, -1.0f, -1.0f);
-	cairo_matrix_translate (&matrix, -width, -height);
+	cairo_matrix_translate (&matrix, -1.0f * width, -1.0f * height);
 	cairo_pattern_set_matrix (pattern, &matrix);
 	cairo_rectangle (cr,
 			 pad_width,
@@ -206,7 +206,7 @@

 	// bottom left
 	cairo_matrix_init_scale (&matrix, 1.0f, -1.0f);
-	cairo_matrix_translate (&matrix, 0.0f, -height);
+	cairo_matrix_translate (&matrix, 0.0f, -1.0f * height);
 	cairo_pattern_set_matrix (pattern, &matrix);
 	cairo_rectangle (cr,
 			 x,

然后

patch -p1 -i xxx.patch

再然后, 你一定想各种

./configure && make && sudo make install

啦?
先等等, 为了让它和系统包管理和谐相处, 我们需要在 configure 的时候加上prefix:

./configure --prefix=/usr

这样是不是就可以了呢?
答案是: 不行!
执行到make时, 会出现类似这样的错误:

  CCLD   notify-osd
/usr/bin/ld: notify_osd-bubble.o: undefined reference to symbol 'XDeleteProperty'
/usr/bin/ld: note: 'XDeleteProperty' is defined in DSO /usr/lib64/libX11.so.6 so try adding it to the linker command line
/usr/lib64/libX11.so.6: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make[3]: *** [notify-osd] Error 1
make[3]: Leaving directory `/home/felix/Sources/notify-osd-0.9.29/src'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/felix/Sources/notify-osd-0.9.29/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/felix/Sources/notify-osd-0.9.29'
make: *** [all] Error 2

我的解决方法是: configure时带上LIBS环境变量!
先带上提示缺少的libX11吧:

LIBS="-lX11" ./configure --prefix=/usr

让我们试试make?
还是不行!
错误应该和下面的提示类似:

  CCLD   notify-osd
/usr/bin/ld: notify_osd-gaussian-blur.o: undefined reference to symbol 'pixman_image_composite'
/usr/bin/ld: note: 'pixman_image_composite' is defined in DSO /usr/lib64/libpixman-1.so.0 so try adding it to the linker command line
/usr/lib64/libpixman-1.so.0: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make[3]: *** [notify-osd] Error 1
make[3]: Leaving directory `/home/felix/Sources/notify-osd-0.9.29/src'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/felix/Sources/notify-osd-0.9.29/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/felix/Sources/notify-osd-0.9.29'
make: *** [all] Error 2

那么是不是再加上 -lpixman 呢? 还是不对…
注意看库文件的文件名: libpixman-1.so.0
因此需要加上的是: -lpixman-1
这样完整的configure命令应该是:

LIBS="-lX11 -lpixman-1" ./configure --prefix=/usr

之后淡定的

make

就好了.
接下来如果用

sudo make install

不怎马和谐(非包管理嘛)
如果像下面这么用checkinstall:

sudo checkinstall --pkgname=notify-osd --pkgversion "0.9.29-0ubuntu5+felix1" --backup=no --default

安装完成后试试更新系统, 会发现提示安装notification-daemon…
因此我们需要指明notify-osd包”提供了”notification-daemon”
完整的checkinstall命令如下:

sudo checkinstall --pkgname=notify-osd --pkgversion "0.9.29-0ubuntu5+felix1" --backup=no --default --provide=notification-daemon

安装完成后, 试试

notify-send test

纳尼? 边框仍然不完整? 事实上, 我们刚才编译的新版本并没有在运行…
先杀掉系统里仍然运行的老版本notify-osd:

sudo killall notify-osd

然后再来测试, OK 成功!

PS: 作为一只懒猫 我深刻理解懒人的想法, 因此我把编译打包好的版本放在了: http://deb.felixcat.net 有兴趣直接拿的盆友们, 伸爪吧!

原载: OwnLinux.org
原文标题: 把完美的 notify-osd 找回来
原文链接:http://www.ownlinux.org/2011/01/15/find-notify-osd.html
OwnLinux.org 版权所有,转载时必须以链接形式注明作者和原始出处及本声明。否则,请勿转载!!


任何商业网站未经许可请勿转摘!本站将保留追究其法律责任的权利。

2 条评论了已经

发表评论

名字(必须)
邮箱(不会被公布)(必须)
网址

字体为 粗体 是必填项目,邮箱地址 永远不会 公布。

允许部分 HTML 代码:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
URLs(网站链接)必须完整有效 (比如: http://www.ownlinux.org),所有标签都必须完整的关闭。

超出部分系统将会自动分段及换行。

请保证评论内容是与日志或 Blog 内容相关的,灌水、攻击性或不恰当的评论 可能 会被编辑或删除。

    站内搜索

    赞助商

    标签

    最近访问