当前位置: 首页 > 工具软件 > Xgl > 使用案例 >

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

管景天
2023-12-01
在 Fedora Core 5 上体验 Aiglx 和 Xgl & Compiz(转)

  摘要:

  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?

  http://www.freedesktop.org/wiki/Software_2fXgl

  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?

  http://fedoraproject.org/wiki/RenderingProject/aiglx?highlight=%28aiglx%29

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

  代码是与X 社区相关的上游完成,Fedora Core 5是第一个包括了模块X包和在适合位置添加适合协议的发布版。Aiglx在X基础方面已经进行了大量工作,但对实际的渲染效果并没下太大力气,希望广大社区帮助创造有趣、适当的效果。重要的不是此时就推出成品,而是鼓励社区围绕其进行开发和实验。

  二 体验 Aiglx

  参考 http://fedoraproject.org/wiki/RenderingProject/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

  ⒊ 演示和已知问题

  ①演示

  最小化之一 http://www.gnome.org/~jrb/aiglx/shot01.ogg

  最小化之二 http://www.gnome.org/~jrb/aiglx/shot02.ogg

  菜单淡化 http://www.gnome.org/~jrb/aiglx/shot03.ogg

  ②支持的显卡和一些问题

  http://fedoraproject.org/wiki/RenderingProject/aiglx#head-43a98eb9adc0264c802bf5918f1cc57bddbbc129

  三 体验 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 http://ftp.gnome.org/mirror/gnome.org/sources/control-center/2.14/control-center-2.14.0.tar.bz2

  ②编译安装

  编译安装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://www.mesa3d.org/lists.html) 中去查找办法。当然也有替代的方法,就是下载发布版,如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 " "'

    echo -e " Creating necessary links and cache to share libraries "

    echo -e " Please stand by ... "

    perl -e 'print "="x80;print " "'

    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 " "'

    echo -e " Creating necessary links and cache to share libraries "

    echo -e " Please stand by ... "

    perl -e 'print "="x80;print " "'

    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 " Which Desktop you want to use? Type in the name: "

    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 " "'

echo -e " Xstarter helps you to choose the window manager you want to run"

echo -e " Use it to do:"

echo -e " <1> start your default window manager normally"

echo -e " <2> switch to other window manager then start X"

echo -e " <3> start Xgl & compiz on your default window manager"

echo -e " <4> switch window manager before starting Xgl & compiz"

perl -w -e 'print "=" x80 ;print " "'

echo -e " before running this, make sure /etc/sudoers modified accordingly"

perl -w -e 'print "="x80;print " "'

echo -e " your current window manager is $WMnow "

echo -e " what to do next? please type in 1, 2, 3, or 4 "

echo -e " press any other key to quit "

read TODO

case "$TODO" in

    1) echo -e" Starting current default window manager "

        postXgl

        startX

        ;;

    2) echo -e " Running the Desktop Switcher to change window manager "

        switchDesktop || exit 1

        postXgl

        startX

        ;;

    3) echo -e " Starting Xgl & Compiz on default window manager "

        preXgl

        startXgl

        ;;

    4) echo -e " Starting Xgl & Compiz after switch window manager "

        switchDesktop || exit 1

        preXgl

        currentWM

        startXgl

        ;;

    *) echo -e " Quit now, legitimate inputs are ordinal number 1 to 4 "

        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可能遇到键盘无反应、锁定的情况,参考:

  ubuntu xglhowo

  修改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键值参考:

  https://wiki.ubuntu.com/compiz

  ⑩排错参考:

  http://gentoo-wiki.com/HOWTO_XGL/Troubleshooting

  ⒊相关资源链接:

  http://www.freedesktop.org/wiki/Software_2fXgll

  http://en.opensuse.org/Xgl

  http://en.opensuse.org/Compiz

  http://gentoo-wiki.com/HOWTO_XGL

  https://wiki.ubuntu.com/XglHowto?highlight=%28xgl%29

  http://compiz.ed3n.com/

  http://gentoo-wiki.com/HOWTO_XGL/Troubleshooting

  四 打包安装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 " Driver 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 " Driver 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 " Driver 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终端的样子了。

  ⑥为什么我运行不了?

  首先看的硬件配置,参考:http://gentoo-wiki.com/HOWTO_XGL#Hardware_Prerequisites

  其次,查看是否配置文件有误

  再次,查看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仍然处于快速开发状态,虽然我会尽量更新,但是文档中所述内容不能保证于最新的版本同步。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14102/viewspace-116515/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14102/viewspace-116515/

 类似资料: