connector = None # current connector
for line in p.stdout:
# new connector?
- m = re.search('^([\w]+) connected ', line)
+ m = re.search(r'^([\w]+) connected ', line)
if m is not None:
connector = m.groups()[0]
assert connector not in connectors
connectors[connector] = []
continue
# new resolution?
- m = re.search('^ ([\d]+x[\d]+) +', line)
+ m = re.search(r'^ ([\d]+)x([\d]+) +', line)
if m is not None:
assert connector is not None
- connectors[connector].append(int(m.groups()[0]))
+ connectors[connector].append((int(m.groups()[0]), int(m.groups()[1])))
+ p.communicate()
+ if p.returncode != 0: raise Exception("Querying xrandr for data failed")
return connectors
+def res2str(res):
+ (w, h) = res
+ return str(w)+'x'+str(h)
+
# Check screen setup
internalName = "LVDS"
externalName = "CRT1"
externalResolutions = connectors.get(externalName)
# Check what to do
-internalArgs = ["--mode", internalResolutions[0]] # there must be a resolution for the internal screen
+internalArgs = ["--mode", res2str(internalResolutions[0])] # there must be a resolution for the internal screen
externalArgs = ["--off"]
if externalResolutions is not None: # we need to ask what to do
- extPosition = PositionSelection(externalResolutions)
+ extPosition = PositionSelection(map(res2str, externalResolutions))
extPosition.exec_()
if not extPosition.result(): sys.exit(1) # the user canceled
# build command-line
else:
externalArgs += ["--right-of", internalName]
# and do it
-args = ["--output", internalName] + internalArgs + ["--output", externalName] + externalArgs
-print args
-subprocess.check_call(["xrandr"] + args)
+call = ["xrandr", "--output", internalName] + internalArgs + ["--output", externalName] + externalArgs
+print "Call that will be made:",call
+subprocess.check_call(call)