gnome-shell/scripts/start-in-Xephyr
Owen Taylor e82e60f71b Don't override XAUTHORITY until after we run Xephyr
Don't override the setting of XAUTHORITY when running Xephyr,
since then we may not be able to connect to the host display.
Instead pass in the local auth file via the -auth command
line argument.

An alternate fix would be to use 'xauth merge' to merge the
existing XAUTHORITY file into our local file.

svn path=/trunk/; revision=29
2008-11-03 21:39:41 +00:00

65 lines
1.7 KiB
Python
Executable File

#!/usr/bin/python
import os
import random
import shutil
import signal
import subprocess
import sys
import tempfile
import time
from launcher import Launcher
launcher = Launcher()
# GL_EXT_texture_from_pixmap doesn't work in Xepyhr
launcher.set_use_tfp(False)
# Temporary directory to hold our X credentials
tmpdir = tempfile.mkdtemp("", "gnome-shell.")
try:
display = ":" + str(random.randint(10, 99))
xauth_file = os.path.join(tmpdir, "database")
# Create a random 128-byte key and format it as hex
f = open("/dev/urandom", "r")
key = f.read(16)
f.close()
hexkey = "".join(("%02x" % ord(byte) for byte in key))
# Store that in an xauthority file as the key for connecting to our Xephyr
retcode = subprocess.call(["xauth",
"-f", xauth_file,
"add", display, "MIT-MAGIC-COOKIE-1", hexkey])
if retcode != 0:
raise RuntimeError("xauth failed")
# Launch Xephyr
xephyr = subprocess.Popen(["Xephyr", display,
"-auth", xauth_file,
"-screen", "800x600",
"-host-cursor"])
os.environ['DISPLAY'] = display
os.environ['XAUTHORITY'] = xauth_file
# Wait for server to get going: LAME
time.sleep(1)
# Start xterm to have some window in our session
subprocess.Popen(["xterm"])
subprocess.Popen(["xlogo"])
subprocess.Popen(["xeyes"])
# Now launch metacity-clutter with our plugin
shell = launcher.start_shell()
# Wait for Xephyr to exit
try:
retcode = xephyr.wait()
except KeyboardInterrupt, e:
os.kill(xephyr.pid, signal.SIGKILL)
finally:
shutil.rmtree(tmpdir)