From 7c604e2f650be4b97209babf741b9c23141a0ad1 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Mon, 20 Aug 2012 17:52:42 +0200 Subject: [PATCH 1/1] add support for several external connectors (of which only one is used) --- external_screen.py | 43 +++++++++++++++++++++++++++---------------- selector_window.py | 4 ++-- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/external_screen.py b/external_screen.py index 01c744b..5474685 100755 --- a/external_screen.py +++ b/external_screen.py @@ -42,39 +42,50 @@ def res2user(res): return '%dx%d (%s)' %(w, h, strRatio) # Check screen setup -internalName = "LVDS" -externalName = "CRT1" +internalName = "LVDS1" +externalNames = ["HDMI1", "VGA1"] connectors = getXrandrInformation() internalResolutions = connectors[internalName] # there must be a screen assoicated to the internal connector -externalResolutions = connectors.get(externalName) +externalName = None # *the* external connector which is actually used +externalResolutions = None # resultions of the external connector +args = {} # maps connector names to xrand arguments + +# look for enabled external screen, disable all the others +for name in externalNames: + if externalResolutions is None and name in connectors: + externalName = name + externalResolutions = connectors[name] + else: + args[name] = ["--off"] # Check what to do -if externalResolutions is not None: # we need to ask what to do - extPosition = PositionSelection(map(res2user, internalResolutions), map(res2user, externalResolutions)) +if externalName is not None: # we need to ask what to do + extPosition = PositionSelection(externalName, map(res2user, internalResolutions), map(res2user, externalResolutions)) extPosition.exec_() if not extPosition.result(): sys.exit(1) # the user canceled extResolution = res2xrandr(externalResolutions[extPosition.extResolutions.currentIndex()]) intResolution = res2xrandr(internalResolutions[extPosition.intResolutions.currentIndex()]) # build command-line - externalArgs = ["--mode", extResolution] # we definitely want an external screen + args[externalName] = ["--mode", extResolution] # we definitely want an external screen if extPosition.extOnly.isChecked(): - internalArgs = ["--off"] - externalArgs += ["--primary"] + args[internalName] = ["--off"] + args[externalName] += ["--primary"] else: # there are two screens - internalArgs = ["--mode", intResolution] + args[internalName] = ["--mode", intResolution] if extPosition.posLeft.isChecked(): - externalArgs += ["--left-of", internalName] + args[externalName] += ["--left-of", internalName] else: - externalArgs += ["--right-of", internalName] + args[externalName] += ["--right-of", internalName] if extPosition.primExt.isChecked(): - externalArgs += ["--primary"] + args[externalName] += ["--primary"] else: - internalArgs += ["--primary"] + args[internalName] += ["--primary"] else: - internalArgs = ["--mode", res2xrandr(internalResolutions[0]), "--primary"] - externalArgs = ["--off"] + args[internalName] = ["--mode", res2xrandr(internalResolutions[0]), "--primary"] # and do it -call = ["xrandr", "--output", internalName] + internalArgs + ["--output", externalName] + externalArgs +call = ["xrandr"] +for name in args: + call += ["--output", name] + args[name] print "Call that will be made:",call subprocess.check_call(call) diff --git a/selector_window.py b/selector_window.py index adee7e4..7df0a44 100644 --- a/selector_window.py +++ b/selector_window.py @@ -14,10 +14,10 @@ class PositionSelection(QtGui.QDialog): RIGHT = 20 EXTERNAL_ONLY = 30 - def __init__(self, internalResolutions, externalResolutions): + def __init__(self, externalName, internalResolutions, externalResolutions): # set up main window super(PositionSelection, self).__init__() - self.setWindowTitle('External screen setup') + self.setWindowTitle('External screen setup (connector: %s)' % externalName) # position selection posBox = QtGui.QGroupBox('Position of external screen', self) -- 2.30.2