Gnome 3.26 won't respect monitors.xml
This GNOME Shell Extension is supposed to fix this issue: https://extensions.gnome.org/extension/1066/fix-multi-monitors/
In case installing this doesn't work, you can also follow http://bernaerts.dyndns.org/linux/74-ubuntu/309-ubuntu-dual-display-monitor-position-lost (archived copy), which suggests deleting your monitors.xml file and let GNOME recreate it.
In case that also doesn't work (my case under Arch Linux after energy saving), install xorg-xrandr
, query your displays via xrandr
and execute the following:
xrandr --output <CON1> --pos 0x0 --output <CON2> --pos 1920x0 --output <CON3> --pos 3840x0
Where is the connection name from xrandr
, for example DVI-0
or DisplayPort-0
, I don't know whether your identifiers from monitor.xml
(DP-1-2 and so on) also work or if they are the same.
The link above also describes how to automate this, I copy it here in case that links goes dead:
/usr/local/sbin/update-monitor-position
#!/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
#
# Parameters :
# $1 : waiting time in sec. before forcing configuration (optional)
#
# Revision history :
# 19/04/2014, V1.0 - Creation by N. Bernaerts
# 10/07/2014, V1.1 - Wait 5 seconds for X to fully initialize
# 01/09/2014, V1.2 - Correct NULL file bug (thanks to Ivan Harmady) and handle rotation
# 07/10/2014, V1.3 - Add monitors size and rate handling (idea from jescalante)
# 08/10/2014, V1.4 - Handle primary display parameter
# 08/12/2014, V1.5 - Waiting time in seconds becomes a parameter
# -------------------------------------------------
# monitor.xml path
MONITOR_XML="$HOME/.config/monitors.xml"
# get number of declared monitors
NUM=$(xmllint --xpath 'count(//monitors/configuration['1']/output)' $MONITOR_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)' $MONITOR_XML 2>/dev/null)
POS_X=$(xmllint --xpath '//monitors/configuration['1']/output['$i']/x/text()' $MONITOR_XML 2>/dev/null)
POS_Y=$(xmllint --xpath '//monitors/configuration['1']/output['$i']/y/text()' $MONITOR_XML 2>/dev/null)
ROTATE=$(xmllint --xpath '//monitors/configuration['1']/output['$i']/rotation/text()' $MONITOR_XML 2>/dev/null)
WIDTH=$(xmllint --xpath '//monitors/configuration['1']/output['$i']/width/text()' $MONITOR_XML 2>/dev/null)
HEIGHT=$(xmllint --xpath '//monitors/configuration['1']/output['$i']/height/text()' $MONITOR_XML 2>/dev/null)
RATE=$(xmllint --xpath '//monitors/configuration['1']/output['$i']/rate/text()' $MONITOR_XML 2>/dev/null)
PRIMARY=$(xmllint --xpath '//monitors/configuration['1']/output['$i']/primary/text()' $MONITOR_XML 2>/dev/null)
# if position is defined for current monitor, add its position and orientation to command line parameters
[ -n "$POS_X" ] && PARAM_ARR=("${PARAM_ARR[@]}" "--output" "$NAME" "--pos" "${POS_X}x${POS_Y}" "--fbmm" "${WIDTH}x${HEIGHT}" "--rate" "$RATE" "--rotate" "$ROTATE")
# if monitor is defined as primary, adds it to command line parameters
[ "$PRIMARY" = "yes" ] && PARAM_ARR=("${PARAM_ARR[@]}" "--primary")
done
# if needed, wait for some seconds (for X to finish initialisation)
[ -n "$1" ] && sleep $1
# position all monitors
xrandr "${PARAM_ARR[@]}"
/usr/share/applications/update-monitor-position.desktop
[Desktop Entry]
Type=Application
Exec=update-monitor-position
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=Update Monitors Position
Name=Update Monitors Position
Comment[en_US]=Force monitors position from monitor.xml
Comment=Force monitors position from monitor.xml
Icon=display
And then execute update-monitor-position.desktop at Startup Applications Preferences.
There is also another guide at http://www.calgorithms.com/blog/2014/07/30/fixing-multiple-monitor-position-in-ubuntu-gnome-14-dot-04/.
Naatan
Updated on September 18, 2022Comments
-
Naatan over 1 year
I'm using Gnome-Shell 3.26 on Arch with 3 monitors (connected through a mini displayport to 3 HDMI hub). This hardware setup has worked fine with earlier versions of the software.
The problem I'm facing is Gnome-Shell just WON'T respect my monitors.xml, I can get it to generate a new monitors.xml just by modifying my display configuration via the gnome settings interface, but as soon as I restart gnome shell (alt-f2: r) the display configuration reset altogether.
This is my monitors.xml:
<monitors version="2"> <configuration> <logicalmonitor> <x>3840</x> <y>0</y> <scale>1</scale> <monitor> <monitorspec> <connector>DP-1-2</connector> <vendor>ACI</vendor> <product>ASUS VS228</product> <serial>C7LMQS146415</serial> </monitorspec> <mode> <width>1920</width> <height>1080</height> <rate>60</rate> </mode> </monitor> </logicalmonitor> <logicalmonitor> <x>1920</x> <y>0</y> <scale>1</scale> <primary>yes</primary> <monitor> <monitorspec> <connector>DP-1-1-2</connector> <vendor>ACI</vendor> <product>VX279</product> <serial>ECLMRS015424</serial> </monitorspec> <mode> <width>1920</width> <height>1080</height> <rate>60</rate> </mode> </monitor> </logicalmonitor> <logicalmonitor> <x>0</x> <y>0</y> <scale>1</scale> <monitor> <monitorspec> <connector>DP-1-1-1</connector> <vendor>ACI</vendor> <product>ASUS VS228</product> <serial>C9LMTF180907</serial> </monitorspec> <mode> <width>1920</width> <height>1080</height> <rate>60</rate> </mode> </monitor> </logicalmonitor> <disabled> <monitorspec> <connector>eDP-1</connector> <vendor>SDC</vendor> <product>0x424a</product> <serial>0x00000000</serial> </monitorspec> </disabled> </configuration> </monitors>
This is the output of
xrandr -q | grep " connected"
eDP-1 connected (normal left inverted right x axis y axis) DP-1-1-1 connected 1920x1080+1920+0 (normal left inverted right x axis y axis) 476mm x 268mm DP-1-1-2 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 598mm x 336mm DP-1-2 connected 1920x1080+3840+0 (normal left inverted right x axis y axis) 476mm x 268mm
Why is my monitors.xml not being respected? Could something be overriding it?