Xcompmgr

Related articles
Compiz
picom
Xcompmgr
is a simple
compositor
capable of rendering drop shadows and, with the use of the
transset
utility, primitive window transparency. Designed solely as a proof-of-concept, Xcompmgr is a lightweight alternative to Compiz and similar composite managers.
Because it does not replace any existing window manager, it is an ideal solution for users of lightweight
window managers
, seeking a more elegant desktop.
Installation
Before installing Xcompmgr, make sure you have
installed
and correctly configured
Xorg
. To make sure the
Composite
extension is enabled for the X Server, run:
$ xdpyinfo | grep Composite
Composite
If there is no output, add the
Composite
option to the
Extensions
section of xorg.conf:
/etc/X11/xorg.conf
Section "Extensions"
        Option  "Composite" "true"
EndSection
Xcompmgr can be
installed
with the package
xcompmgr
. For transparency also
install
the
transset-df
AUR
. See
Xterm#Automatic transparency
for an example.
Configuration
To load
xcompmgr
, simply run:
$ xcompmgr -c
To have it load at session start, add the following to
xprofile
:
xcompmgr -c &
Instead of
-c
you can experiment with the other switches to modify the drop-shadows or even enable fading. Below is a common example:
xcompmgr -c -C -t-5 -l-5 -r4.2 -o.55 &
For a full list of options, run:
$ xcompmgr --help
Window transparency
Although its practical use is limited, due to its slow performance, the
transset-df
utility can be used to set the transparency of individual windows.
To set the transparency of a program window, make sure the desired program is already running, then execute:
$ transset-df
opacity
where
opacity
is a number between
0
and
1
, 0 being transparent and 1 being opaque.
Once execution, the mouse cursor will transform to a cross-hair. Click a window and its transparency will change to the value specified. For example,
transset-df 0.25
will set the target window to 25% opacity (75% transparency).
Tips and tricks
Start/Stop Xcompmgr on demand
This script allows easy (re)starting and stopping of the compositing manager.
~/.bin/comp
#!/bin/bash
#
# Start a composition manager.
# (xcompmgr in this case)

comphelp() {
    echo "Composition Manager:"
    echo "   (re)start: COMP"
    echo "   stop:      COMP -s"
    echo "   query:     COMP -q"
    echo "              returns 0 if composition manager is running, else 1"
    exit
}

checkcomp() {
    pgrep xcompmgr &>/dev/null
}

stopcomp() {
    checkcomp && killall xcompmgr
}

startcomp() {
    stopcomp
    # Example settings only. Replace with your own.
    xcompmgr -CcfF -I-.015 -O-.03 -D6 -t-1 -l-3 -r4.2 -o.5 &
    exit
}

case "$1" in
    "")   startcomp ;;
    "-q") checkcomp ;;
    "-s") stopcomp; exit ;;
    *)    comphelp ;;
esac
For ease of use, you can bind this script to a hot-key using, for example,
Xbindkeys
. This allows for fast restart or temporary composition removal if needed without interrupting other work.
Toggle Xcompmgr
Assign the following script to any hot-key:
#!/bin/bash

if pgrep xcompmgr &>/dev/null; then
    echo "Turning xcompmgr OFF"
    pkill xcompmgr &
else
    echo "Turning xcompmgr ON"
    xcompmgr -c -C -t-5 -l-5 -r4.2 -o.55 &
fi

exit 0
Troubleshooting
Background turns light gray briefly after logging in (e.g. in Openbox)
This is fixed by
installing
hsetroot
and setting the background color by executing
hsetroot -solid "#000000"
(just type the code of the color you want instead of
#000000
) before
xcompmgr
. Alternatively, if
xcompmgr
is called prior to
exec
in
~/.xinitrc
, you can change
xcompmgr &
to
(sleep 1 && xcompmgr) &
which will fork a subshell and allow
xcompmgr
to execute after your window manager has already started.
BadPicture request in awesome
If you get the following error in
awesome
:
error 163: BadPicture request 149 minor 8 serial 34943
 error 163: BadPicture request 149 minor 8 serial 34988
 error 163: BadPicture request 149 minor 8 serial 35033
just
install
feh
and restart
awesome
.
Screen not updating in awesome after resolution change
When using an external monitor, you may encounter problems when automatically changing display resolutions: a part of the screen becomes "stuck" and no longer updates itself. This problem occurs because of the initial resolution change (happening before Xcompmgr starts) as well as
awesome
setting the background via
feh
.
To fix it, you need to
install
hsetroot
and put the following line in
.xinitrc
, just before
xcompmgr
:
hsetroot -solid "#000066"
(you can replace
#000066
with your color of choice).