e82e60f71b
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
65 lines
1.7 KiB
Python
Executable File
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)
|
|
|