81 lines
2 KiB
Bash
81 lines
2 KiB
Bash
|
#!/bin/sh
|
||
|
|
||
|
# stateful script to manage dual monitor setups
|
||
|
# c
|
||
|
|
||
|
read_cfg() {
|
||
|
if [ -f ~/.config/xrandr ]; then
|
||
|
. ~/.config/xrandr
|
||
|
fi
|
||
|
if [ -z "${PRIMARY_MONITOR}" ]; then
|
||
|
PRIMARY_MONITOR=$(get_default_monitor)
|
||
|
fi
|
||
|
if [ -z "${SECONDARY_MONITOR}" ]; then
|
||
|
SECONDARY_MONITOR=$(get_default_monitor)
|
||
|
fi
|
||
|
if [ -z "${MONITOR_RELATION}" ]; then
|
||
|
MONITOR_RELATION="solo"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
show_cfg() {
|
||
|
printf "PRIMARY_MONITOR=${PRIMARY_MONITOR}\n"
|
||
|
printf "SECONDARY_MONITOR=${SECONDARY_MONITOR}\n"
|
||
|
printf "MONITOR_RELATION=${MONITOR_RELATION}\n"
|
||
|
}
|
||
|
|
||
|
get_default_monitor() {
|
||
|
xrandr --listmonitors | grep -v ^Monitors | head -n 1 | awk '{print $NF}'
|
||
|
}
|
||
|
|
||
|
apply_monitor_cfg() {
|
||
|
xrandr --output ${PRIMARY_MONITOR} --auto --primary
|
||
|
if [ ${PRIMARY_MONITOR} != ${SECONDARY_MONITOR} ]; then
|
||
|
case ${MONITOR_RELATION} in
|
||
|
solo)
|
||
|
xrandr --output ${SECONDARY_MONITOR} --off ;;
|
||
|
left_of|right_of|above|below)
|
||
|
xrandr --output ${SECONDARY_MONITOR} --auto ${MONITOR_RELATION} ${PRIMARY_MONITOR} ;;
|
||
|
esac
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
helpme() {
|
||
|
printf "$0 [list | setup | primary [NAME] | secondary [NAME] | relation [NAME] | reconfigure]\n"
|
||
|
printf " commands:\n"
|
||
|
printf " list: show monitor info\n"
|
||
|
printf " setup: show current setup\n"
|
||
|
printf " primary: set primary monitorp\n"
|
||
|
printf " secondary: set secondary monitor\n"
|
||
|
printf " relation: set monitor relation\n"
|
||
|
printf " reconfigure: set monitor config based on the relation\n"
|
||
|
printf " relations:\n"
|
||
|
printf " solo: disable secondary monitor if different from primary\n"
|
||
|
printf " left_of,right_of,above,below: secondary monitor has named relation to primary\n"
|
||
|
}
|
||
|
|
||
|
read_cfg
|
||
|
|
||
|
case "$1" in
|
||
|
list)
|
||
|
xrandr --listmonitors ;;
|
||
|
setup)
|
||
|
show_cfg ;;
|
||
|
primary)
|
||
|
PRIMARY_MONITOR=${2}
|
||
|
show_cfg > ~/.config/xrandr
|
||
|
;;
|
||
|
secondary)
|
||
|
SECONDARY_MONITOR=${2}
|
||
|
show_cfg > ~/.config/xrandr
|
||
|
;;
|
||
|
relation)
|
||
|
MONITOR_RELATION=${2}
|
||
|
show_cfg > ~/.config/xrandr
|
||
|
;;
|
||
|
reconfigure)
|
||
|
apply_monitor_cfg ;;
|
||
|
*)
|
||
|
helpme
|
||
|
esac
|