From antoine at nagafix.co.uk Fri Apr 8 16:24:14 2011 From: antoine at nagafix.co.uk (Antoine Martin) Date: Fri, 08 Apr 2011 22:24:14 +0700 Subject: [winswitch] using the dummy driver instead of Xvfb: get the goodies! Message-ID: <4D9F289E.6000105@nagafix.co.uk> Hi, I've just added support for running Xpra against Xorg with the dummy driver rather than using Xvfb. You can find the (beta) source here: http://winswitch.org/src/xpra-0.0.7.19-rc1.tar.bz2 The main benefit is that we don't need to reserve a very large screen and hope for the best, we can resize the screen as needed. When a client connection is accepted, the server will find the best resolution suitable for this particular client and re-size the dummy screen. Obviously, if the server is running against Xvfb (which does not support XRandr) the old behaviour still applies. We also get a proper, supported Xorg server (Xvfb being unmaintained), with the ability to load extensions: GL, etc. Unfortunately... there are some constraints: * The current version of the dummy driver upstream has some ridiculously low limits (2048x2048). I have sent a patch which increases it to (32767x32767), then we have to wait for distributors to pick it up... In the meantime I have built some "fixed" RPMs for Fedora (13,14,15 and rawhide) which you can find here: http://winswitch.org/dists/rpm/Fedora/ * The Xorg server does not allow the user to specify the config file to use or the log file location when not running as root... which would make it pretty useless for using with xpra .. if it wasn't for Xdummy. Xdummy uses LD_PRELOAD tricks to fool the Xorg process and allow us to bypass these restrictions. Ideally, we can work something out with upstream Xorg to lift these restriction somehow (they may be appropriate when running against real hardware - but they are counter productive when using dummy) In order to use this, you will need Xdummy, which you can find here: http://www.karlrunge.com/x11vnc/Xdummy Caveats... xpra passes arguments that aren't valid for a regular Xorg server. There is also the fact that Xdummy is an all-in-one shell script with embedded C code. So, I've extracted the useful bits and made a wrapper script which takes care of trimming the arguments. You can find it all here: https://winswitch.org/trac/browser/contrib-src/Xdummy The instructions in the README file are for winswitch (svn version). To use it with plain xpra just use: xpra --xvfb=/usr/local/bin/Xdummy-xpra start :500 You will also need an Xorg dummy config file, you can use winswitch's: https://winswitch.org/trac/browser/trunk/skel/share/winswitch/xorg-xdummy-xpra.conf Other goodies worth thinking about: the nvidia propriatary driver apparently supports a "display none" mode which means that it can be used with a single xpra session to provide GPU acceleration. Could be interesting to those with powerful workstation/desktops who want to display 3D applications to a remote screen. This should also work with VNC (when using vnc.so against a real server) and with the new GStreamer screen streaming I've added to winswitch. Ideally, the code could just create new modes as required rather than finding the nearest match. After all, dummy can use almost any dimensions as long as enough memory is allocated. As for the memory, it may be possible to get the dummy to allocate memory on demand rather than using the fixed value from the config file. Although the unused memory can be swapped out, freeing it would be much efficient/cleaner. Finally, if the client resizes its screen whilst a session is connected, the server won't know about it. This will need to be added (not particularly hard - just needs doing) Comments and feedback welcome. Cheers Antoine