diff options
author | Lars Wirzenius <liw@liw.fi> | 2011-02-14 21:59:13 +0000 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2011-02-14 21:59:13 +0000 |
commit | 663963bc958268c861a1b9e25c960c1c8586db4f (patch) | |
tree | a3e7772e2e4d0288ba59d5c98e1c9845e9850b31 | |
parent | 3779e403cf657c41c776612a2eb3e48f2d590e75 (diff) | |
download | liw-automation-663963bc958268c861a1b9e25c960c1c8586db4f.tar.gz |
Rewrite disp to work with any output monitors.
-rwxr-xr-x | scripts/disp | 88 |
1 files changed, 63 insertions, 25 deletions
diff --git a/scripts/disp b/scripts/disp index ed33a58..375bada 100755 --- a/scripts/disp +++ b/scripts/disp @@ -1,25 +1,63 @@ -#!/bin/sh - -set -e - -temp="$(mktemp)" -xrandr -q > "$temp" -awk ' - BEGIN { - printf "xrandr " - } - $2 == "connected" { - what = $1 - res = "" - } - /^ [0-9]/ && what != "" { - printf "--output %s --mode %s ", what, $1 - if (what == "LVDS1") printf "--same-as VGA1 " - what ="" - } - END { - printf "\n" - } -' "$temp" | sh - -rm -f "$temp" +#!/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 <http://www.gnu.org/licenses/>. + + +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] + + print args + self.runcmd(*args) + + +Disp().run() |