#!/usr/bin/env python3 """ https://askubuntu.com/questions/625761/how-to-change-displays-position-from-command-line """ import re import subprocess import json from pathlib import Path xrandr_reg = re.compile(r"^([\w-]+).+?(\d+x\d+)\+(\d+\+\d+)") config_file = Path.home().joinpath(".config/xrandr_config.json") def get_config(): proc = subprocess.run(["xrandr", "-q"], capture_output=True, encoding="utf8") modes = [] for line in proc.stdout.splitlines(): if match := xrandr_reg.search(line): port, mode, pos = match.groups() pos = pos.replace("+", "x") modes.append((port, mode, pos)) return modes def get_saved_config(): if config_file.exists(): with config_file.open() as fd: return json.load(fd) else: with config_file.open("w") as fd: config = get_config() json.dump(config, fd) return config def set_modes(config): for port, mode, pos in config: cmd = ["xrandr", "--output", port, "--mode", mode, "--pos", pos] subprocess.run(cmd) if __name__ == "__main__": config = get_saved_config() set_modes(config