#!/bin/bash # ------------------------------------------------- # Get monitors configuration from monitor.xml and apply it for current user session. # In case of multiple definitions in monitor.xml only first one is used. # # See http://bernaerts.dyndns.org/linux/74-ubuntu/309-ubuntu-dual-display-monitor-position-lost # for instructions # # Revision history : # 19/04/2014, V1.0 - Creation by N. Bernaerts # 10/07/2014, V1.1 - Wait 5 seconds for X to fully initialize # 30/07/2014, V1.2 - K. Callenberg added handling of primary monitor setting # ------------------------------------------------- # get number of declared monitors NUM=$(xmllint --xpath 'count(//monitors/configuration['1']/output)' $HOME/.config/monitors.xml) # loop thru declared monitors to create the command line parameters for (( i=1; i<=$NUM; i++)); do # get attributes of current monitor (name and x & y positions) NAME=$(xmllint --xpath 'string(//monitors/configuration['1']/output['$i']/@name)' $HOME/.config/monitors.xml 2>NULL) POS_X=$(xmllint --xpath '//monitors/configuration['1']/output['$i']/x/text()' $HOME/.config/monitors.xml 2>NULL) POS_Y=$(xmllint --xpath '//monitors/configuration['1']/output['$i']/y/text()' $HOME/.config/monitors.xml 2>NULL) PRIMARY=$(xmllint --xpath '//monitors/configuration['1']/output['$i']/primary/text()' $HOME/.config/monitors.xml 2>NULL) # if position is defined for current monitor, add its position to command line parameters if [ "$PRIMARY" == "yes" ] ; then [ -n "$POS_X" ] && PARAM_ARR=("${PARAM_ARR[@]}" "--output" "$NAME" "--primary" "--pos" "${POS_X}x${POS_Y}") else [ -n "$POS_X" ] && PARAM_ARR=("${PARAM_ARR[@]}" "--output" "$NAME" "--pos" "${POS_X}x${POS_Y}") fi done # wait for 5 seconds (for X to finish initialisation) sleep 5 #echo "${PARAM_ARR[@]}" # position all monitors xrandr "${PARAM_ARR[@]}"