#!/usr/bin/python # Copyright 2011 Lars Wirzenius # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import cliapp import subprocess class Disp(cliapp.Application): def runcmd(self, *args): p = subprocess.Popen(args, stdout=subprocess.PIPE) out, err = p.communicate('') if p.returncode: raise Exception('command failed') return out def hpixels(self, mode): return int(mode.split('x')[0]) def process_args(self, args): monitors = [] best = None mode = None s = self.runcmd('xrandr', '-q') current = None for line in s.splitlines(): w = line.split() if w[1] == 'connected': monitors.append(w[0]) current = w[0] elif line.startswith(' '): if not mode or self.hpixels(mode) < self.hpixels(w[0]): best = current mode = w[0] if not monitors: raise Exception('No monitors') args = ['xrandr', '--output', best, '--mode', mode] for m in monitors: if m != best: args += ['--output', m, '--same-as', best] self.runcmd(*args) Disp().run()