Chinaunix首页 | 论坛 | 博客
  • 博客访问: 889279
  • 博文数量: 139
  • 博客积分: 10016
  • 博客等级: 上将
  • 技术积分: 932
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-31 02:15
文章存档

2008年(19)

2007年(73)

2006年(46)

2005年(1)

我的朋友

分类: LINUX

2006-11-30 14:23:19

在Fedora Core 5上体验 Aiglx 和 Xgl & Compiz

作者:aaccdd
来自:LinuxSir.org
摘要:
Aiglx是一个旨在为标准桌面启用GL加速功能的项目,目的在于通过小幅度修改X server、使用添加新协议支持的Mesa升级版和带有混合管理器版本的metacity,让用户稍作改动即可在桌面上使用GL效果,随意开启、关闭该功能而无需替代使用中的X server。

Xgl是基于OpenGL上的X服务架构,现在处于开发阶段,很多重要的部分还未完成。Xglx是目前唯一使用这种结构的X服务器,它需要在一个已有的X服务器,只用于测试和开发目的。Xegl是基于Xgl架构的新一代X服务器,它将使用EGL扩展独立地运行在OpenGL上

本文简要介绍了Aiglx和Xgl的特点和功能,以及在Fedora Core 5上从源码编译、安装、配置Aiglx和Xgl的一种方法。希望为对此有兴趣的FC5用户提供一种尝试的途径。

一 写在前面:

⒈什么是Xgl?

Xgl是基于OpenGL上的X服务架构,现在处于开发阶段,很多重要的部分还未完成。Xglx是目前唯一使用这种结构的X服务器,它需要在一个已有的X 服务器,只用于测试和开发目的。Xegl是基于Xgl架构的新一代X服务器,它将使用EGL扩展独立地运行在OpenGL上。

它有哪些新的特性呢?

基于OpenGL的X层,使用混合桌面,开启通往新功能、新机会的大门。以下是一些可能出现的功能,其中一些现在已经实现。我们要破除基于OpenGL的X中看不中用的迷信。

①加倍窗口显示分辨率,应用程序可以用特定的分辨率渲染窗口,而与桌面的分辨率不同。想像一下梯度背景,这样的一个窗口或材质只有几个色素,却以1600x1200或更大的尺寸显示。

②快速、简单的屏幕旋转、翻转、摇动、放大。

③高级字体渲染,包括使用材质和分段程序的及时轮廓字体渲染。

④模拟硬件层面,历史悠久的工作站图形功能可以用材质混合实现

⑤全屏颜色处理,包括伽玛纠正、对比增强、模糊、加亮等等。

⑥同一屏幕上混合像素深度,经重定向,上层窗口可以具有不同的色深(8、16、24、32bpp)。例如:XTerms可以8bpp(只需32bpp图像所用texmem的1/4)创建,用颜色查找表显示(texel 查找分段程序);

⑦每窗口任意色图(texel查找分段程序);

⑧替代窗口色彩空间,“视频”窗口可以存储为YCbCr(比RGB小),使用材质硬件显示时实时转化为RGB;

⑨窗口图像压缩,使用S3TC材质压缩,将内容很少改动的窗口压缩,存储于根窗口的桌面背景就是一个最好的应用。此项技术有可能节省大量内存;

⑩使用OpenGL多实例表面为反锯齿X渲染提供新应用。

⒉什么是Compiz?

Compiz带来多种视觉效果,使得Linux桌面变得更方便、功能更强大、更新颖、更容易满足用户的特殊需求。Compiz使用OpenGL进行渲染,集窗口管理器与混合管理器于一身;窗口管理器处理屏幕上的应用程序和对话框,而混合管理器则使窗口和图形混合,产生混合图像;Compiz同时具有两者的功能,产生惊人的效果。

Compiz目前只能与Xgl“共事”,Compiz的插件及窗口装饰器在Gnome和KDE下都能工作。

⒊什么是aiglx?

Aiglx(Accelerated Indirect GL X)是一个旨在为标准桌面启用GL加速功能的项目,目的在于通过小幅度修改X server、使用添加新协议支持的Mesa升级版和带有混合管理器版本的metacity,让用户稍作改动即可在桌面上使用GL效果,随意开启、关闭该功能而无需替代使用中的X server。
代码是与X 社区相关的上游完成,Fedora Core 5是第一个包括了模块X包和在适合位置添加适合协议的发布版。Aiglx在X基础方面已经进行了大量工作,但对实际的渲染效果并没下太大力气,希望广大社区帮助创造有趣、适当的效果。重要的不是此时就推出成品,而是鼓励社区围绕其进行开发和实验。

二 体验 Aiglx
参考

⒈下载、安装

①建立CVS目录

mkdir /opt/CVS/
cd /opt/CVS/

②下载安装最新的 GL protocol 头文件

cvs -d:pserver:anoncvs@cvs.freedesktop.org:/cvs/xorg login
CVS password:<回车>
cvs -d :pserver:anoncvs@cvs.freedesktop.org:/cvs/xorg co proto/GL
cd /opt/CVS/proto/GL
./autogen.sh
make
make install

③下载安装最新的 Xorg 服务器源码

cvs -d:pserver:anoncvs@cvs.freedesktop:/cvs/xorg co xserver/xorg
cd /opt/CVS/xserver/xorg
./autogen.sh --with-mesa-source=/opt/CVS/Mesa --sysconfdir=/etc
make
make install
ln -s /etc/X11/fs /usr/local/lib/X11/fs

④下载安装 Mesa 源码

cvs -d:pserver:anoncvs@cvs.freedesktop:/cvs/mesa co Mesa
cd /opt/CVS/Mesa
make linux-dri-x86
make install DESTDIR=/usr/local

⑤下载安装 libcom

cvs -d:pserver:anoncvs@anoncvs.gnome.org:/cvs/gnome login
CVS password: <回车>
cvs -d:pserver:anoncvs@anoncvs.gnome.org:/cvs/gnome co libcm
cd /opt/CVS/libcm
./autogen.sh
make
make install

⑥下载安装 metacity

cvs -d:pserver:anoncvs@anoncvs.gnome.org:/cvs/gnome co metacity
cd /opt/CVS/metacity
./autogen.sh --enable-compositor
make
make install

⒉配置

①启用混合管理器

gconftool-2 -s '/apps/metacity/general/compositing_manager' --type bool true

或使用配置管理器设置/apps/metacity/general/compositing_manager键值

②修改/etc/X11/xorg.conf,添加

Section "extensions"
Option "Composite"
EndSection
Section "Device"
...
Option "XAANoOffscreenPixmaps"
EndSection

③禁用混合管理器,运行命令

gconftool-2 -s '/apps/metacity/general/compositing_manager' --type bool false

或使用配置管理器修改/apps/metacity/general/compositing_manager键值

④使用鼠标右键来启用、禁用服务
编辑文件:

gedit ~/.gnome2/nautilus-scripts/aiglx

添加内容:

#!/bin/bash
title="Aiglx Service"
#Date: 3-19-2006
# Wriiten By: fedorajim@gmail.com
zenity --question --text "Do you want to turn On or Off the AIGLX Service? Yes=On / Cancel=Off" --title="$title"
if [ "$(echo $?)" == "1" ] #They clicked "no"
     then # Turn off the AIGLX Service
        gconftool-2 -s '/apps/metacity/general/compositing_manager' --type bool false
else
# turn on the AIGLX Service
        gconftool-2 -s '/apps/metacity/general/compositing_manager' --type bool true
fi

保存文件,使其可执行
chmod u+x ~/.gnome2/nautilus-scripts/aiglx

⒊ 演示和已知问题

①演示
最小化之一
最小化之二
菜单淡化

②支持的显卡和一些问题

三 体验 Xgl & Compiz

本文的重点是在不破坏原有系统的基础上,使普通用户体验 Xgl & Compiz的新效能。
默认情况是安装路径为/opt/Xgl,没有进行(二)部分所做下载

⒈下载安装

①建立CVS源码目录,下载源码包:

mkdir /opt/CVS

下载cvs源码的 libsvg, libsvg-cairo, mesa, xorg/glitz, xkbfile, glxproto, drm, compiz, FixesProto, ScrnSaverProto, CompositeProto, 下载control-center-2.14.0源码; 最新的cairo源码已经不再使用CVS,下载使用git。

使用yum安装git

yum install git

git clone git://git.cairographics.org/git/cairo
cvs -d:pserver:anoncvs@cvs.freedesktop.org:/cvs/mesa login
cvs -d:pserver:anoncvs@cvs.freedesktop.org:/cvs/mesa co Mesa
cvs -d:pserver:anoncvs@cvs.freedesktop.org:/cvs/cairo co glitz cairo libsvg libsvg-cairo
cvs -d:pserver:anoncvs@cvs.freedesktop.org:/cvs/xorg co -r xgl-0-0-1 xserver/xorg
cvs -d:pserver:anoncvs@cvs.freedesktop.org:/cvs/xorg co lib/xkbfile proto/GL
cvs -d:pserver:anoncvs@cvs.freedesktop.org:/cvs/dri co drm
cvs -d:pserver:anoncvs@cvs.freedesktop.org:/cvs/xorg co app/compiz
cvs -d:pserver:anoncvs@cvs.freedesktop.org:/cvs/xorg co proto/Composite proto/Fixes proto/ScrnSaver
wget

②编译安装

编译安装glitz

cd /opt/CVS/glitz
./autogen.sh --prefix=/opt/Xgl
make
make install

添加PKG_CONFIG_PATH, LD_LIBRARY_PATH到: ~/.bashrc

cat >> ~/.bashrc << EOF
PKG_CONFIG_PATH=/opt/Xgl/lib/pkgconfig
LD_LIBRARY_PATH=/opt/Xgl/lib
export PKG_CONFIG_PATH LD_LIBRARY_PATH
EOF

source ~/.bashrc

编译安装 control-center

cd /opt/CVS/
tar xjvf control-center-2.14.0.tar.bz2
cd control-center-2.14.0/
./configure --prefix=/opt/Xgl --sysconfdir=/etc
make
make install

编译安装 libsvg

cd /opt/CVS/libsvg
./autogen.sh --prefix=/opt/Xgl
make
make instal

编译安装 cairo

cd /opt/CVS/cairo
./autogen.sh --prefix=/opt/Xgl
make
make install

编译安装 libsvg-cairo(注意安装顺序,libsvg-cairo依赖cairo,要后装)

cd /opt/CVS/libsvg-cairo
./autogen.sh --prefix=/opt/Xgl/
make
make install

编译安装 GL proto(proto/GL)

cd /opt/CVS/proto/GL
./autogen.sh --prefix=/opt/Xgl
make install

编译安装drm

cd /opt/CVS/drm
./autogen.sh --prefix=/opt/Xgl
make
make install

编译安装Composite,Fixes,ScrnSaver

cd /opt/CVS/proto/Composite
./autogen.sh --prefix=/opt/Xgl
make install
cd /opt/CVS/proto/Fixes
./autogen.sh --prefix=/opt/Xgl
make install
cd /opt/CVS/proto/ScrnSaver
./autogen.sh --prefix=/opt/Xgl
make install

编译安装 xorg

cd /opt/CVS/xserver/xorg
./autogen.sh --prefix=/opt/Xgl --disable-xorg --disable-dmx --disable-xvfb --disable-xnest --disable-xwin --enable-xgl --enable-xglx --with-mesa-source=/opt/CVS/Mesa/ --sysconfdir=/etc --enable-glx-dri --disable-xprint
make
make install

编译安装 compiz

cd /opt/CVS/app/compiz
PKG_CONFIG_PATH=/usr/lib/pkgconfig:/opt/Xgl/lib/pkgconfig/ ./autogen.sh --prefix=/opt/Xgl/ --enable-libsvg-cairo
make
make install

有些人编译遇到gnome、svg选项总是no,原因即在于缺少参数设置

编译安装Mesa

cd /opt/CVS/Mesa
make linux-dri-x86
make install DESTDIR=/opt/Xgl

由于CVS源码变化很快,有时很出现长时间编译不成功的现象,这时就需要一点耐心了,到邮件列表(http: //) 中去查找办法。当然也有替代的方法,就是下载发布版,如mesa cvs编译不成功就可以用Mesa-6.5, 自己选一个比较快的链接。相应地操作要变为:
tar xjvf MesaLib-6.5.tar.bz2
cd MesaLib-6.5
make linux-dri-x86
make install DESTDIR=/opt/Xgl

③配置
添加工作路径

cat > /etc/profile.d/Xgl.sh << "EOF"
PATH="/opt/Xgl/bin:$PATH"
export PATH
EOF

修改/etc/sudoers,使用户可以运行ldconfig命令

visudo /etc/sudoers

添加
username ALL=NOPASSWD:/sbin/ldconfig

取消对~/.bashrc的修改,删除添加的内容:

PKG_CONFIG_PATH=/opt/Xgl/lib/pkgconfig
LD_LIBRARY_PATH=/opt/Xgl/lib
export PKG_CONFIG_PATH LD_LIBRARY_PATH

修改~/.bash_profile,修改工作路径:

PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin

保存如下脚本到/usr/local/bin/Xstarter:

#!/bin/bash
# a clumsy script to switch between default X server and Xgl
# Licensed to copy, modify freely
# written by aaccdd < waxyxgn@hotmail.com>
# scriptname=Xstarter
# before running this script, add following to /etc/sudoers:
# username ALL=NOPASSWD:/sbin/ldconfig
# to allow user run sudo ldconfig
[ -e $HOME/.Xgl-Status-0 -o -e $HOME/.Xgl-Status-1 ] || touch $HOME/.Xgl-Status-0
NotFound() {
        echo "ERROR: $1 is not installed on your machine! to install $1, please type"
        echo "yum $2 \"$3\""
        exit 1
}
currentWM(){
        if [ -e $HOME/.Xclients-default ]
        then
                wmnow=$(sed -n 's/^WM=\"\(.*\)\"$/\1/p' $HOME/.Xclients-default )
        fi
        case "$wmnow" in
                enlightment) WMnow=Enlightment;;
                fluxbox) WMnow=Fluxbox;;
                fvwm2) WMnow=Fvwm;;
                icewm) WMnow=Icewm;;
                twm) WMnow=Twm;;
                wmake) WMnow=WMmake;;
                startxfce4) WMnow=Xfce4;;
                startkde) WMnow=KDE;;
                gnome-session) WMnow=GNOME;;
        esac
}
preXgl(){
        if [ -e $HOME/.Xgl-Status-0 ]
        then
        perl -e 'print "="x80;print "\n"'
        echo -e "\t\tCreating necessary links and cache to share libraries\n"
        echo -e "\t\tPlease stand by ...\n"
        perl -e 'print "="x80;print "\n"'
        sleep 2
        sudo ldconfig /opt/Xgl/lib /opt/Xgl/lib/window-manager-settings \
              /opt/Xgl/lib/xorg/modules/xgl /opt/Xgl/lib/compiz
        [ "$?" -eq 0 ] && mv $HOME/.Xgl-Status-0 $HOME/.Xgl-Status-1
        sed -i 's/vo=xv,x11/vo=x11,xv/' $HOME/.mplayer/config
        fi
}
postXgl(){
        if [ -e $HOME/.Xgl-Status-1 ]
        then
        perl -e 'print "="x80;print "\n"'
        echo -e "\t\tCreating necessary links and cache to share libraries\n"
        echo -e "\t\tPlease stand by ...\n"
        perl -e 'print "="x80;print "\n"'
        sleep 2
        sudo ldconfig
        [ "$?" -eq 0 ] && mv $HOME/.Xgl-Status-1 $HOME/.Xgl-Status-0
        sed -i 's/vo=x11,xv/vo=xv,x11/' $HOME/.mplayer/config
        fi
}
startX(){
        currentWM
        case "$wmnow" in
                gnome-session) startx -- :1 &
                                DISPLAY=:1 metacity &
                                ;;
                startxfce4) startx -- :1 &
                                DISPLAY=:1 xfwm4 --daemon &
                                ;;
                *) startx -- :1 &
                                ;;
        esac
}
startXgl(){
        export LANG="en_US.UTF-8" # 此处设置界面为英文,不是必需,如果不习惯注销即可
        LD_PRELOAD=/usr/lib/libGL.so /opt/Xgl/bin/Xgl :1 -ac -accel glx:pbuffer -accel xv:fbo -audit 0 &
        # change xv:fbo to xv:pbuffer for ATI video card
        if [ "$wmnow" = "gnome-session" -o "$wmnow" = "startkde" -o "$wmnow" = "startxfce4" ]
        then
        DISPLAY=:1 LD_LIBRARY_PATH="/opt/Xgl/lib:/opt/Xgl/lib/window-manager-settings: \
                 /opt/Xgl/lib/xorg/modules/xgl:/opt/Xgl/lib/compiz" \
                 compiz --replace gconf &
        [ "$wmnow" = "gnome-session" ] && DISPLAY=:1 eval $(dbus-launch --auto-syntax)
        DISPLAY=:1 gnome-window-decorator &
        DISPLAY=:1 $wmnow &
        DISPLAY=:1 /etc/X11/xinit/xinitrc.d/xinput.sh &
        else
        DISPLAY=:1 $wmnow &
        DISPLAY=:1 /etc/X11/xinit/xinitrc.d/xinput.sh &
        fi
}
switchDesktop(){
        echo -e "\tWhich Desktop you want to use? Type in the name: \n"
        read TargetDesktop
        [ ! -x /usr/bin/switchdesk ] && NotFOUND switchdesk install "The Desktop Switcher"
        switchdesk $TargetDesktop
}
prog="$0"
wmnow="xterm"
currentWM
perl -w -e 'print "=" x80 ;print "\n"'
echo -e "\tXstarter helps you to choose the window manager you want to run"
echo -e "\tUse it to do:"
echo -e "\t\t<1>\tstart your default window manager normally"
echo -e "\t\t<2>\tswitch to other window manager then start X"
echo -e "\t\t<3>\tstart Xgl & compiz on your default window manager"
echo -e "\t\t<4>\tswitch window manager before starting Xgl & compiz"
perl -w -e 'print "=" x80 ;print "\n"'
echo -e "\tbefore running this, make sure /etc/sudoers modified accordingly"
perl -w -e 'print "="x80;print "\n"'
echo -e "\t\tyour current window manager is $WMnow\n"
echo -e "\t\twhat to do next? please type in 1, 2, 3, or 4\n"
echo -e "\t\tpress any other key to quit\n"
read TODO
case "$TODO" in
        1) echo -e"\tStarting current default window manager\n"
                postXgl
                startX
                ;;
        2) echo -e "\tRunning the Desktop Switcher to change window manager\n"
                switchDesktop || exit 1
                postXgl
                startX
                ;;
        3) echo -e "\tStarting Xgl & Compiz on default window manager\n"
                preXgl
                startXgl
                ;;
        4) echo -e "\tStarting Xgl & Compiz after switch window manager\n"
                switchDesktop || exit 1
                preXgl
                currentWM
                startXgl
                ;;
        *) echo -e "\tQuit now, legitimate inputs are ordinal number 1 to 4\n"
                exit 1
                ;;
esac

使其具有执行权限
chmod +x /usr/local/bin/Xstarter

脚本使用方法:
修改/etc/inittab,将initdefault设定为3,绕过gdm,启动进入控制台;
运行Xstarter,转换桌面管理器,启动X、Xgl;转换时,只需重启X,无须重启系统;
运行Xstarter有四个选项:
⑴以默认桌面启动X;
⑵转换桌面,然后启动X;
⑶以默认桌面启动Xgl;
⑷转换桌面,然后启动Xgl;
按Shift + Backspace退出

请参考提示⑩注意事项

⒉几个小提示

①如何设置,增加cube的面(多于四个面的还叫cube吗?)

gconftool-2 -t int -s /apps/compiz/general/screen0/options/size "5"

或用配置编辑器手动修改/apps/compiz/general/screen0/options/size键值,这样就是5个侧面了。

②如何在cube顶上添加演示文件

yum install inkscape

运行OpenOffice,制作演示文件,每一幅幻灯保存为一张jpg图片
运行Inkscape,将图片输出为svg文件(Scalable Vector Graphics)
将所有的svg文件放入某个文件夹
保存下面脚本到/usr/local/bin/svg2top
#!/bin/bash
echo "Give full path of the folder containing SVGs to use as Cube TOP:"
read path
svglist=$(find $path -type f \( -name "*.svg" -o -name "*.png" \) -printf "%p,")
gconftool-2 -s /apps/compiz/plugins/cube/screen0/options/images -t list --list-type=string "[${svglist%%,}]"
echo "SVGs added"

运行svg2top
svg2top 目录绝对路径

gconftool-2 -t bool -s /apps/compiz/plugins/rotate/screen0/options/snap_top true

向cube顶上添加演示文件,如产品推介、课程幻灯,
Ctrl + Alt + 鼠标点击桌面空白处,转动cube显示顶部,
Space键播放下一张,Esc返回桌面。

③如何添加天穹图片
运行GIMP,制作天穹图片,选择自己喜欢的图片,按合适的比例保存为png格式;图片的比例为
1024x1024
1024x2048
1024x4096
2048x1024
2048x2048
2048x4096
4096x1024
4096x2048
4096x4096
...
最好是2/1、1/2的比例,注意图片越大,资源占用越多。

gconftool-2 -t bool -s /apps/compiz/plugins/cube/screen0/options/skydome true
gconftool-2 -t bool -s /apps/compiz/plugins/cube/screen0/options/skydome_animated true
gconftool-2 -t bool -s /apps/compiz/plugins/cube/screen0/options/skydome_image " "png图片的绝对路径"

④如何显示cube的内部

gconftool-2 -t bool -s /apps/compiz/plugins/cube/screen0/options/in true

⑤一些快捷键的默认设置
切换窗口 Alt + Tab
排列观看所有窗口 F12
切换正方体(多边的也行)桌面 Ctrl + Alt + 左方向键/右方向键
切换正方体桌面,当前窗口跟随 Ctrl + Alt + Shift + 左方向键/右方向键
手动转到桌面 Ctrl + Alt + 鼠标左键单击桌面空白处
窗口变透明、不透明 Ctrl + Alt + 鼠标滚轮
自动缩小 超级键 + 鼠标右键
手动缩小 超级键 + 鼠标滚轮向上
手动放大 超级键 + 鼠标滚轮向下
移动窗口 Alt + 鼠标左键
挥动窗口 Ctrl + Alt + 鼠标左键(窗口粘附边框)
改变窗口大小 Alt + 鼠标右键
最小化窗口 Alt + F9
最大化窗口 Alt + F10
显示下层窗口 Alt + 鼠标中键
减慢动作 Shift + F10

*所谓超级键就是Win键。
*这里列出的是一些默认的快捷键设置,但根据版本不同可能会有变化;你也可以使用gconf-editor来进行设定。

⑥ATI显卡x300、x700可能遇到键盘无反应、锁定的情况,参考:

修改xorg.conf的Device部分:

Section "Device"
   Identifier "card0"
   Driver "fglrx"
   Option "no_accel" "no"
   Option "no_dri" "no"
   Option "DynamicClocks" "on"
   Option "mtrr" "on"
   Option "DesktopSetup" "Single"
   Option "ScreenOverlap" "0"
   Option "Capabilities" "0x00000000"
   Option "CapabilitiesEx" "0x00000000"
   Option "VideoOverlay" "on"
   Option "OpenGLOverlay" "off"
   Option "CenterMode" "off"
   Option "PseudoColorVisuals" "off"
   Option "Stereo" "off"
   Option "StereoSyncEnable" "1"
   Option "FSAAEnable" "no"
   Option "FSAAScale" "1"
   Option "FSAADisableGamma" "no"
   Option "FSAACustomizeMSPos" "no"
   Option "FSAAMSPosX0" "0.000000"
   Option "FSAAMSPosY0" "0.000000"
   Option "FSAAMSPosX1" "0.000000"
   Option "FSAAMSPosY1" "0.000000"
   Option "FSAAMSPosX2" "0.000000"
   Option "FSAAMSPosY2" "0.000000"
   Option "FSAAMSPosX3" "0.000000"
   Option "FSAAMSPosY3" "0.000000"
   Option "FSAAMSPosX4" "0.000000"
   Option "FSAAMSPosY4" "0.000000"
   Option "FSAAMSPosX5" "0.000000"
   Option "FSAAMSPosY5" "0.000000"
   Option "UseFastTLS" "0"
   Option "BlockSignalsOnLock" "on"
   Option "UseInternalAGPGART" "no"
   Option "ForceGenericCPU" "no"
   Option "KernelModuleParm" "agplock=0"
   Option "PowerState" "1"
   BusID "PCI:1:0:0"
EndSection

⑦如果SELinux启用,需要修改以下文件的安全上下文

chcon -t textrel_shlib_t /opt/Xgl/lib/libGL.so
chcon -t textrel_shlib_t /opt/Xgl/lib/libGLU.so

⑧注意事项:
编译安装的操作步骤,均默认为在同一终端内完成;如果使用多个终端,需要设置相应的环境变量;
使用Xgl时,建议不要进行rpm包安装、yum升级的操作;原因在于,这种安装方法是尽量使系统不受Xgl安装的影响,如果在使用Xgl时进行了系统升级,会因Xgl共享库路径未在系统文件中配置,启动默认X时产生错误的依赖关系;而且运行中Xgl也会因共享库路径变化出错。如果要将Xgl、 Compiz作为日常应用,请参考第四部分的方法;
由于编译时指定了安装位置,卸载时只需删除/etc/profile.d/Xgl.sh、/usr/local/bin/Xstarter和/opt/Xgl目录即可。

⑨compiz的gconf键值参考:

⑩排错参考:

⒊相关资源链接:






四 打包安装Xgl和Compiz
前文讲述了从源码编译、安装、配置Aiglx和Xgl、Compiz的过程,下面讲一下,如何对源码进行打包,制作成FC5专用的rpm包。
在fedora rawhide中提供了Aiglx的rpm包,此处不予赘述。

⒈安装fedora-rpmdevtools,生成rpmbuild目录:

yum install fedora-rpmdevtools
fedora-buildrpmtree

修改~/.rpmmacros
%_topdir %(echo $HOME)/rpmbuild
%_prefix /usr/local
%_mandir /usr/local/man
%_defaultdocdir /usr/local/share/doc
%_sysconfdir /usr/local/etc
%_smp_mflags -j3
#%__arch_install_post /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot

⒉下载源码包:
下载我制作的源码包,下载地址如下:

提取码:
compiz-cvs 0009972112435392
xgl-cvs 7117086849938431

⒊使用rpmbuild命令重新编译打包:

rpmbuild --rebuild xgl-cvs_060430.src.rpm
rpmbuild --rebuild compiz-cvs_060430.src.rpm

⒋我编译好的xgl和compiz binary包下载,仅提供了x86包,使用x86_64版本的兄弟请下载源码包重新打包。

五 如何配置系统文件,使Xgl & Compiz自动运行:

此方法适用于第四部分之rpm包安装,及源码编译安装(需要修改的路径,由/usr/local/变为/opt/Xgl)
所谓配置无非是两点:

——配置显示管理器(displaymanager),使系统启动后启用Xgl server;
由于Xgl启动时间稍长,所以要延长显示管理器的等待时间,然后添加命令

——配置桌面环境、管理器,使桌面启动后启用Compiz窗口管理器;

下面简单介绍一下:

①FC5的显示管理器(DISPLAYMANGAGER)在/etc/sysconfig/desktop中配置,如:

cat /etc/sysconfig/desktop
DESKTOP=GNOME
DISPLAYMANAGER=GNOME

在这里,桌面环境是GNOME,显示管理器是GNOME(gdm);如果是KDE,则相应地均为KDE(kdm)。

②显示管理器所对应的配置文件分别是:
GNOME: /etc/gdm/custom.conf
KDE: /etc/kde/kdm/kdmrc

修改为:
如果使用gdm,修改完配置文件使用gdmflexiserver命令更新,或重启系统

[daemon]
GdmXserverTimeout=30 #修改这里延长等待时间
[security]
[xdmcp]
[gui]
[greeter]
[chooser]
[debug]
[servers]
0=Standard # 修改这里“覆盖”默认Standard server
[server-Standard] # 修改这里添加命令
name=Standard server
# nvidia 显卡
command=/usr/local/bin/Xgl :0 -ac -accel glx:pbuffer -accel xv:fbo -audit 0 -fullscreen
# ati 显卡
# command=/usr/local/bin/Xgl :1 -ac -accel glx:pbuffer -accel xv:pbuffer -audit 0 -fullscreen
# i810 使用i810驱动的intel 显卡
# command=/usr/bin/Xgl :0 -accel xv -accel glx:pbuffer -accel xv:pbuffer -ac -audit 0 -br -dpms -dpi 72
flexible=true # 使用gdmflexiserver命令更新
chooser=false

如果使用kdm
[General]
ConfigVersion=2.3
StaticServers=:0
ReserveServers=:1,:2,:3
ServerVTs=-7
ConsoleTTYs=tty1,tty2,tty3,tty4,tty5,tty6
PidFile=/var/run/kdm.pid
[Xdmcp]
Enable=false
Xaccess=/etc/X11/xdm/Xaccess
Willing=/etc/X11/xdm/Xwilling
[Shutdown]
HaltCmd=/sbin/poweroff
[X-*-Core]
Resources=/etc/X11/xdm/Xresources
Setup=/etc/X11/xdm/Xsetup_0
Session=/etc/kde/kdm/Xsession
AutoReLogin=false
AllowShutdown=Root
SessionsDirs=/usr/share/xsessions,/usr/share/apps/kdm/sessions,/etc/X11/dm/sessions
ClientLogFile=.xsession-errors-%s
[X-*-Greeter]
GUIStyle=Bluecurve
ColorScheme=BlueCurve.kcsrc
LogoArea=Clock
LogoPixmap=/usr/share/apps/kdm/pics/kdelogo.png
GreetFont=Sans,16,-1,5,75,0,0,0,0,0
StdFont=Sans,10,-1,5,50,0,0,0,0,0
FailFont=Sans,12,-1,5,75,0,0,0,0,0
AntiAliasing=true
UserList=false
ShowUsers=NotHidden
MinShowUID=500
SortUsers=true
FocusPasswd=true
EchoMode=OneStar
UseBackground=false
BackgroundCfg=/etc/kde/kdm/backgroundrc
ForgingSeed=1108476160
Preloader=/usr/bin/preloadkde
UseTheme=true
Theme=/usr/share/apps/kdm/themes/Bluecurve
# 看这一段,修改的是ServerCmd,所做的修改依显卡而定 NVidia显卡xv:fbo ATI显卡xv:pbuffer Intel显卡
#(支持的型号)同NVidia xv:fbo
[X-:*-Core]
ServerAttempts=5 # 修改这里增加尝试次数
ServerTimeout=60 # 修改这里延长超时等待
ServerCmd=/usr/local/bin/Xgl :0 -ac -accel glx:pbuffer -accel xv:fbo -fullscreen -audit 0 # 修改这里添加命令
ServerArgsLocal=-nolisten tcp
AllowShutdown=All
[X-:*-Greeter]
PreselectUser=Previous
FocusPasswd=true
LoginMode=DefaultLocal
[X-:0-Core]
[X-:0-Greeter]

③现在系统启动后Xgl就会自动启动了,但是还不够,如果不使用Compiz窗口管理器,则使用开发版的Xgl Server就没有意义了,
毕竟从性能完备、稳定性和速度上,Xgl还有不足。要启用Compiz窗口管理器,对不同的桌面环境需要做不同的配置

首先,制作一个脚本:/usr/local/bin/compizrc

#!/bin/sh
#
# compiz plugins load order: decoration wobbly fade minimize cube rotate zoom scale move resize place switcher
#
LD_LIBRARY_PATH="/usr/local/lib:/usr/local/lib/window-manager-settings:/usr/local/lib/xorg/modules/xgl:/usr/local/lib/compiz" compiz --replace gconf > /tmp/compiz-`id -un`-`date +%s`.log 2>&1 &
/usr/local/bin/gnome-window-decorator > /tmp/gnome-window-decorator-`id -un`-`date +%s`.log 2>&1 &

使其可执行
chmod 755 /usr/local/bin/compizrc

如果使用GNOME,则:
打开 桌面 → 首选项 → 更多首选项 → 会话
选择“启动程序”标签,添加启动程序/usr/local/bin/compizrc
保存会话

如果使用KDE,则:
制作自动启动程序桌面文件 ~/.kde/Autostart/Compiz.desktop

[Desktop Entry]
Name[en]=Compiz Window Manager
Name[zh_CN]=Compiz 窗口管理器
Comment[en]=Compiz - Composite Window Manager
Comment[zh_CN]=Compiz - 混合窗口管理器
Exec=/usr/local/bin/compizrc
Type=Application
Categories=Application;Utility
Encoding=UTF-8

如果使用Xfce,则:

[General]
SessionName=Default
SessionName[de]=Standard
DisableTcp=True
[Failsafe Session]
Count=4
Client0_Command=/usr/local/bin/compizrc # 修改这里添加命令,替代xfwm4
Client0_PerScreen=False
Client1_Command=xfce4-panel
Client1_PerScreen=True
Client2_Command=xftaskbar4
Client2_PerScreen=True
Client3_Command=xfdesktop
Client3_PerScreen=False
[Splash Screen]
Engine=mice

经过上述配置,即可以图形方式进行重启系统,Xgl和Compiz自动运行;经过测试gdm或kdm均可正常运行。

④以文本界面启动,如何自动运行Xgl & Compiz
很多人像我一样,是喜欢启动进入控制台(Console)的,(原来在这说了句废话:^P)其实Linux控制台下的功能就很强悍了,只要你习惯;
这时就需要一个启动脚本,下面是我写的一个简单脚本,供参考:

#!/bin/bash
# written by aaccdd(thomas.zhuzhy@gmail.com)
# progname: startXgl
# save as /usr/local/bin, or wherever you'd like to
# What will startXgl do:
# 1st, check out which desktop you're going to run
# if that is one of GNOME, KDE, XFCE, proceed
# otherwise, start default X
# 2nd, check out whether NV/ATI Driver installed"
# with a possitive result, proceed to start
# Xgl and Compiz
#
# start Xgl
#
startXgl(){
        VCARD=; VCDRNV=0; VCDRATI=0; VCDRINTEL=0
        [ -n "$(/sbin/lspci|sed -n '/VGA.*nVidia/p')" ] && VCARD=nv
        [ -n "$(/sbin/lspci|sed -n '/VGA.*ATI/p')" ] && VCARD=ati
        [ -n "$(/sbin/lspci|sed -n '/VGA.*Intel/p')" ] && VCARD=intel
        case "$VCARD" in
        nv) [ -n "$(sed -n '/nvidia/p' /etc/X11/xorg.conf)" ] && VCDRNV=1
                [ "$VCDRNV" -eq 0 ] && echo -e "\tDriver not installed" && exit 1
                Xgl :1 -ac -accel glx:pbuffer -accel xv:fbo -audit 0 &
                ;;
        ati) [ -n "$(sed -n '/fglrx/p' /etc/X11/xorg.conf)" ] && VCDRATI=1
                [ "$VCDRATI" -eq 0 ] && echo -e "\tDriver not installed" && exit 1
                Xgl :1 -ac -accel glx:pbuffer -accel xv:pbuffer -audit 0 &
                ;;
        intel) [ -n "$(sed -n '/i810/p' /etc/X11/xorg.conf)" ] && VCDRINTEL=1
                [ "$VCDRINTEL" -eq 0 ] && echo -e "\tDriver may not be supported" && exit 1
                Xgl :1 -ac -accel glx:pbuffer -accel xv:fbo -audit 0 &
                ;;
        *) startx ;;
        esac
        /usr/local/bin/compizrc
        DISPLAY=:1 eval $(dbus-launch --auto-syntax)
        DISPLAY=:1 $wmnow &
        DISPLAY=:1 exec /etc/X11/xinit/xinitrc.d/xinput.sh
}
wmnow=
which xterm 2>/dev/null && wmnow="xterm"
if [ -e $HOME/.Xclients-default ]
then
        wmnow=$(sed -n 's/^WM=\"\(.*\)\"$/\1/p' $HOME/.Xclients-default )
elif [ $(which gnome-session 2>/dev/null) ]
        then wmnow="gnome-session"
elif [ $(which startkde 2>/dev/null) ]
        then wmnow="startkde"
fi
case "$wmnow" in
        gnome-session|startkde|startxfce4) startXgl;;
        *) startx;;
esac

有人说为什么是display :1而不是0呢?这要看你的机器配置和运行方式,0不能行就尝试1。而这个脚本远不完善,
不是说运行就个脚本不成功,就不能运行Xgl & Compiz,请根据自己的实际情况修改、使用。

如果也想登录自动启动,则修改 ~/.bash_profile

echo "[ x"DISPLAY" = x"" ] && startXgl " >> ~/.bash_profile

⑤测试是否安装成功:
到这里基本完成了配置,剩下的就是运行了。建议新建一个用户,如compiz测试一下。实际上,安装完rpm包后,
不需要重启系统就可以使用了。当然前提是测试成功。

Ctrl + Alt + F1(1-6)切换到控制台下,如果你是图形方式启动的。运行命令:

Xgl :1 -ac -accel glx:pbuffer -accel xv:fbo &

如果是ati显卡使用xv:pbuffer;如果报错,Badlength...,Xgl前使用参数LD_PRELOAD=/usr/lib/libGL.so 。
如果成功,你会看到X启动,有一个叉形的鼠标标记。这说明Xgl运行成功。
有人又问了,为什么是:1,呢?注意一下,如果你是图形启动,此时:0已经占用了。
DISPLAY=:1 compiz --replace gconf &
DISPLAY=:1 gnome-window-decorator &

如果窗口变成蓝色,出现鼠标键头,Compiz已经运行。
DISPLAY=:1 xterm &

这时你就看到一个在Xgl & Compiz环境下xterm终端的样子了。

⑥为什么我运行不了?
首先看的硬件配置,参考:
其次,查看是否配置文件有误
再次,查看gconf键值是否有误
补充:
有兄弟反映运行时打不开DISPLAY, 变通的方法:
修改startXgl脚本,早几天的脚本里使用的是DISPLAY=:1,改成DISPLAY=:0;
或修改/etc/X11/xdm/Xservers,添加一行:

:0 local /usr/bin/X
:1 local /usr/bin/X

上面说的是图形启动状态;
fc5的设备由udev管理,在控制台下生成的设备权限,由pam按照系统权限控制文件的设置决定,
比如显卡设备,默认的权限是600(用户读写)因而当切换用户(root除外)后,是无法使用该设备的。
解决的办法是修改权限设置。
举个例子:在默认的控制台权限控制文件中(/etc/security/console.perms.d/50-default.perms)声音和显卡设备权限都是0600,即仅属主读写,要让登录的用户都可以读写(使用),则可生成文件60-custom.perms:
cat > /etc/security/console.perms.d/60-custom.perms << EOF
=/dev/dsp* /dev/audio* /dev/midi* \
/dev/mixer* /dev/sequencer \
/dev/sound/* /dev/beep \
/dev/snd/*
=/dev/nvidia* /dev/3dfx* /dev/dri/card*
# device permission definition
0666 0666 root
0666 0666 root
EOF

这样,系统启动时会自动设置声音和显卡设备为用户均可读写。

六 写在后面:
本文是作者原创,如有错误遗漏,敬请指出。经作者验证,Aiglx启动相对简便,Xgl & Compiz在gnome、kde、xfce上都能
运行,比较稳定,运行一周多时间里只有一次是手误按了Shift + Backspace杀死了Xgl,没有出现过崩溃现象,多数应用程序运
行正常。但各人机器配置多有不同,如有不适合之处,请指正批评。本文遵循GPL发布,保留原始发布信息基础上,可以自由修改,
传播。因按文中所述方法,造成损失的,作者不承担任何责任。

由于Xgl和Compiz仍然处于快速开发状态,虽然我会尽量更新,但是文档中所述内容不能保证于最新的版本同
阅读(2350) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~