Exemplo n.º 1
0
    def __init__(self):
        self.link = comar.Link()
        self.link.setLocale()
        self.link.useAgent()
        self.package = self.getMainPackage()

        self.ext = NVInterface()
        print "NVCTRL" if self.ext.ready else "RANDR", "extension will be used to get hardware info."
        if not self.ext.ready:
            self.ext = RRInterface()

        self.readConfig()
Exemplo n.º 2
0
    def __init__(self):
        self.link = comar.Link()
        self.link.setLocale()
        self.link.useAgent()
        self.package = self.getMainPackage()

        self.ext = NVInterface()
        print "NVCTRL" if self.ext.ready else "RANDR", "extension will be used to get hardware info."
        if not self.ext.ready:
            self.ext = RRInterface()

        self.readConfig()
Exemplo n.º 3
0
class Interface:
    def __init__(self):
        self.link = comar.Link()
        self.link.setLocale()
        self.link.useAgent()
        self.package = self.getMainPackage()

        self.ext = NVInterface()
        print "NVCTRL" if self.ext.ready else "RANDR", "extension will be used to get hardware info."
        if not self.ext.ready:
            self.ext = RRInterface()

        self.readConfig()

    def readConfig(self):
        self._bus = self.link.Xorg.Display["zorg"].activeDeviceID()
        self._info = zorg.config.getDeviceInfo(self._bus)

        if not self._info:
            self._ready = False
            return

        self._ready = True
        self.cardVendor, self.cardModel = idsQuery(self._info.vendor_id,
                                                   self._info.product_id)
        self.monitors = self._info.monitors

    def isReady(self):
        return self._ready

    def listenSignals(self, func):
        self.link.listenSignals("X.Y", func)

    def getPackages(self):
        """
            List of packages that provide Xorg.Display model
        """
        return list(self.link.Xorg.Display)

    def getMainPackage(self):
        """
            Display Settings tool is heavily zorg dependent.
        """
        return "zorg"

    def safeConfig(self):
        self.link.Xorg.Display["zorg"].safeConfig()

    def query(self):
        self.ext.query()

    def getConfig(self):
        return self._info

    def listDrivers(self):
        return map(str, self.link.Xorg.Display["zorg"].listDrivers())

    def getDriver(self):
        return self._info.driver if self._info.driver else ""

    def setDriver(self, driver):
        if driver == self.getDriver():
            return

        self.link.Xorg.Display["zorg"].setDriver(driver)

    def getDepth(self):
        return self._info.depth

    def setDepth(self, depth):
        if depth == self.getDepth():
            return

        self.link.Xorg.Display["zorg"].setDepth(depth)

    def getOutputs(self):
        outputs = self.ext.getOutputs()
        if outputs:
            return outputs
        else:
            return [Output("default")]

    def setOutput(self, name, enabled=None, ignored=None):
        output = self._info.outputs.get(name)
        if output:
            if enabled is None:
                enabled = output.enabled

            if ignored is None:
                ignored = output.ignored
        else:
            if enabled is None:
                enabled = True

            if ignored is None:
                ignored = True

        self.link.Xorg.Display["zorg"].setOutput(name, enabled, ignored)

    def setMonitor(self, outputName, vendor, model, hsync, vref):
        self.link.Xorg.Display["zorg"].setMonitor(outputName, vendor, model, \
                                                    hsync, vref)

    def removeMonitor(self, outputName):
        self.link.Xorg.Display["zorg"].setMonitor(outputName, "", "", "", "")

    def getGeometry(self, output):
        return self.ext.getGeometry(output)

    def getModes(self, outputName):
        return MODES

    def setMode(self, outputName, mode, rate):
        self.link.Xorg.Display["zorg"].setMode(outputName, mode, rate)

    def getRates(self, outputName, mode):
        return ["60", "70", "75", "85"] if mode else []

    def setRotation(self, outputName, rotation):
        self.link.Xorg.Display["zorg"].setOrientation(outputName, rotation, "")

    def setSimpleLayout(self, left, right, cloned):
        self.link.Xorg.Display["zorg"].setPosition(left, "", "")

        if right:
            pos = "" if cloned else "RightOf"
            arg = "" if cloned else left
            self.link.Xorg.Display["zorg"].setPosition(right, pos, arg)

    def sync(self):
        self.link.Xorg.Display["zorg"].syncConfigs()
        self.readConfig()

    def applyNow(self):
        if not isinstance(self.ext, RRInterface):
            return

        cloned = False
        for output in self._info.outputs.values():
            if output.ignored:
                continue

            if output.right_of or output.below:
                break

        else:
            cloned = True

        cmd = ["xrandr"]

        for output in self._info.outputs.values():
            if output.ignored:
                continue

            cmd += ["--output", output.name]

            if not output.enabled:
                cmd.append("--off")
                continue

            if output.mode:
                cmd += ["--mode", output.mode]
            else:
                cmd.append("--auto")

            if output.refresh_rate:
                cmd += ["--rate", output.refresh_rate]

            cmd += ["--rotation", output.rotation or "normal"]

            if output.right_of:
                cmd += ["--right-of", output.right_of]

            if output.below:
                cmd += ["--below", output.below]

            if cloned:
                cmd += ["--pos", "0x0"]

        subprocess.call(cmd)
Exemplo n.º 4
0
class Interface:
    def __init__(self):
        self.link = comar.Link()
        self.link.setLocale()
        self.link.useAgent()
        self.package = self.getMainPackage()

        self.ext = NVInterface()
        print "NVCTRL" if self.ext.ready else "RANDR", "extension will be used to get hardware info."
        if not self.ext.ready:
            self.ext = RRInterface()

        self.readConfig()

    def readConfig(self):
        self._bus = self.link.Xorg.Display["zorg"].activeDeviceID()
        self._info = zorg.config.getDeviceInfo(self._bus)

        if not self._info:
            self._ready = False
            return

        self._ready = True
        self.cardVendor, self.cardModel = idsQuery(self._info.vendor_id,
                                                   self._info.product_id)
        self.monitors = self._info.monitors

    def isReady(self):
        return self._ready

    def listenSignals(self, func):
        self.link.listenSignals("X.Y", func)

    def getPackages(self):
        """
            List of packages that provide Xorg.Display model
        """
        return list(self.link.Xorg.Display)

    def getMainPackage(self):
        """
            Display Settings tool is heavily zorg dependent.
        """
        return "zorg"

    def safeConfig(self):
        self.link.Xorg.Display["zorg"].safeConfig()

    def query(self):
        self.ext.query()

    def getConfig(self):
        return self._info

    def listDrivers(self):
        return map(str, self.link.Xorg.Display["zorg"].listDrivers())

    def getDriver(self):
        return self._info.driver if self._info.driver else ""

    def setDriver(self, driver):
        if driver == self.getDriver():
            return

        self.link.Xorg.Display["zorg"].setDriver(driver)

    def getDepth(self):
        return self._info.depth

    def setDepth(self, depth):
        if depth == self.getDepth():
            return

        self.link.Xorg.Display["zorg"].setDepth(depth)

    def getOutputs(self):
        outputs = self.ext.getOutputs()
        if outputs:
            return outputs
        else:
            return [Output("default")]

    def setOutput(self, name, enabled=None, ignored=None):
        output = self._info.outputs.get(name)
        if output:
            if enabled is None:
                enabled = output.enabled

            if ignored is None:
                ignored = output.ignored
        else:
            if enabled is None:
                enabled = True

            if ignored is None:
                ignored = True

        self.link.Xorg.Display["zorg"].setOutput(name, enabled, ignored)

    def setMonitor(self, outputName, vendor, model, hsync, vref):
        self.link.Xorg.Display["zorg"].setMonitor(outputName, vendor, model, \
                                                    hsync, vref)

    def removeMonitor(self, outputName):
        self.link.Xorg.Display["zorg"].setMonitor(outputName, "", "", "", "")

    def getGeometry(self, output):
        return self.ext.getGeometry(output)

    def getModes(self, outputName):
        return MODES

    def setMode(self, outputName, mode, rate):
        self.link.Xorg.Display["zorg"].setMode(outputName, mode, rate)

    def getRates(self, outputName, mode):
        return ["60", "70", "75", "85"] if mode else []

    def setRotation(self, outputName, rotation):
        self.link.Xorg.Display["zorg"].setOrientation(outputName, rotation, "")

    def setSimpleLayout(self, left, right, cloned):
        self.link.Xorg.Display["zorg"].setPosition(left, "", "")

        if right:
            pos = "" if cloned else "RightOf"
            arg = "" if cloned else left
            self.link.Xorg.Display["zorg"].setPosition(right, pos, arg)

    def sync(self):
        self.link.Xorg.Display["zorg"].syncConfigs()
        self.readConfig()

    def applyNow(self):
        if not isinstance(self.ext, RRInterface):
            return

        cloned = False
        for output in self._info.outputs.values():
            if output.ignored:
                continue

            if output.right_of or output.below:
                break

        else:
            cloned = True

        cmd = ["xrandr"]

        for output in self._info.outputs.values():
            if output.ignored:
                continue

            cmd += ["--output", output.name]

            if not output.enabled:
                cmd.append("--off")
                continue

            if output.mode:
                cmd += ["--mode", output.mode]
            else:
                cmd.append("--auto")

            if output.refresh_rate:
                cmd += ["--rate", output.refresh_rate]

            cmd += ["--rotation", output.rotation or "normal"]

            if output.right_of:
                cmd += ["--right-of", output.right_of]

            if output.below:
                cmd += ["--below", output.below]

            if cloned:
                cmd += ["--pos", "0x0"]

        subprocess.call(cmd)