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

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

穆彬郁
2023-12-01
1 、 什么是Xgl;
Xgl是基于 OpenGL上的X服务架构,现在处于开发阶段,很多重要的部分还未完成。Xglx是目前唯一使用这种结构的X服务器,它需要在一个已有的X服务器,只用于测试和开发目的。Xegl是基于Xgl架构的新一代X服务器,它将使用EGL扩展独立地运行在OpenGL上。
它有哪些新的特性呢?
基于 OpenGL的X层,使用混合桌面,开启通往新功能、新机会的大门。以下是一些可能出现的功能,其中一些现在已经实现。我们要破除基于OpenGL的X中看不中用的迷信。
①加倍窗口显示分辨率,应用程序可以用特定的分辨率渲染窗口,而与桌面的分辨率不同。想像一下梯度背景,这样的一个窗口或材质只有几个色素,却以 1600x1200或更大的尺寸显示。
②快速、简单的屏幕旋转、翻转、摇动、放大。
③高级字体渲染,包括使用材质和分段程序的及时轮廓字体渲染。
④模拟硬件层面,历史悠久的工作站图形功能可以用材质混合实现
⑤全屏颜色处理,包括伽玛纠正、对比增强、模糊、加亮等等。
……

2、什么是Compiz?
Compiz带来多种视觉效果,使得 Linux桌面变得更方便、功能更强大、更新颖、更容易满足用户的特殊需求。Compiz使用OpenGL进行渲染,集窗口管理器与混合管理器于一身;窗口管理器处理屏幕上的应用程序和对话框,而混合管理器则使窗口和图形混合,产生混合图像;Compiz同时具有两者的功能,产生惊人的效果。
Compiz目前只能与 Xgl“共事”,Compiz的插件及窗口装饰器在Gnome和KDE下都能工作。

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

4
、体验 Aiglx

4.1
下载、安装
建立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

4.2
配置
启用混合管理器
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

4.3
演示和已知问题
支持的显卡和一些问题

5
、 体验 Xgl 和 Compiz
本文的重点是在不破坏原有系统的基础上,使普通用户体验 Xgl & Compiz的新效能。
默认情况是安装路径为 /opt/Xgl,没有进行(二)部分所做下载
5.1 下载安装
建立CVS源码目录,下载源码包:
#mkdir /opt/CVS
下载 cvs源码的cairo, libsvg, libsvg-cairo, mesa, xorg/glitz, xkbfile, glxproto, drm, compiz, FixesProto, ScrnSaverProto, CompositeProto, 下载control-center-2.14.0源码
#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
编译安装 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
添加如下内容到: ~/.bashrc
PKG_CONFIG_PATH=/opt/Xgl/lib/pkgconfig
LD_LIBRARY_PATH=/opt/Xgl/lib
export PKG_CONFIG_PATH LD_LIBRARY_PATH
#source ~/.bashrc
编译安装 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源码变化很快,有时很出现长时间编译不成功的现象,这时就需要一点耐心了。当然也有替代的方法,就是下载发布版,如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退出

5.2
几个小提示
启动Xgl后运行mplayer需要指定视频输出设备为x11,否则Xgl会崩溃。这点在脚本中已经考虑到,会自动修改
启动Xgl后不要使用bmp,否则Xgl会崩溃
如何设置,增加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
# written by cyberorg @ forums.suselinuxsupport.de
echo "Give full path of the folder containing SVGs to use as Cube TOP:"
read path
gconftool-2 -s /apps/compiz/plugins/cube/screen0/options/svgs -t list --list-type=string "[`find $path -name "*.svg" -printf "%p,"`]"
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键。

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

6
、 相关资源链接

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