#!/usr/bin/python

import os
import sys
import subprocess
import time
import signal

background = '/usr/share/backgrounds/warty-final-ubuntu.png'

class DM:
    def __init__(self, vt, display):
        self.vt = vt
        self.display = display

    def run(self, *program):
        null = open('/dev/null', 'w')
        logfile = open('/var/log/oem-config.log', 'w')

        server = subprocess.Popen(['X', '-br', '-ac', '-noreset', self.vt, self.display], stdin=null, stdout=logfile, stderr=logfile)

        os.environ['DISPLAY'] = self.display

        time.sleep(5)

        if os.access(background, os.R_OK):
            import gtk
            pixbuf = gtk.gdk.pixbuf_new_from_file(background)
            root = gtk.gdk.get_default_root_window()
            (root_width, root_height) = root.get_size()
            scaled = pixbuf.scale_simple(root_width, root_height, gtk.gdk.INTERP_BILINEAR)
            (pixmap, mask) = scaled.render_pixmap_and_mask(0)
            root.set_back_pixmap(pixmap, False)
            root.clear()
            gtk.gdk.flush()

        wm = subprocess.Popen(['/usr/bin/metacity', '--sm-disable'], stdin=null, stdout=logfile, stderr=logfile)

        greeter = subprocess.Popen(program, stdin=null, stdout=logfile, stderr=logfile)
        ret = greeter.wait()

        os.kill(wm.pid, signal.SIGTERM)
        wm.wait()
        os.kill(server.pid, signal.SIGTERM)
        server.wait()

        if ret is not None and ret >= 0:
            return ret
        else:
            return 1

if len(sys.argv) < 3:
    sys.stderr.write('Usage: oem-config-dm <vt[1-N]> <:[0-N]> <program> [<arguments>]\n')
    sys.exit(1)

vt, display = sys.argv[1:3]
dm = DM(vt, display)
sys.exit(dm.run(*sys.argv[3:]))
