Gnome 3.26 respektiert monitors.xml nicht

Gnome 3.26 respektiert monitors.xml nicht

Ich verwende Gnome-Shell 3.26 auf Arch mit 3 Monitoren (über einen Mini-Displayport mit 3 HDMI-Hubs verbunden). Diese Hardwarekonfiguration hat mit früheren Versionen der Software problemlos funktioniert.

Mein Problem besteht darin, dass die Gnome-Shell meine Datei „monitors.xml“ einfach NICHT respektiert. Ich kann sie dazu bringen, eine neue Datei „monitors.xml“ zu generieren, indem ich einfach meine Anzeigekonfiguration über die Gnome-Einstellungsschnittstelle ändere. Sobald ich die Gnome-Shell jedoch neu starte (Alt-F2: R), wird die Anzeigekonfiguration vollständig zurückgesetzt.

Dies ist meine 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>

Dies ist die Ausgabe vonxrandr -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

Warum wird meine Datei „monitors.xml“ nicht beachtet? Könnte sie durch etwas außer Kraft gesetzt werden?

Antwort1

Diese GNOME-Shell-Erweiterung soll dieses Problem beheben:https://extensions.gnome.org/extension/1066/fix-multi-monitors/

Falls die Installation nicht funktioniert, können Sie auchhttp://bernaerts.dyndns.org/linux/74-ubuntu/309-ubuntu-dual-display-monitor-position-lost(Archivierte Kopie), was vorschlägt, Ihre monitors.xml-Datei zu löschen und sie von GNOME neu erstellen zu lassen.

Falls das auch nicht funktioniert (in meinem Fall unter Arch Linux nach dem Energiesparen), installieren Sie xorg-xrandr, fragen Sie Ihre Displays über ab xrandrund führen Sie Folgendes aus:

xrandr  --output <CON1> --pos 0x0 --output <CON2> --pos 1920x0 --output <CON3> --pos 3840x0

xrandrWoher kommt beispielsweise der Verbindungsname von DVI-0oder DisplayPort-0, ich weiß nicht, ob deine Kennungen von monitor.xml(DP-1-2 usw.) auch funktionieren bzw. gleich sind.

Der obige Link beschreibt auch, wie man dies automatisiert. Ich kopiere ihn hierher, falls der Link nicht mehr funktioniert:

/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

Und führen Sie dann update-monitor-position.desktop aus unterVoreinstellungen für Startanwendungen.

Einen weiteren Leitfaden gibt es auch unterhttp://www.calgorithms.com/blog/2014/07/30/fixing-multiple-monitor-position-in-ubuntu-gnome-14-dot-04/.

verwandte Informationen