#!/bin/sh # displayset.sh [lcd|dualext] # # After issuing displayset.sh lcd: # - The LCD panel is turned on and both external monitors are turned off # - All windows are maximized and have no title bar, to maximize real estate # - All non-dialog new windows will become maximized # # After issuing displayset.sh dualext: # - The LCD panel is turned off and both external monitors are turned on # - All windows are unmaximized # - New windows will start normally, not maximized # # Window positions on the dual external monitors are not retained when switching # to lcd and back to dualext. Specifically, the windows all end up on the # primary external display. # # Requires: xrandr (x11-xserver-utils), wmctrl, and maximus # Change these settings according to the display configuration LCD=LVDS1 LCD_MODE=1280x800 EXT1=HDMI1 EXT1_MODE=1600x1200 EXT1_POS=1600x0 EXT2=VGA1 EXT2_MODE=1600x1200 EXT2_POS=0x0 winlist() { wmctrl -l | sed -e 's/^\(0x[0-9a-f]*\) .*$/\1/' } maximus_no_maximize() { # Setting undecorate to true will cause the window manager to eventually # minimize all windows asynchronously, with little way for the script to know # when all of that is done to restore the windows with wmctrl -k off. The # solution is to leave /apps/maximus/undecorate always set to true. gconftool -t bool -s /apps/maximus/no_maximize $1 } current_maximize() { for win in $(winlist); do wmctrl -i -r $win -b add,maximized_vert,maximized_horz done } current_unmaximize() { for win in $(winlist); do wmctrl -i -r $win -b remove,maximized_vert,maximized_horz done } lcd() { # Turn off one of the external monitors first so the LCD can come on. The # graphics card will ony support two output devices at a time. xrandr --output $EXT1 --off xrandr --output $EXT1 --off --output $EXT2 --off --output DP1 --off \ --output $LCD --mode $LCD_MODE --pos 0x0 --rotate normal maximus_no_maximize false current_maximize } dualext() { # Turn off the LCD before turning on the second external monitor. The # graphics card will ony support two output devices at a time. xrandr --output $EXT1 --mode $EXT1_MODE --pos $EXT1_POS --rotate normal xrandr --output $LCD --off --output DP1 --off xrandr --output $EXT1 --mode $EXT1_MODE --pos $EXT1_POS --rotate normal \ --output $LCD --off --output DP1 --off \ --output $EXT2 --mode $EXT2_MODE --pos $EXT2_POS --rotate normal maximus_no_maximize true current_unmaximize } # MAIN if [ "$1" = "lcd" ]; then lcd elif [ "$1" = "dualext" ]; then dualext else echo "usage: $0 [lcd|dualext]" >&2 exit 1 fi