X Windowing System Under Dope
nf2 at inf.tu-dresden.de
Mon Mar 26 14:23:06 CEST 2007
> Is there a "how-to" on configuring the X Windowing System for running
> under dope? If not, I'd be happy to write one up afterwards, if someone
> could help me through the process...
> I am interested in running the X Windowing System from within L4Linux on
> my existing DROPS workstation (currently using my existing distribution
> -- Debian Sarge) on native hardware.
As Adam already mentioned, there are two ways to X11 on DROPS.
1 You can use the Linux Framebuffer. This is the easiest way
because you do not need to customize X11 and your xorg.conf.
However, with this solution, the l4fb driver in the L4Linux
kernel has to refresh the whole screen periodically. These
copy operations are expensive and are performed regardless
if there is any graphical activity in X11 or not. Furthermore,
this approach is limited to the classical desktop-in-a-window
mode of operation.
2 You can use Nitpicker with my custom drivers. This solution
provides much better performance because screen updates are
only performed when X11 is actually drawing something.
This solution also enables you to have X11 merged with DOpE
windows into one Desktop as seen on the Demo CD.
Some time back, I have answered a similar request a yours with
the following description of how Nitpicker interacts with X11:
For integrating X11, I had to face the problem that for X11 on Linux,
the input handling, frame buffer driver, and view handling
are provided by distinct processes (on L4, they are having different
thread IDs) but belong to one and the same Nitpicker session.
Nitpicker differentiates sessions by the IPC sender thread ID.
Therefore, I introduced a mediating component called OvlWM
that is a Nitpicker client and, in turn, provides three
interfaces (screen, input, window) that can be used by different
processes. You can find the interfaces of screen, input, and
The implementation of OvlWM for Nitpicker is here:
For OvlWM clients, there exist convenience libraries, which
wrap the OvlWM interface. The libraries are located at
Based on these libraries, I created a X11 screen driver as
a XFree/Xorg driver module:
For the input, I created two things: First, there is a Linux
program that receives input events from OvlWM, translates
them to /dev/input/event-compatible events, and writes them
to a named pipe. The source code for this program is here:
Second, I created a /dev/input/event-compatible driver for
the X server:
I heard that recent versions of Xorg already feature a
/dev/input/event driver. Thus, my custom driver may not
be needed anymore. (I haven't tried lxevent with Xorg's
/dev/input/event driver yet)
Finally, we need to track the X11 window state changes and
forward them to the window interface of OvlWM. This is
performed by a plain X11 client application that I start
via .xinitrc. You find my X11 window event tracker here:
> I see from the Nitpicker demo on the Demo CD, that xorg.conf is
> configured to run the OvlScreen device driver, and xinitrc runs an
> ovltrack process, however i didn't see these binaries get built as part
> of the usual drops build process.
I hope, these things are clearer now ;-)
> I did find an ovlscreen.c in the examples directory... is there a
> separate build process for generating the binaries to use under
> l4linux? How can I build ovlscreen and ovltrack for my system?
Ovlscreen is a Xorg driver. When building, you need to specify
the location of your Xorg sources. Please make sure that the
gcc version that you use for compiling the driver matches the
gcc version used for compiling Xorg on your Debian Sarge installation.
> Is Nitpicker required or is it optional? I noticed there is now an
> l4ovlwm, in addition to the nitovlwm binary referenced by the demo cd --
> however, i don't see a nitdope binary that the demo cd references. Has
> this been integrated directly into l4dope, or perhaps no longer supported?
There exists an experimental version of OvlWm for DOpE (at
overlay_wm/server) but I recommend to use Nitpicker.
BTW, Nitpicker + Nitdope is even faster than stand-alone DOpE.
You find Nitdope at l4/pkg/nitpicker/examples/nitdope
It is not built by default (there is a broken tag checked in) but
you should be able to build it after setting the make variables
DOPEDIR and DOPEOBJDIR in nitdope/l4/Makefile.
More information about the l4-hackers