Hmm, I suppose this sounds like a really daft thing to do - why would you want to run a graphics application on a system without a GUI? Here are a few use cases:
- you manage a remote Unix server hosted abroad and of course it is headless and has no use for a Graphics environment
- you do have a full-blown Desktop system which has a working Xserver but for some sessions - possibly spawned by a root process - there is no access to the Xserver; you can emulate this with the following sequence entered into an xterm: i.e. su to root and then to another user - this final session will have lost access to the Xserver
- you need to run a graphic tool designed to be called from the command-line; it still needs a GUI environment because it requires access to GUI elements perhaps to generate a graphics file. Lazy programming? Maybe, but that does not fix your problem
su - su - username
In my particular case I needed to run a command that need a GTK environment to generate a graphic image; the command was launched from a Zope application which in turn had been launched as a root service and ultimately it was designed to be run as a facility on a webserver. So I was hit by all these issues.
Ordinarily it should be possible to address issue 2 with some trickery with xhost and Xauthority but even this seems to be non-trivial. I had already identified Xvfb-server as a long-term solution to the first problem and fortunately those good folks on the Interweb were able to point me at a complete solution which does not even require an X server to be running all the time. Instead a virtual server can be created on the fly and brought down when it is finished with. All achieved by the script
Kudos to darvasan for getting this together and making it easily available. On my SuSE 11.3 system, the script failed to run complaining with
mktemp: too few X's in template 'Xauthority'
which was resolved by editing the script as follows:
- AUTHFILE=$(mktemp -p "$XVFB_RUN_TMPDIR" Xauthority) + AUTHFILE=$(mktemp -p "$XVFB_RUN_TMPDIR" Xauthority.XXXXXXXX)
Kudos for that one goes to olesen, an almost anonymous dude on Red Hat Bugzilla.
So having installed the Xvfb server you can now execute the following:
and provided your script finishes cleanly and doesn't get stuck in a GUI dialogue, you are back at a prompt.