HOWTO compiz-fusion
From Gentoo Linux Wiki
| Installation • Kernel & Hardware • Networks • Portage • Software • System • X Server • Gaming • Non-x86 • Emulators • Misc |
|
|
|
Methods Window Managers X Configuration |
| edit |
[edit] Introduction
Compiz Fusion, the reunification of Compiz and the Beryl fork, is a set of plugins and add-ons for Compiz, an OpenGL window and compositing manager. Compiz Fusion has reached its first stable version: 0.6.0. Live ebuilds from git are numbered 9999.
[edit] Prerequisites
Working 3D Acceleration. First, make sure your video card is properly configured and that the drivers for it are set up correctly. If you need help about that, refer to either:
- Gentoo nVidia Guide
- Gentoo ATI FAQ.
- Intel Cards are also supported.
Also, Compiz requires OpenGL hardware acceleration ability to be added to the desktop. x11-7.1 (specifically xorg-server-1.2.0-r3) and later builds have AIGLX support built into them, but you will need more info on how to setup xorg.conf Use XGL only as a last resource as the latest ATI binary drivers already include experimental support for AIGLX. See more at either:
[edit] Installation
[edit] Preparation
[edit] Package List
Add the following lines to /etc/portage/package.keywords:
dev-python/compizconfig-python x11-wm/compiz x11-wm/compiz-fusion x11-plugins/compiz-fusion-plugins-main x11-plugins/compiz-fusion-plugins-extra x11-plugins/compiz-fusion-plugins-unsupported x11-wm/emerald x11-themes/emerald-themes x11-apps/ccsm x11-libs/libcompizconfig x11-libs/compizconfig-backend-gconf x11-libs/compizconfig-backend-kconfig x11-libs/compiz-bcop
[edit] Emerging Cairo
Cairo needs to be built with the "glitz" and "svg" use flags. If it isn't already add "x11-libs/cairo glitz svg" to /etc/portage/package.use
echo "x11-libs/cairo glitz svg" >> /etc/portage/package.use
Now you can emerge cairo
emerge -1av cairo
[edit] Emerge
Now you can emerge compiz-fusion:
emerge -av compiz-fusion
If the emerge fails, it may help to compile in a specific order:
emerge -v1a compiz compiz-bcop emerald libcompizconfig compiz-fusion-plugins-main compiz-fusion-plugins-extra compiz-fusion-plugins-unsupported compizconfig-backend-kconfig compizconfig-backend-gconf compizconfig-python emerald-themes ccsm compiz-fusion
If compiling of compiz-fusion fails because of a "dbus/dbus.h: No such file or directory" error, emerge this:
emerge -v1a dbus-glib
compiz-fusion seems to need x11-proto/damageproto (at least for me it did), yet it doesn't seem to be a dependency. So go catch it first, in case you need it:
emerge -av x11-proto/damageproto
[edit] Starting Compiz Fusion
[edit] Manually
To start compiz-fusion, type compiz-start in terminal.
compiz-start
If it doesn't work for your system, try copying the script from /usr/bin to /usr/local/bin and change the COMPIZ_OPTIONS line to
COMPIZ_OPTIONS="--replace ccp --sm-disable"
or just try running the following once inside X:
compiz --replace ccp --loose-binding
It may be necessary to open the CompizConfig Settings Manager (run ccsm), click on 'Window Decoration', and then provide a decorator in the 'Command' field; use something like:
emerald --replace
or
gtk-window-decorator --replace
or, for kde users,
kde-window-decorator --replace
Furthermore, AIGLX users should make sure to define LIBGL_ALWAYS_INDIRECT=1:
export LIBGL_ALWAYS_INDIRECT=1 compiz --replace ccp
or simply:
LIBGL_ALWAYS_INDIRECT=1 compiz --replace ccp
[edit] Using xinitrc.d
Inside/etc/X11/xinit/xinitrc.d/create a script called xy-compiz where xy is any decimal number that specifies the start order. (As in /etc/env.d/ or /etc/udev/rules.d/)
#!/bin/bash compiz-start & sleep 2 compiz --replace ccp emerald &
Then chmod +x the file and compiz will start each time you start an X session.
[edit] Starting Compiz Fusion with KDE
This can be done two very simple ways. The first and easy way is to make a soft link.
cd /home/$USER/.kde/Autostart ln -s /usr/bin/compiz-start compiz-fusion
or (preferred) you can make your own init.
| File: /home/$USER/.kde/Autostart/compiz-fusion |
#!/bin/bash /usr/bin/compiz-start |
you can either place the run-time commands here or within the /usr/bin script, up to you. then you have to make it executable
chmod +x /home/$USER/.kde/Autostart/compiz-fusion
Next you must start CCSM so go to KDE: Applications - > Preferences - > CompizConfig Settings Manager (or try: KDE Menu -> Settings -> CompizConfig Settings Manager) and select options. In the box labeled 'command' enter:
kde-window-decorator --replace
what that is doing is kicking on the kde window decorator in case the init script /usr/bin/compiz-start doesnt figure out that you are running kde...supposedly. i get kde to start a handful of times fine and then i loose the titlebars, second installation.
[edit] Conclusion
You can configure your Compiz Fusion installation with the CompizConfig Settings Manager:
Gnome: System - > Preferences - > CompizConfig Settings
KDE: Applications - > Preferences - > CompizConfig Settings Manager
XFCE: Xfce Menu - > Settings -> CompizConfig Settings Manager
or by running this command:
# ccsm
[edit] Many thanks to ...
Many thanks to Starise from http://forums.gentoo.org/ !!! He wrote the manual in Italian
And many thanks to Google Translation Service !!!
[edit] Tools and Tips
Feel free to amend this wiki with your patches, tips or scripts. Bugs or help requests should be posted to the discussion and bugs tab at the top of the page.
[edit] Starting compiz after startingup xfce using xfce-sessions
Create a script like the one below and save it in your $HOME folder. Then, autostart it using Autostarted applications module. It might also help if you don't save any of the xfce-sessions (and delete the ones you find under ~/.config/xfce4-session/).
| File: start-compiz |
#!/bin/bash # Uncomment the following two lines if you have a graphics card that uses i915/intel module. # export INTEL_BATCH=1 # export LIBGL_ALWAYS_INDIRECT=1 compiz --replace --sm-disable ccp& emerald --replace |
[edit] compiz-start
I made a patch I run every time after I updated compiz (own script) to make sure I get compiz with the ccp --sm-disable options.
| File: compiz.patch |
--- /usr/bin/compiz-start 2007-07-03 12:09:05.000000000 +0200
+++ /usr/bin/compiz-start 2007-07-03 15:50:29.000000000 +0200
@@ -30,12 +30,5 @@
export LIBGL_ALWAYS_INDIRECT=1
fi
-if [ ! -z $KDE_FULL_SESSION ] && [ -x /usr/bin/kde-window-decorator ]; then
- echo Using KDE decorator
- kde-window-decorator --replace &
-else
- echo Using GTK decorator
- gtk-window-decorator --replace &
-fi
-
-compiz $COMPIZ_OPTIONS gconf move resize minimize place decoration wobbly fade cube rotate scale switcher zoom dbus
+compiz --replace ccp --sm-disable &
+emerald --replace &
|
Use it by running patch -p0 < compiz.patch
[edit] XCB workaround
In order to avoid problems in java and various problem that are arisen by xcb you should build xcb and libxcb with -DNDEBUG flag. Simply add CFLAGS="${CFLAGS} -DNDEBUG" to /etc/portage/env/x11-libs/libxcb and /etc/portage/env/x11-misc/xcb:
| File: /etc/portage/env/x11-libs/libxcb and /etc/portage/env/x11-misc/xcb |
CFLAGS="${CFLAGS} -DNDEBUG"
|
For more details check http://forums.gentoo.org/viewtopic-t-499881-start-0.html (thanks Guenther Brunthaler for this tip)
If you use Paludis you could add
case "${PN}" in
xcb|libxcb)
export CFLAGS="${CFLAGS} -DNDEBUG"
;;
esac
to /etc/paludis/bashrc
[edit] Patch java for when you didn't do the above
You can also leave xcb there and patch java with
locate libmawt.so|grep "/opt/sun-j.*/lib/i386/.*libmawt.so"|xargs sed -i 's/XINERAMA/FAKEEXTN/g'
[edit] Bash Script Updater
Here's a bash script to update Compiz-Fusion. (The order of items to install is good.)
| File: updateCompiz-Fusion.sh |
#!/bin/bash
# Horrible script by HTS
# Enhanced by Dominicus 2007-08-30, irc://irc.freenode.net, #compiz-fusion channel
# Script: "updateCompiz-Fusion.sh"
# Name the script "updateCompiz-Fusion.sh", place it in "/usr/bin", and make it executable.
# Note, this script is for Gentoo Linux, and requires Layman with the desktop-effects overlay.
compiz_git_packages="compiz \
compiz-bcop \
libcompizconfig \
compiz-fusion-plugins-main \
compiz-fusion-plugins-unsupported \
compiz-fusion-plugins-extra \
compiz-fusion-plugins-wallpaper \
compizconfig-backend-kconfig \
compizconfig-python \
compizconfig-backend-gconf \
ccsm \
fusion-icon \
emerald \
emerald-themes \
compiz-fusion"
# blocked due to no longer being included in the "compiz-fusion" meta package.
#compiz-fusion-plugins-gears \
#compiz-fusion-plugins-shift \
#compiz-plugins-screensaver \
update_overlay() {
layman -s desktop-effects
}
case "$1" in
"emerge")
echo -e "Updating desktop-effects overlay"
update_overlay
echo -e "Unmerging the currently installed packages (if any)"
emerge -C ${compiz_git_packages}
echo -e "Emerging packages"
echo -e " ... You will be prompted, please wait ..."
emerge --oneshot --ask --verbose ${compiz_git_packages}
;;
"backup")
echo "Making binary package backups of currently emerged compiz-fusion packages."
quickpkg ${compiz_git_packages}
;;
"revert")
echo "Reverting to the most recent binary backups of the compiz-fusion git packages."
echo -e " ... You will be prompted, please wait ..."
emerge --oneshot --ask --verbose --usepkgonly ${compiz_git_packages}
;;
"purge")
echo "Cleaning all files downloaded from git."
rm -rf /usr/portage/distfiles/git-src/*
;;
"remove")
echo "Uninstalling the emerged version of Compiz-Fusion."
emerge -C ${compiz_git_packages}
;;
*)
echo -e "`basename ${0}`: Compiz-Fusion installation tool for Gentoo Linux"
echo -e "The desktop-effects overlay (available via layman) is required to use this script."
echo -e ""
echo -e "Usage: `basename ${0}` < backup | emerge | purge | remove | revert >"
echo -e ""
echo -e " backup -> Make binary packages out of the currently"
echo -e " emerged compiz-fusion packages."
echo -e " Example: \"`basename ${0}` backup\""
echo -e ""
echo -e " emerge -> Unmerge the old compiz-fusion packages if installed, and"
echo -e " Emerge/Re-emerge the latest compiz-fusion packages available."
echo -e " Example: \"`basename ${0}` emerge\""
echo -e ""
echo -e " purge -> Purge all source files downloaded from git."
echo -e " Example: \"`basename ${0}` purge\""
echo -e ""
echo -e " remove -> Uninstall Compiz-Fusion. Helpful when X11 is locking"
echo -e " up because something in the latest developmental"
echo -e " build of Compiz-Fusion is messed up."
echo -e " Example: \"`basename ${0}` remove\""
echo -e ""
echo -e " revert -> Revert to the most recent binary backups"
echo -e " of the compiz-fusion git packages."
echo -e " Example: \"`basename ${0}` revert\""
echo -e ""
;;
esac
exit 0
|
[edit] Replace KDE's window manager on startup
[edit] Option one: add desktop settings
If Compiz Fusion runs fine and you want to launch it instead of kwin (the standard window manager for KDE), you need to set the variable KDEWM to compiz and maybe COMPIZ_OPTIONS.
The easy way to do this without affecting all users on the system is by adding the line "export KDEWM=compiz" to your user's '~/.xinitrc' file in the home folder. X reads this file as it starts up and sets the variable before starting KDE. Note that on some systems, X will read a different init file (possibly '~/.xsession' or '~./xsessionrc'). If you are unsure which to use, you can write one and symlink others to it. You can check to see if the variable was set properly by running 'printenv | grep KDEWM' in a Konsole terminal.
To make the change global, the short way is to put exports for these variables into /etc/env.d/99kde-env and then run env-update to regenerate the profile. Keep in mind this affects all users on your system and makes switching between Compiz and kwin unhandy.
However, there's a better but more complex way you may have to follow if the above methods do not work for you at all. We will make Compiz an option in login managers by creating a new session type so each user may decide on his own whether or not to use Compiz:
First we need to create a script that exports the KDEWM variable and starts KDE for us:
| File: /usr/bin/compiz-fusion.sh |
#!/bin/sh # start kde using compiz fusion instead of kwin export KDEWM=compiz.wrapper startkde |
Then we create a new session file:
| File: /usr/share/xsessions/compiz-fusion.desktop |
[Desktop Entry] Encoding=UTF-8 Type=XSession Name=Compiz-Fusion Exec=/usr/bin/compiz-fusion.sh Icon= Type=Application |
Now we create a short script which wraps Compiz to run with certain arguments. If you can successfully run Compiz without arguments you won't need this. Also you may skip this if export COMPIZ_OPTIONS=... works for you (it doesn't for me). In that case you can just put the variable settings above startkde into /usr/bin/compiz-fusion.sh. Remember to change KDEWM=compiz.wrapper to KDEWM=compiz if you skip the next step.
| File: /usr/bin/compiz.wrapper (paste your correct arguments) |
#!/bin/sh /usr/bin/compiz --replace ccp --sm-disable --indirect-rendering |
Last but not least you should set all file permissions:
chmod 755 /usr/bin/compiz-fusion.sh chmod 755 /usr/bin/compiz.wrapper chmod 644 /usr/share/xsessions/compiz-fusion.desktop
Logout, reload your login manager if needed, select the new session type and you're done!
[edit] Option two: using the ~/.kde/Autostart/ directory
Instead of all the above, you can just add a script to your .kde/Autostart/ directory (remember to "chmod +x" your script):
| File: ~/.kde/Autostart/new_wm.sh |
#!/bin/bash /usr/bin/compiz --replace ccp & /usr/bin/emerald --replace & # optional |
[edit] Option three: using the fusion-icon
The "fusion-icon" is a small taskbar icon which lets you select the window manager and decorator. The last selection is automatically started as soon as fusion-icon starts. The fusion icon is a replacement for beryl-manger.
At the moment (April 13 2008) there is no ebuild in the main portage tree, but there is a bugreport with it: bug 198365
[edit] Common problems
[edit] Cannot use flatfiles or configuring with gconf goes haywire
The most probable cause is the use of the compiz-start script. To fix this problem, you can (and should anyway) either run
compiz --replace ccp
instead of compiz-start or you can also edit the following line in /usr/bin/compiz-start
compiz $COMPIZ_OPTIONS gconf move resize minimize place decoration wobbly fade cube rotate scale switcher zoom dbus
to look like
compiz $COMPIZ_OPTIONS ccp
[edit] Settings are disabling themselves
Just update Xorg to 7.3, and you won't get crazy configuring Compiz Fusion.
[edit] No window borders
Firstly, see in Compiz Preferences if "Window Decoration" is enabled.
Try running:
emerald --replace
Then, if you get an error like:
(emerald:17422): GLib-GObject-CRITICAL **: g_object_ref: assertion `G_IS_OBJECT (object)' failed
it may be because you have XLIB_SKIP_ARGB_VISUALS set.
Look for any occurrence of its declaration in /etc/env.d with:
grep "XLIB_SKIP_ARGB_VISUALS" /etc/env.d/*
and comment out them.
Unset the environment variable:
unset XLIB_SKIP_ARGB_VISUALS
then reboot.
Please see discussion and bugs tab.
Still Problems? Watch out:
If emerald --replace help, but it looks like that just this Option will not save, and after reboot you start without borders again take a look in the Decoration-Settings of ccsm.
# No Command, just a path thru ccsm -> Effects -> Window-Manager -> command
For emerald there will be emerald --replace.
KDE
If launching compiz from the console in KDE returns this error:
compiz (core) - Error: Another window manager is already running on screen: 0 compiz (core) - Fatal: No manageable screens found on display :0.0
you may need to turn desktop icons on, restart X, and then run compiz again.
Using NVidia binary driver , under KDE you should define the following in your xorg.conf:
In the Screen section:
DefaultDepth 24
In the device section:
Option "AddARGBGLXVisuals" "True"
then restart X
XFCE
If launching compiz from the console in XFCE returns this error:
compiz (core) - Error: Could not acquire compositing manager selection on screen 0 display ":0.0" compiz (core) - Fatal: No manageable screens found on display :0.0
please make sure you have disabled the compositing manager of XFCE. You will find it in Settings > Window decoration, under the Compositing tab.
[edit] Slow Compiz under high CPU load
See this page: http://wiki.archlinux.org/index.php/Xgl_Troubleshooting#Xgl_is_unresponsive_under_high_CPU_load schedtool is in portage. You have to replace Xgl with compiz in the command.
[edit] Compiz-fusion doesn't start, Beryl was running great
Did you have beryl, which runs on your Linux perfectly, and now compiz-fusion doesn't start? Yes, I had this problem too! :)
If you see this in the console:
Missing GLX_EXT_texture_from_pixmap
You must run Compiz-Fusion with LIBGL_ALWAYS_INDIRECT=1, such as:
env LIBGL_ALWAYS_INDIRECT=1 compiz --replace ccp
I've added this variable to /etc/env.d/03opengl
[edit] "GLX_EXT_texture_from_pixmap" or "No GLXFBConfig for default depth, this isn't going to work"
If you see one of these errors and you are using ati-drivers with aiglx you should also check wether the links
libGL.so -> /usr/lib/opengl/ati/lib/libGL.so libGL.so.1 -> /usr/lib/opengl/ati/lib/libGL.so.1 libGL.so.1.2 -> /usr/lib/opengl/ati/lib/libGL.so.1.2
are set in /usr/lib.
At present, eselect sometimes only sets the first link. http://bugs.gentoo.org/show_bug.cgi?id=199633
If you see the second error and are using xf86-video-i810, make sure you are using xf86-video-i810-2.1.1 and not 2.2.1 (2.2.0.90 wasn't tested). You can downgrade with:
emerge -1 =xf86-video-i810-2.1.1

