diff options
Diffstat (limited to 'xorg-xrandr/setres/__main__.py')
-rwxr-xr-x | xorg-xrandr/setres/__main__.py | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/xorg-xrandr/setres/__main__.py b/xorg-xrandr/setres/__main__.py new file mode 100755 index 0000000..26f6f65 --- /dev/null +++ b/xorg-xrandr/setres/__main__.py @@ -0,0 +1,225 @@ +#!/usr/bin/env python3 + +import sys, os, pwd +from subprocess import Popen, PIPE + +from get import * +from set import * + +args = sys.argv[1:] +home = os.environ['HOME'] if 'HOME' in os.environ else pwd.getpwuid(os.getuid()).pw_dir +session_ = os.environ['SESSION_'] if 'SESSION_' in os.environ else '' +hostname = os.uname().nodename.lower() + +t = lambda lopt, sopt : any(arg in args for arg in (lopt, '-' + lopt, '--' + lopt, sopt, '-' + sopt)) + +mirror = t('mirror', 'm') +swap = t('swap', 's') +tv = t('tv', 't') +wide = t('wide', 'w') +crt = t('crt', 'c') +large = t('large', 'l') +single = t('single', '1') +pretend = t('pretend', 'P') + +[screen] = get_setup() +ok = False + +if pretend: + def apply_setup(display): + print(repr(display.to_xrandr())) + return True + + + +### Configurations + + +if hostname == 'zenith': + prime = screen['DisplayPort-2' if not swap else 'DisplayPort-1'] + sec = screen['DisplayPort-1' if not swap else 'DisplayPort-2'] + embed = None + + prime_alt = None + sec_alt = None + + prime.want_mode = '1920x1200' + sec.want_mode = '1920x1200' + + +else: + print('%s: no configurations found for this machine' % sys.argv[0], file = sys.stderr) + sys.exit(1) + +if not prime.connected and prime_alt is not None: + prime, prime_alt = prime_alt, prime +if not sec.connected and sec_alt is not None: + sec, sec_alt = sec_alt, sec + + +if large: + prime.want_mode = '1792x1344' + sec.want_mode = '1792x1344' + +if crt: + prime.want_mode = '800x600' + sec.want_mode = '800x600' + +if wide: + prime.want_mode = '1920x1080' + sec.want_mode = '1920x1080' + +if tv: + sec.want_mode = '1920x1080' + + +if prime is not None: + prime.want_rate = prime.best_rate(prime.want_mode) +if sec is not None: + sec.want_rate = sec.best_rate(sec.want_mode) +if embed is not None: + embed.want_rate = embed.best_rate(embed.want_mode) + + + + +if '+prime' in args: + prime.connected = True +if '+sec' in args: + sec.connected = True +if '+embed' in args: + embed.connected = True + +if '-prime' in args: + prime.connected = False +if '-sec' in args: + sec.connected = False +if '-embed' in args: + embed.connected = False + + + + +### Apply + +if prime.connected and sec.connected and not single: + display = Display() + ok = True + + output = Output(prime.name) + display.outputs.append(output) + output.mode = prime.want_mode + output.rate = prime.want_rate + output.primary = True + output.relpos = None + output.relto = None + + output = Output(sec.name) + display.outputs.append(output) + output.mode = sec.want_mode + output.rate = sec.want_rate + output.primary = False + output.relpos = 'left-of' if not mirror else 'same-as' + output.relto = prime.name + + if embed is not None: + output = Output(embed.name) + display.outputs.append(output) + output.off = True + + +elif prime.connected: + display = Display() + ok = True + + output = Output(prime.name) + display.outputs.append(output) + output.mode = prime.want_mode + output.rate = prime.want_rate + output.primary = True + + output = Output(sec.name) + display.outputs.append(output) + output.off = True + + if embed is not None: + output = Output(embed.name) + display.outputs.append(output) + output.off = True + + +elif sec.connected: + display = Display() + ok = True + + output = Output(sec.name) + display.outputs.append(output) + output.mode = sec.want_mode + output.rate = sec.want_rate + output.primary = True + + output = Output(prime.name) + display.outputs.append(output) + output.off = True + + if embed is not None: + output = Output(embed.name) + display.outputs.append(output) + output.off = True + + +elif embed is None or not embed.connected: + print('%s: don\'t know how to configure' % sys.argv[0], file = sys.stderr) + + +else: + display = Display() + ok = True + + output = Output(embed.name) + display.outputs.append(output) + output.mode = embed.want_mode + output.rate = embed.want_rate + output.primary = True + + output = Output(prime.name) + display.outputs.append(output) + output.off = True + + output = Output(sec.name) + display.outputs.append(output) + output.off = True + +if ok: + if prime_alt is not None: + output = Output(prime_alt.name) + display.outputs.append(output) + output.off = True + + if sec_alt is not None: + output = Output(sec_alt.name) + display.outputs.append(output) + output.off = True + + ok = apply_setup(display) + + + +### Epilogue + +if not ok: + sys.exit(1) +if pretend: + sys.exit(0) + +[screen] = get_setup() +prime = screen[True] +if prime.position[0] > 0: + print(prime.position[0], flush = True) + +for file in ('%s/.config/background.%s' % (home, session_), '%s/.config/background' % home): + if os.path.exists(file): + try: + os.execlp('xwallpaper', 'xwallpaper', '--zoom', file) + except: + pass |