#!/usr/bin/python # -*- coding: utf-8 -*- # # Copyright (C) 2005-2008 TUBITAK/UEKAE # # This program is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # Please read the COPYING file. import os import sys import optparse import dbus import zorg import zorg.probe from zorg.consts import package_sep from zorg.utils import * zorg_info = " Xorg AutoConfiguration tool" class ComarLink: def __init__(self): self.bus = None self.iface = None def __getattr__(self, method): if not self.iface: self._connect() return getattr(self.iface, method) def _connect(self): if os.getuid() != 0: print "You must be root to use this tool." sys.exit(1) self.bus = dbus.SystemBus() object = self.bus.get_object("tr.org.pardus.comar", "/package/zorg", introspect=False) self.iface = dbus.Interface(object, "tr.org.pardus.comar.Xorg.Display") link = ComarLink() def safe(): if link.safeConfig(): print "Initialized a safe configuration using VESA driver." else: print "Failed to create a safe configuration with VESA driver." def probe(opts): if force or not xisrunning(): if link.initialConfig(): print "Created an initial configuration for your video device." else: print "An error occured while creating an initial configuration." else: print "Not probing since X server is running." def setDriver(driver): # shortcuts for packages shortcuts = { "fglrx": "fglrx/ati-drivers", "nvidia-old": "nvidia/nvidia-drivers-old", "nvidia": "nvidia/nvidia-drivers", "nvidia-new": "nvidia/nvidia-drivers-new" } if shortcuts.has_key(driver): driver = shortcuts[driver] if package_sep in driver: drv, pkg = driver.split(package_sep, 1) if pkg.replace("-", "_") not in zorg.probe.listDriverPackages(): print "Package is not installed: %s" % pkg sys.exit(1) else: if not zorg.probe.driverExists(driver): print "Driver not found: %s" % driver sys.exit(1) args = {"driver": driver} link.setPendingConfig(args) if force or not xisrunning(): link.applyPendingConfig() print "Driver changed to %s." % driver else: print "Changes will be applied when you restart your X server." force = False if __name__ == "__main__": parser = optparse.OptionParser(description = "%s version %s" % (zorg_info, zorg.versionString())) parser.add_option("-s", "--safe", action="store_true", dest="safe", default=False, help="setup VESA 800x600 config without probing hardware") parser.add_option("-p", "--probe", action="store_true", dest="probe", default=False, help="force probing all devices, even if xorg.conf exists") parser.add_option("-d", "--driver", action="store", type="string", dest="driver", default=None, metavar="DRIVER[%sPACKAGE]" % package_sep, help="set video card driver to DRIVER") parser.add_option("-f", "--force", action="store_true", dest="force", default=False, help="force probing even if the X server is running") parser.add_option("", "--remove-pending", action="store_true", dest="removePending", default=False, help="remove pending configuration data") parser.add_option("-k", "--keymap", action="store", type="string", dest="keymap", default=None, metavar="LAYOUT[/VARIANT]", help="changes keyboard map") opts, args = parser.parse_args() force = opts.force if opts.safe: safe() elif opts.probe: probe(opts) elif opts.driver: setDriver(opts.driver) elif opts.removePending: link.removePendingConfig() print "Pending configurations removed." elif opts.keymap: keymap = opts.keymap.split("/", 1) link.setKeymap(*keymap) else: parser.print_help()