Cool utility of the week: xpra
At work we’re going to be transitioning to a new VPN solution pretty soon, one which has a rather obnoxious limitation around reuse of IP addresses. This has a specifically BAD effect on ssh sessions, in that we can’t keep them going when we reconnect.
I’ve been casting around for something that would let me get past this; the conventional solution is to run ‘screen’, which is all well and good except it has no gui capability as far as I can determine.
Enter, therefore, xpra – described by its inventor as screen for X. Just what I was looking for, really.
To build it you need Cython, I didn’t install Cython but just set PYTHONPATH to include it before running xpra’s setup.py:
$ PYTHONPATH=/path/to/cython/dir:$PYTHONPATH python setup.py install --prefix /path/where/I/want/xpra/installed
To run it you need to have Xvfb installed, too.
Once I’d figured out that I needed to add
import os sys.path.insert(os.path.realpath(os.path.join(os.path.dirname(__file__), "../lib/python")))
AND add a symlink in lib
from python to python2.6 (doofus!), I was able to run xpra from wherever, without setting PYTHONPATH first. [For reference, I've added this info to http://xpra.org/trac/ticket/79].
So .. all hail xpra! I startup a session on $usefulhost inside the VPN connection, export my DISPLAY and then whatever gui tools I need will use that X display. On my system at home, I attach to the host:display and then every utility I’ve got running with that display pops up on my local screen.
usefulhost $ ~/bin/xpra start :200 [...] usefulhost $ DISPLAY=:200 ; export DISPLAY usefulhost $ filemerge & usefulhost $ /usr/bin/packagemanager &
mylocalhost $ ~/bin/xpra attach ssh:remotehost:200
Falling off a log isn’t as easy as this.