From ArchWiki
Jump to navigation Jump to search

Beryl is a window and composition manager. It has been created as a fork of compiz. Beryl is currently only available via svn, although a first release is expected soon.

Installing Beryl

Beryl is only available through SVN right now. PKGBUILDs for the components can be found in AUR:

To build these packages, use versionpkg, it will check out the latest svn release automatically.

There are also binary packages available from the brain0 repo at

Server =

Install these using the command

# pacman -S beryl-svn

This will install all necessary packages.

Preparing Xorg for hardware accelerated effects

Using nvidia drivers

You need the latest nvidia beta drivers. Get them from the nvidia-beta repo:

Server =

The PKGBUILDs can be found here. Put this repo to the top of pacman.conf (above all other repos) and then run pacman -Su. If you use the kernel26 package, you also need to enable the testing repository, as the nvidia package is built for version 2.6.18-ARCH. If you don't want this, rebuild the driver for the 2.6.17-ARCH kernel, using the PKGBUILD.

Make sure you install nvidia-utils AND one of nvidia, nvidia-beyond, nvidia-suspend2 from this repo.

Then edit the /etc/X11/xorg.conf file:

Section "Module"
  Load "glx"


Section "Device"
  Driver "nvidia"
  Option "AddARGBGLXVisuals"


Section "Extensions"
  Option "Composite" "Enable"

Using open source drivers and AIGLX

AIGLX currently works with the open source Intel and Radeon drivers. Add the following to your /etc/X11/xorg.conf file to enable AIGLX:

Section "Module"
  Load "glx"
  Load "dri"


Section "Device"
   Option "XAANoOffscreenPixmaps" "true"
   Option "DRI" "true"


Section "ServerLayout"
   Option "AIGLX" "true"


Section "Extensions"
   Option "Composite" "true"

If your xorg driver doesn't support AIGLX, then the effects won't work.

Using XGL


Starting Beryl

XFCE Desktop

The startxfce4 script and the xfce4-session tool don't seem to work with beryl yet, as it seems to lack proper X Session Management support. To use xfce with beryl, you have to modify your $HOME/.xsession and/or $HOME/.xinitrc script. xinitrc is used by startx, xsession is used by gdm and kdm if you select the Custom session.

NOTE: The default .xsession script only launches the .xinitrc script, so most people will have to edit .xinitrc.

Your script has to start dbus and all beryl and xfce components. Here is an example:

. /etc/profile
. $HOME/.bashrc

is_running() {
  for pid in $(pidof "$1"); do
    if kill -0 $pid 2>/dev/null; then
      return 0
  return 1
xrdb $HOME/.Xresources

# start a dbus session bus, if it is not already running
if ! is_running dbus-daemon; then
  dbus-launch --sh-syntax > $HOME/.dbus-env
source $HOME/.dbus-env

# start beryl and beryl-manager
beryl-manager &
# start necessary xfce components
xfdesktop & 
xfce4-panel & wmpid=$!

# start any other needed programs here

wait $wmpid

KDE Desktop


GNOME Desktop

The simplest way is to add beryl-start to the applications that start with your session. You can do this by going to:

[Desktop] -> [Preferences] -> [Sessions] -> [Startup Programs]

Adding beryl-manager to the list might be a good idea too so you can switch back to Metacity if need be.

No Desktop, Beryl as window manager only

This is an example ~/.xinitrc to create a "lightweight" Beryl environment. It is rather unconfortable unless you add a panel and maybe other management applications.

if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
    eval `dbus-launch --sh-syntax --exit-with-session`

emerald &
beryl-manager &

# Start other applications here
# Example: set wallpaper + open a terminal
# feh --bg-scale ~/Wallpapers/wallpaper.jpg &
# urxvt -depth 32 -fg grey80 -bg rgba:0000/0000/0000/dddd &

# Remove '--indirect-rendering --strict-binding' from the following line if you are not using AIGLX
exec /usr/bin/beryl --indirect-rendering --strict-binding dbus settings

Configuring Beryl

beryl (WM and compositor): Just run "beryl-settings"

emerald (window decorator): run "emerald-theme-manager"

You can migrate compiz-quinn's settings to beryl by copying ~/.compiz/csm_settings to ~/.beryl/settings


Poor performance under heavy CPU load with nvidia drivers (sched_yield fix)

nvidia has a known problem to *wait* for all busy programs, the result is extreme slowness when any application is using the cpu. This is a hack that seems to fix the issue (copied from Xgl code):

Create a file called sched.c:

int sched_yield() {return 0;}

Compile it with the following command:

$ gcc -rdynamic -shared -fPIC -o sched.c 

Then copy it the file to /usr/local/lib, and preload it for X/Xorg using one of the methods below:

Using the sched_yield fix with kdm and gdm

If you are using kdm or gdm, create a script called /usr/local/bin/X_sched_fix:

LD_PRELOAD=/usr/local/lib/ exec /usr/bin/X $*

Make it executable with the command

# chmod 755 /usr/local/bin/X_sched_fix


For kdm, exit the file /opt/kde/share/config/kdm/kdmrc, find the line

ServerCmd=/usr/bin/X -br

and change it to

ServerCmd=/usr/local/bin/X_sched_fix -br


For gdm, edit /opt/gnome/share/gdm/defaults.conf and change all occurences of /usr/bin/X to /usr/local/bin/X_sched_fix:

# sed 's|/usr/bin/X'|/usr/local/bin/X_sched_fix|g'

FIXME: Does this even work? I haven't tested it


For slim edit "/etc/slim.conf", find the line

default_xserver         /usr/bin/X

and change it to

default_xserver         /usr/local/bin/X_sched_fix

Using the sched_yield fix with startx

Instead of using startx, create a script /usr/local/bin/mystartx:

if [ -e /tmp/.X0-lock ]; then
  echo "/tmp/.X0-lock" already exists
  su -c "LD_PRELOAD=/usr/local/lib/ X :0 &"
  DISPLAY=:0 ~/.xinitrc

The script will ask root password before starting X. It's required because LD_PRELOAD doesn't work with setuid (X switches to root if you start from user) for security reasons.