Translate

Sunday 4 January 2015

Installing the latest version of Compiz for tear-free Flash playback in Gentoo Linux

The aim here is video playback without screen tearing in Linux, a common issue with  Adobe Flash. If you have this issue with Flash videos embedded in browsers, the effect can be seen clearly in this Youtube video.

Ubuntu users have reported (e.g. in this forum post) that the issue can be resolved by running Compiz as your window manager with its Sync to VBlank  setting enabled. I tested this on Ubuntu and Gentoo and the results were markedly better in Ubuntu. The reason appears to be that Ubuntu is running the latest release of Compiz  (0.9.10.2) whereas the version available through portage is 0.8.8 (described as "the latest stable release" on compiz.org). There are more display setting options in the later version and, possibly because of this, it works better with Flash videos.

It's important to note that the procedure described here shouldn't be followed if it's critical you don't break your system. I use my Gentoo installation as a sandbox as well as a working tool, a way of keeping up to date with, and learning new, Linux skills. Hence it's not critical if something breaks. This being said, I have ended up with a useful and fully-functioning Compiz desktop under Gentoo.

To install the latest release of compiz you have to remove all Compiz components if they have been installed through Portage. In my case:

*  dev-python/compizconfig-python
*  x11-libs/compiz-bcop
*  x11-libs/compizconfig-backend-gconf
*  x11-libs/compizconfig-backend-kconfig4
*  x11-libs/libcompizconfig
*  x11-plugins/compiz-plugins-extra
*  x11-plugins/compiz-plugins-main
*  x11-plugins/compiz-plugins-unsupported
*  x11-wm/compiz
*  x11-wm/compiz-fusion
*  x11-apps/ccsm
*  x11-apps/simple-ccsm

Note that simple-ccsm (simple Compiz Configuration Settings Manager) is not currently available for the latest version of Compiz.

Fortunately,  all the sources for Compiz have now been merged into one repository, which makes configuration, compilation and installation much easier.

Obtaining the latest source code is straightforward as described here:

bzr branch lp:compiz

This creates a compiz directory in the location where you have entered this command. Now:

mkdir build

and

cd build

Next is the configuration stage. You need to run cmake with flags indicating the location of the installation and the options and plugins to install. Currently on Gentoo the 0.9.10.2 default compile configuration won't work  because of a missing header file kdecorationbridge.h. I worked around this by disabling the KDE window decorator option:

-DUSE_KDE4=false

You also have to nominate a location for the installation which by default will otherwise be /usr/local. I installed in the standard location to avoid having to set additional library paths:

-DCMAKE_INSTALL_PREFIX=/usr

Hence in the build directory the full configuration command was:

cmake -DUSE_KDE4=false -DCMAKE_INSTALL_PREFIX=/usr ..

I found with the subsequent make install command the code compiled without a hitch on Gentoo.

A useful initial way of testing if the compiz command is running is:

compiz --version

which should give the output:

compiz 0.9.12.0

Next you need a working desktop running Compiz. I decided to make this as lightweight as possible by running Compiz alongside the excellent fbpanel (which can be emerged through Portage for this purpose). In the directory /etc/X11/Sessions on Gentoo I have a compiz file containing:

#!/bin/sh
xsetbg /home/my_name/.fluxbox/backgrounds/sid_fluxbox.jpg
setxkbmap gb
fbpanel &
exec /usr/bin/compiz ccp 
 

This sets a background, the keyboard to British, runs the Fluxbox panel in the background and then calls compiz. Note that, contrary to the guidance in this Archlinux wiki the ccp switch is still necessary otherwise settings in  ccsm appear to have no effect.

Next, to create a user-selectable desktop option in a graphical login manager (I use lightdm) I have the following compiz-session.desktop file in /usr/share/xsessions:

[Desktop Entry]
Encoding=UTF-8
Name=Compiz 

Comment=dynamic window manager
Exec=/etc/X11/Sessions/compiz
TryExec=/usr/bin/compiz ccp
Icon=
Type=Application


I achieved good results in Adobe flash with the following configuration:

  • the nouveau video driver (the proprietary Nvidia driver still caused screen tearing)
  • the following options:
    • In cssm General => OpenGL => Sync to VBlank
    • In /etc/X11/xorg.conf:
      •  Option "GLXVBlank" "True" #as described here


This setup produced significantly better results in Flash videos (including the the test Youtube video) than the same videos run under a different window manager.

Tip: following recent development work on the nouveau driver, Nvidia cards can be re-clocked to some degree. Add nouveau.pstate=1 to your kernel line in Grub. In my case I then use the command:

cat /sys/class/drm/card0/device/pstate

which results in the output:

20: core 350 MHz shader 350 MHz memory 532 MHz
--: core 200 MHz shader 0 MHz memory 401 MHz *


To re-clock based on this output, in root:

echo 20 > /sys/class/drm/card0/device/pstate

resulting in:

20: core 350 MHz shader 350 MHz memory 532 MHz *
--: core 351 MHz shader 0 MHz memory 532 MHz