Skip to Content

(备忘)一步一步编译有HAL支持的Xfce4.6

20091128备注:将HAL编译后生成的~/usr/lib/udev/rules.d/90-hal.rules文件移动到/etc/udev/rules.d以避免HAL无法立即反应出硬件的变化——如果没有重新编译Udevd并指定prefix=/usr,且以/usr/sbin/udevd --daemon运行udevd守护进程的话。之后需要重新启动Udev守护进程。可以
killall udevd
再运行
/sbin/udevd --daemon

一、添加Hal的支持
到Debian的软件包下载点下载各种源码。看一下Hal的依赖,知道要下载dbus、dbus-glib和Udev的源码包,我都是在Lenny界面上下载的,必竟是底层的东西,能稳定干活就行。在编译的过程中,Udev实际上只用到了几个文件,而真正要用的是util-linux-ng源码包,这也说明了为什么原来制作的带HAL支持的Xfce为什么其中的Mount和Unmount文件不能精简掉。Udev可不下载,只下载libvolume-id-dev、libvolume-id0和hwdata就可以了。
注意在下载源码的界面上,还有一个*.diff.gz的文件也要下,那是Debian开发者对源码打的补丁。
1、首先要编译的是Dbus,源码下载地址为

http://packages.debian.org/source/lenny/dbus

下载dbus_1.2.1.orig.tar.gz、dbus_1.2.1-5+lenny1.diff.gz两个包。解压dbus_1.2.1.orig.tar.gz,用Pupzip打开dbus_1.2.1-5+lenny1.diff.gz,会得到dbus_1.2.1-5+lenny1.diff文件,也就是补丁包,运行
patch -p0 < dbus_1.2.1-5+lenny1.diff
对源文件打补丁,关于Patch命令,网上有详细的教程,主要是看看p0或p1都代表什么意思就行了,一般不会出什么问题。
如果是在圣诞版中编译,原来已经有了messagebus用户组,可以
./configure --prefix=/usr
确定编译配置文件;如是在原版中,就运行
./configure --prefix=/usr --with-dbus-user=root
以root运行dbus的守护进程。
然后是make,new2dir make install,选择自己的CPU类型,像我P3的机器就选i686,并选择exe,dev,doc将可执行文件和开发文件,方档说明分别存放。
此时系统中已经有dbus支持了,可以运行dbus-daemon --system来运行dbus的守护进程。
2、编译dbug-glib,源码下载地址为
http://packages.debian.org/source/lenny/dbus-glib
与编译dbus的选项都一样,打完补丁后配置运行
./configure --prefix=/usr
make
new2dir make install
3、编译util-linux-ng,,源码下载地址为
http://packages.debian.org/source/lenny/util-linux
打完补丁后配置运行
./configure --prefix=/usr
make
new2dir make install
4、下载udev的几个文件,分别是libvolume-id-dev(依赖于libvolume-id0),libvolume-id0hwdata,下载连接见上。用undeb将他们分别解压后cp到根目录。不用petget安装的原因是不喜欢在软件包管理中看到下边有一大堆已经安装的软件。
5、下载HAL,源码下载地址为
http://packages.debian.org/lenny/hal
打完补丁后配置运行
./configure --prefix=/usr --disable-policy-kit --with-hal-user=root --with-hal-group=root
make
new2dir make install
此时系统已经有hal的支持了,可以输入/usr/sbin/hald --daemon=yes来运行HAL的守护进程。
关于系统的rc.hald和rc.messagebus文件,是我从slackware的源码包中找来的,下载地址分别为
ftp://slackware.osuosl.org/pub/slackware/slackware-12.2/source/l/hal/rc.haldftp://slackware.osuosl.org/pub/slackware/slackware-12.2/source/l/dbus/rc.messagebus.gz。其中rc.hald下载要目标另存为,否则在浏览器中直接打开了。
把它们放到/etc/rc.d里后就可以以/etc/rc.d/rc.hald start来运行hal的守护进程了。
如要让hal开机自动运行,需要修改/etc/rc.d/rc.sysint文件,在其中查找
/sbin/udevd --daemon
在它的前面加上
/etc/rc.d/rc.hald start
sleep 0.5
还有一个地方要注意,由于Puppy是单Root用户,安装HAL后你会发现重起和关机要执行两次才行,
这需要修改/usr/lib/hal/scripts中的hal-system-power-reboot和hal-system-power-shutdown
以hal-system-power-shutdown为例,
#!/bin/sh
. hal-functions
if [ "$CK_NUM_SESSIONS" -gt "1" ] ; then
hal_check_priv org.freedesktop.hal.power-management.shutdown-multiple-sessions
else
hal_check_priv org.freedesktop.hal.power-management.shutdown
fi
hal_exec_backend
是用于判断是否是多用户的,将其修改为
#!/bin/sh
. hal-functions
hal_check_priv org.freedesktop.hal.power-management.shutdown
hal_exec_backend
后就可以了,hal-system-power-reboot修改为:
#!/bin/sh
. hal-functions
hal_check_priv org.freedesktop.hal.power-management.reboot
hal_exec_backend
就不需要再执行两次了。
二、编译xfce4.6.1
从Xfce4的主页上或debian的源码页上下载都一样的,下载链接就不一一给出了,我下载的基本上是用的Debian中Squezee的源码包,除了EXO用的是Xfce4主页上的Exo-0.3.101。
编译选项都是
--prefix=/usr
make
make install
就可以。
注意对于puppy来说,有几个地方需要修改:
1、去掉Thunar的root警告:
打开Thunar解压后的文件夹中的thunar目录,打开thunar-window.c,将其中的831行到854行删除,内容是
/* check if we need to add the root warning */
if (G_UNLIKELY (geteuid () == 0))
{
/* install default settings for the root warning text box */
gtk_rc_parse_string ("style\"thunar-window-root-style\"{bg[NORMAL]=\"#b4254b\"\nfg[NORMAL]=\"#fefefe\"}\n"
"widget\"ThunarWindow.*.root-warning\"style\"thunar-window-root-style\"\n"
"widget\"ThunarWindow.*.root-warning.GtkLabel\"style\"thunar-window-root-style\"\n");

/* add the box for the root warning */
ebox = gtk_event_box_new ();
gtk_widget_set_name (ebox, "root-warning");
gtk_table_attach (GTK_TABLE (window->table), ebox, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (ebox);

/* add the label with the root warning */
label = gtk_label_new (_("Warning, you are using the root account, you may harm your system."));
gtk_misc_set_padding (GTK_MISC (label), 6, 3);
gtk_container_add (GTK_CONTAINER (ebox), label);
gtk_widget_show (label);

separator = gtk_hseparator_new ();
gtk_table_attach (GTK_TABLE (window->table), separator, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (separator);
}
如果你打了补丁后,上述代码在源码中的位置可能有所不同,不过一查root就能找到。
2、给Thunar打本地硬盘分区显示补丁
下载地址在http://www.linuxsir.org/bbs/lastpostinthread357390.html
3、给Exo打补丁使支持NTFS分区挂载和中文不出现乱码
下载地址在http://aur.archlinux.org/packages.php?ID=17194
注意这个exo-alt补丁编译的有点问题,其中的patch文件大家打开看一下其中的
--- a/exo/exo-mount/exo-mount-hal.c
+++ b/exo/exo-mount/exo-mount-hal.c
注意a后面的路径,默认解开后路径是exo-0.3.101,所以打补丁时会提示找不到文件,把补丁文件改一下成
--- a/exo-mount/exo-mount-hal.c
+++ b/exo-mount/exo-mount-hal.c
后再放到exo-0.3.101目录中,用-p1就可以了。
4、给xfce4-session打补丁,去掉挂起和休眠
进到xfce4-session解压后文件夹中的xfce4-session,打开其中的shutdown.c,将462到517行内容删除。具体内容不列出了,太长了,也就是一个以/* suspend */开头的段和一个以/* hibernate */开头的段。
5、给Thunar加入解压支持
到Debian中下载thunar-archive-plugin源码,下载地址为
http://packages.debian.org/zh-cn/source/squeeze/thunar-archive-plugin
安装后注意要有相应的压缩软件才行,比如squeeze或xarchiver,不然在压缩文件上点右建也还是解压不了,会提示找不到相应的压缩软件。如果已经有了相应的压缩软件,如NOP431已经自带了xarchiver,那么运行
update-desktop-database
后就可以在压缩文件上右键选择直接解压了。
我汉化的thunar-archive-plugin的mo文件在这里,纳米盘下载
这样整个带有HAL支持的XFCE4系统就可以用于Puppy了。
6、去掉桌面上Puppy自带的驱动器图标
打开/root/xinitrc文件,将其中
rm -f /root/Desktop/drive_* 2>/dev/null
/sbin/pup_event_frontend_d & #v403
两行注释掉,然后将桌面的驱动器图标删除。
重装Puppy后将所有-i686中的文件cp到根目录中就行了,对于/usr/share/locale/中的语言文件,除了中文外也可以全部删除。
#6815
无线电子 的头像
好!
#6822
sasaqqdan 的头像
好,学习了!
#6847
替作者补充一点,下载的rc.hald文件需要添加可执行属性,chmod +x rc.hald,否则无法执行
#6860
sasaqqdan 的头像
withoutpity,我在你做的xfce包里精简出一个3.5M的thunar,支持hal,适用于puppy4.31/4.32,无需重启即可在侧边栏显示分区列表,pet包放在中文体验包相关软件里。
附截图:
#6863
哦,收到!
不过Thunar依赖于libxfce4util/exo/libwnck/xfconf/libxfcegui4/xfce4-panel
要是这么多依赖都满足了的话,不妨把xfce4-panel带出来,用Openbox做窗口管理器,做出一套桌面环境,估计启动速度应该不会太慢,比Lxde慢顶多三四秒吧。当然Xfce4-panel要Menu插件的话还要有libxfce4menu/xfdesktop,不好取舍呢。

发表新评论

  • 你可以在文本中使用BBCode标记语言。 URL会自动被转为链接。

更多关於格式化选项的信息

CAPTCHA
请验证您是否是机器人。
Image CAPTCHA
Enter the characters shown in the image.