import sys
import shutil
import time
+import glob
from collections import OrderedDict
from distutils.version import LooseVersion as Version
else:
import configparser
-__version__ = "1.8.1"
+__version__ = "1.9"
try:
input = raw_input
""".strip()
+def is_closed_lid(output):
+ if not re.match(r'(eDP(-?[0-9]\+)*|LVDS(-?[0-9]\+)*)', output):
+ return False
+ lids = glob.glob("/proc/acpi/button/lid/*/state")
+ if len(lids) == 1:
+ state_file = lids[0]
+ with open(state_file) as f:
+ content = f.read()
+ return "close" in content
+ return False
+
+
class AutorandrException(Exception):
def __init__(self, message, original_exception=None, report_bug=False):
self.message = message
if output_modes:
modes[output_name] = output_modes
+ # consider a closed lid as disconnected if other outputs are connected
+ if sum(o.edid != None for o in outputs.values()) > 1:
+ for output_name in outputs.keys():
+ if is_closed_lid(output_name):
+ outputs[output_name].edid = None
+
return outputs, modes
if os.path.isfile(setup_path) and not forced:
raise AutorandrException('Refusing to overwrite config "{}" without passing "--force"!'.format(profile_name))
- with open(os.path.join(profile_path, "config"), "w") as config:
+ with open(config_path, "w") as config:
output_configuration(configuration, config)
- with open(os.path.join(profile_path, "setup"), "w") as setup:
+ with open(setup_path, "w") as setup:
output_setup(configuration, setup)
"PROFILE_FOLDER": profile_folder,
"MONITORS": ":".join(enabled_monitors(config)),
})
+ except AutorandrException as e:
+ raise e
except Exception as e:
- if isinstance(e, AutorandrException):
- raise e
- else:
- raise AutorandrException("Failed to save current configuration as profile '%s'" % (options["--save"],), e)
+ raise AutorandrException("Failed to save current configuration as profile '%s'" % (options["--save"],), e)
print("Saved current configuration as profile '%s'" % options["--save"])
sys.exit(0)