64 lines
1.8 KiB
Bash
Executable File
64 lines
1.8 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
DISPMANAGE_EXT_PORT_ID_PREFIX="DisplayPort"
|
|
DISPMANAGE_LAPTOP_ID="eDP"
|
|
DISPMANAGE_LAPTOP_MODE='"1920x1280_60.00"'
|
|
|
|
non_primary_monitors_off() {
|
|
xrandr |
|
|
grep -v "^Screen" |
|
|
grep -v "^\s" |
|
|
grep -v "primary" |
|
|
while IFS="\n " read -r target_mon_id remaining_text; do
|
|
xrandr --output "$target_mon_id" --off
|
|
done
|
|
}
|
|
|
|
solo_monitor_mode() {
|
|
mode_id="--auto"
|
|
[ "$1" = "$DISPMANAGE_LAPTOP_ID" ] &&
|
|
[ -n "$DISPMANAGE_LAPTOP_MODE" ] &&
|
|
mode_id="--mode $DISPMANAGE_LAPTOP_MODE"
|
|
echo "$mode_id" | xargs xrandr --output "$1" --primary
|
|
non_primary_monitors_off
|
|
! [ "$2" = "--quiet" ] && echo "display-manage: solo monitor mode, $1"
|
|
}
|
|
|
|
primary_mon_id=""
|
|
case "$1" in
|
|
(l | laptop)
|
|
primary_mon_id="$DISPMANAGE_LAPTOP_ID"
|
|
;;
|
|
(e | external)
|
|
primary_mon_id=$(
|
|
xrandr |
|
|
grep "^$DISPMANAGE_EXT_PORT_ID_PREFIX.*\sconnected" |
|
|
sed -n "1p" |
|
|
sed -E "s/^([^ ]+).*$/\1/g"
|
|
)
|
|
;;
|
|
# for one-off/special cases; just set things explicitly here and exit
|
|
# (c1 | case1)
|
|
# xrandr --output DisplayPort-1 --primary --auto \
|
|
# --output HDMI-1 --auto \
|
|
# --output eDP --auto --same-as DisplayPort-1
|
|
# exit 0
|
|
# ;;
|
|
esac
|
|
|
|
[ -z "$primary_mon_id" ] &&
|
|
echo "display-manage: target monitor not detected or not configured; using laptop" &&
|
|
solo_monitor_mode "$DISPMANAGE_LAPTOP_ID" &&
|
|
exit 0
|
|
|
|
case "$2" in
|
|
(m | mirror)
|
|
solo_monitor_mode "$primary_mon_id" --quiet
|
|
xrandr --output "$DISPMANAGE_LAPTOP_ID" --auto --same-as "$primary_mon_id"
|
|
echo "display-manage: $primary_mon_id monitor, primary; laptop monitor, mirror"
|
|
;;
|
|
(*)
|
|
solo_monitor_mode "$primary_mon_id"
|
|
;;
|
|
esac
|