質問: gnome3.26はmonitors.xmlを尊重しません archでgnome-shell3.26を3台のモニター(ミニディスプレイポートを介して3台のhdmiハブに接続)で使用しています。このハードウェア設定は、以前のバージョンのソフトウェアで正常に機能しました。私が直面している問題はgnomeです-shellはmonitors.xmlを尊重しません。gnome設定インターフェイスを介して表示構成を変更するだけで、新しいmonitors.xmlを生成できますが、gnomeを再起動するとすぐにシェル(alt-f2:r)は、表示構成を完全にリセットします。これは私の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> これは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 私のmonitors.xmlが尊重されないのはなぜですか?何かがそれを上書きしている可能性がありますか?
回答: このgnomeshell extensionは、この問題を修正することになっています: https://extensions.gnome.org/extension/1066/fix-multi-monitors/ これをインストールしても機能しない場合は、次の手順に従うこともできます http://bernaerts.dyndns.org/linux/74-ubuntu/309-ubuntu-dual-display-monitor-position-lost ( アーカイブされたコピー )。これは、monitors.xmlファイルを削除し、gnomeに再作成させることを提案します。それも機能しない場合(省エネ後のarch linuxでの私の場合)、xorg-xrandrをインストールし、xrandrを介してディスプレイにクエリを実行し、以下を実行します。xrandr --output <con1> --pos 0x0 --output <con2> --pos 1920x0 --output <con3> --pos 3840x0 xrandrからの接続名はどこにありますか(例:dvi-0またはdisplayport-0)、monitor.xmlからの識別子(dp-1-2など)かどうかはわかりません)も機能するか、同じかどうか。上記のリンクは、これを自動化する方法も説明しています。リンクが切れた場合に備えて、ここにコピーします。/ 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 次に、スタートアップアプリケーション設定でupdate-monitor-position.desktopを実行します。 http://www.calgorithms.com/blog/2014/07/30/fixing-multiple-monitor-position-in-ubuntu-gnome-14-dot-04/ にも別のガイドがあります。 =。