Automatic Display Switching on Resume
Automatic Display Switching on Resume
I have a T410s and a Mini Dock 3 Plus and wanted Ubuntu 10.04 to automatically switch to the external monitor on resume if it is connected. However, gnome-power-manager and gnome-display-manager can't do this correctly currently and therefore I have written a script to automate this.
The following script should be saved in the file /etc/pm/sleep.d/10_activate_monitor and does the following on resume:
- If any external monitor is attached, activate it (the first monitor from the list EXTERNALS), and disable the internal monitor if the lid is closed.
- If no external monitor is attached, activate the internal monitor.
#!/bin/bash . /usr/share/acpi-support/power-funcs INTERNAL="LVDS1" EXTERNALS="VGA1 HDMI1 DP1 HDMI2 HDMI3 DP2 DP3" case "$1" in thaw|resume) for x in /tmp/.X11-unix/*; do displaynum=`echo $x | sed s#/tmp/.X11-unix/X##` getXuser; grep -q closed /proc/acpi/button/lid/*/state LID_CLOSED=$? if [ x"$XAUTHORITY" != x"" ]; then export DISPLAY=":$displaynum" INTERNAL_STATE=$(xrandr | grep ^$INTERNAL | grep " con" | sed "s/.*connected//" | sed "s/ //" | sed "s/ .*//g") for I in $EXTERNALS; do EXTERNAL=$I EXTERNAL_STATE=$(xrandr | grep ^$EXTERNAL | grep " con" | sed "s/.*connected//" | sed "s/ //" | sed "s/ .*//g") if [ ! \( -z "$EXTERNAL_STATE" \) ]; then break; fi done logger -t "pm-utils-custom-display" "$INTERAL -- $INTERNAL_STATE :: $EXTERNAL -- $EXTERNAL_STATE" if [ ! \( -z "$EXTERNAL_STATE" \) ]; then logger -t "pm-utils-custom-display" "Activating external display" if [ $LID_CLOSED = 0 ]; then xrandr --output $INTERNAL --off; fi xrandr --output $EXTERNAL --auto else logger -t "pm-utils-custom-display" "Activating internal display" xrandr --output $INTERNAL --auto xrandr --output $EXTERNAL --off fi fi done ;; *) exit $NA ;; esac exit 0