Starting a New X Server
This is one of those posts that is mostly for me, so the next time I need to do this I don’t have to spend 30 minutes googling obscure config file formats. (Incidentally, I had to google and muck with styles for at least 30 minutes to figure out how to keep wordpress from mangling my code snippets.)
I sometimes find it useful to start an extra X server to run a particular application. Full-screen games are a good example. Ordinarily, a full-screen game grabs the display and there is no way to switch back to the desktop without exiting the game completely. When run in its own X server though, it is easy to switch between servers. The following shell script shows how to do this:
#!/bin/bash display=:1 authfile=$HOME/.Xauthority if ! xauth list "$display" | grep "$display " >/dev/null 2>&1; then xauth add $display . `mcookie` removelist="$display" fi xinit /usr/bin/xterm -- $display -auth $authfile -nolisten tcp if [ -n "$removelist" ] ; then xauth remove $removelist fi
This script will start a new X server on the next available virtual terminal (normally vt8) using display :1
and launch an xterm. Toggle between the servers using ctrl-alt-F7
and ctrl-alt-F8
. When the xterm exits, so does the X server.
If you try to run this code on a Debian-based system, though, you will get the following error:
X: user not authorized to run the X server, aborting. xinit: Server error.
I found this out the hard way when I started using ubuntu. This is because Debian uses a wrapper to start the X server, which enforces tighter security constraints by default. To get this to work, you will need to edit the /etc/X11/Xwrapper.config
file, and change this line:
allowed_users=console
to this:
allowed_users=anybody
Check the man page for Xwrapper.config
for more options; there aren’t very many. Personally, I don’t consider this a security risk for a single-user home system.