#!/bin/sh
#
-# Automatically select a display configuration based on connected devives
+# Automatically select a display configuration based on connected devices
#
# Stefan Tomanek <stefan.tomanek@wertarbyte.de>
#
# applications about it.
#
#
-# While the script uses xrandr by defult, calling it by the name "autodisper"
+# While the script uses xrandr by default, calling it by the name "autodisper"
# or "auto-disper" forces it to use the "disper" utility, which is useful for
# controlling nvidia chipsets. The formats for fingerprinting the current setup
# and saving/loading the current configuration are adjusted accordingly.
XRANDR=/usr/bin/xrandr
DISPER=/usr/bin/disper
+XDPYINFO=/usr/bin/xdpyinfo
PROFILES=~/.autorandr/
CONFIG=~/.autorandr.conf
}
current_cfg_xrandr() {
- local PRIMARY_SETUP=$(xdpyinfo -ext XINERAMA|awk '/^ head #0:/ {printf $3 $5}')
- $XRANDR -q | awk -v primary_setup=${PRIMARY_SETUP} '
+ local PRIMARY_SETUP="";
+ if [ -x "$XDPYINFO" ]; then
+ PRIMARY_SETUP="$($XDPYINFO -ext XINERAMA | awk '/^ head #0:/ {printf $3 $5}')"
+ fi
+ $XRANDR -q | awk -v primary_setup="${PRIMARY_SETUP}" '
# display is connected and has a mode
/^[^ ]+ connected [^(]/ {
split($3, A, "+");
print "output "$1;
print "mode "A[1];
print "pos "A[2]"x"A[3];
+ if ($4 !~ /^\(/) {
+ print "rotate "$4;
+ }
if (A[1] A[2] "," A[3] == primary_setup)
print "primary";
next;
}
# disconnected or disabled displays
- /^[^ ]+ (dis)?connected / {
+ /^[^ ]+ (dis)?connected / ||
+ /^[^ ]+ unknown connection / {
print "output "$1;
print "off";
next;
-d, --default <profile> make profile <profile> the default profile
--force force (re)loading of a profile
--fingerprint fingerprint your current hardware setup
+--config dump your current xrandr setup
To prevent a profile from being loaded, place a script call "block" in its
directory. The script is evaluated before the screen setup is inspected, and
exit
}
# process parameters
-OPTS=$(getopt -n autorandr -o s:l:d:cfh --long change,default:,save:,load:,force,fingerprint,help -- "$@")
+OPTS=$(getopt -n autorandr -o s:l:d:cfh --long change,default:,save:,load:,force,fingerprint,config,help -- "$@")
if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
eval set -- "$OPTS"
-h|--help) help ;;
--force) FORCE_LOAD=1; shift ;;
--fingerprint) setup_fp; exit 0;;
+ --config) current_cfg; exit 0;;
--) shift; break ;;
*) echo "Error: $1"; exit 1;;
esac