X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=autorandr.py;h=6d0163c0a4dc9fd1f207865101206dae00915ec1;hb=50b3688814031875c894ae92f7fa616eb7e6c53c;hp=ec159bf6a0b5fc4a85b855f58cfba04b4a371f38;hpb=6b814e115768437778816483dd239774dddb14ee;p=deb_pkgs%2Fautorandr.git diff --git a/autorandr.py b/autorandr.py index ec159bf..6d0163c 100755 --- a/autorandr.py +++ b/autorandr.py @@ -32,6 +32,7 @@ import os import posix import pwd import re +import shlex import subprocess import sys import shutil @@ -52,7 +53,7 @@ if sys.version_info.major == 2: else: import configparser -__version__ = "1.11" +__version__ = "1.12.1" try: input = raw_input @@ -265,17 +266,20 @@ class XrandrOutput(object): "Return the command line parameters for XRandR for this instance" args = ["--output", self.output] for option, arg in sorted(self.options_with_defaults.items()): - if option[:5] == "prop-": + if option.startswith("x-prop-"): prop_found = False for prop, xrandr_prop in [(re.sub(r"\W+", "_", p.lower()), p) for p in properties]: - if prop == option[5:]: + if prop == option[7:]: args.append("--set") args.append(xrandr_prop) prop_found = True break if not prop_found: - print("Warning: Unknown property `%s' in config file. Skipping." % option[5:], file=sys.stderr) + print("Warning: Unknown property `%s' in config file. Skipping." % option[7:], file=sys.stderr) continue + elif option.startswith("x-"): + print("Warning: Unknown option `%s' in config file. Skipping." % option, file=sys.stderr) + continue else: args.append("--%s" % option) if arg: @@ -428,7 +432,7 @@ class XrandrOutput(object): options["rate"] = match["rate"] for prop in [re.sub(r"\W+", "_", p.lower()) for p in properties]: if match[prop]: - options["prop-" + prop] = match[prop] + options["x-prop-" + prop] = match[prop] return XrandrOutput(match["output"], edid, options), modes @@ -645,7 +649,7 @@ def update_profiles_edid(profiles, config): profile_config = profiles[p]["config"] for edid in edid_map: - for c in profile_config.keys(): + for c in list(profile_config.keys()): if profile_config[c].edid != edid or c == edid_map[edid]: continue @@ -755,23 +759,22 @@ def call_and_retry(*args, **kwargs): waits a second and then retries once. This mitigates #47, a timing issue with some drivers. """ - if "dry_run" in kwargs: - dry_run = kwargs["dry_run"] - del kwargs["dry_run"] + if kwargs.pop("dry_run", False): + for arg in args[0]: + print(shlex.quote(arg), end=" ") + print() + return 0 else: - dry_run = False - kwargs_redirected = dict(kwargs) - if not dry_run: if hasattr(subprocess, "DEVNULL"): - kwargs_redirected["stdout"] = getattr(subprocess, "DEVNULL") + kwargs["stdout"] = getattr(subprocess, "DEVNULL") else: - kwargs_redirected["stdout"] = open(os.devnull, "w") - kwargs_redirected["stderr"] = kwargs_redirected["stdout"] - retval = subprocess.call(*args, **kwargs_redirected) - if retval != 0: - time.sleep(1) + kwargs["stdout"] = open(os.devnull, "w") + kwargs["stderr"] = kwargs["stdout"] retval = subprocess.call(*args, **kwargs) - return retval + if retval != 0: + time.sleep(1) + retval = subprocess.call(*args, **kwargs) + return retval def get_fb_dimensions(configuration): @@ -816,10 +819,7 @@ def apply_configuration(new_configuration, current_configuration, dry_run=False) found_left_monitor = False found_top_monitor = False outputs = sorted(new_configuration.keys(), key=lambda x: new_configuration[x].sort_key) - if dry_run: - base_argv = ["echo", "xrandr"] - else: - base_argv = ["xrandr"] + base_argv = ["xrandr"] # There are several xrandr / driver bugs we need to take care of here: # - We cannot enable more than two screens at the same time