import gui
# for auto-config: common names of internal connectors
-commonInternalConnectorNames = ['LVDS', 'LVDS1']
+commonInternalConnectorNames = ['LVDS', 'LVDS0', 'LVDS1', 'LVDS-0', 'LVDS-1']
# Load a section-less config file: maps parameter names to space-separated lists of strings (with shell quotation)
def loadConfigFile(file):
connectors = {} # map of connector names to a list of resolutions
connector = None # current connector
for line in p.stdout:
+ # screen?
+ m = re.search(r'^Screen [0-9]+: ', line)
+ if m is not None: # ignore this line
+ connector = None
+ continue
# new connector?
- m = re.search(r'^([\w]+) (dis)?connected ', line)
+ m = re.search(r'^([\w\-]+) (dis)?connected ', line)
if m is not None:
connector = m.groups()[0]
assert connector not in connectors
if m is not None:
assert connector is not None
connectors[connector].append((int(m.groups()[0]), int(m.groups()[1])))
+ continue
+ # unknown line
+ raise Exception("Unknown line in xrandr output:\n"+line)
+ # be sure to always proprly finish up with the xrandr
p.communicate()
+ # if everything succeededso far, check return code
if p.returncode != 0: raise Exception("Querying xrandr for data failed.")
return connectors
strRatio = '16:%d' % ratio
return '%dx%d (%s)' %(w, h, strRatio)
-def findAvailableConnector(tryConnectors):
+def findAvailableConnector(tryConnectors, allConnectors):
for connector in tryConnectors:
- if connector in connectors and connectors[connector]: # if the connector exists and is active (i.e. there is a resolution)
+ if connector in allConnectors and allConnectors[connector]: # if the connector exists and is active (i.e. there is a resolution)
return connector
return None
raise Exception("Connector %s does not exist, there is an error in your config file." % internalConnector)
else:
# auto-config
- internalConnector = findAvailableConnector(commonInternalConnectorNames)
+ internalConnector = findAvailableConnector(commonInternalConnectorNames, connectors)
if internalConnector is None:
raise Exception("Could not automatically find internal connector, please use ~/.dsl.conf to specify it manually.")
# all the rest is external then, obviously - unless the user wants to do that manually
externalConnectors = config['externalConnectors']
for connector in externalConnectors:
if not connector in connectors:
- raise Exception("Connector %s does not exist, there is an error in your config file." % internalConnector)
+ raise Exception("Connector %s does not exist, there is an error in your config file." % connector)
+ if connector == internalConnector:
+ raise Exception("%s is both internal and external, that doesn't make sense." % connector)
else:
externalConnectors = connectors.keys()
externalConnectors.remove(internalConnector)
args[c] = ["--off"]
# Check what to do
- usedExternalConnector = findAvailableConnector(externalConnectors) # *the* external connector which is actually used
+ usedExternalConnector = findAvailableConnector(externalConnectors, connectors) # *the* external connector which is actually used
if usedExternalConnector is not None: # there's an external screen connected, we need to ask what to do
internalResolutions = connectors[internalConnector]
externalResolutions = connectors[usedExternalConnector]