モニターの自動構成を無効にする方法は?


14

Ubuntu 16.04(devブランチ)、XFCEをデスクトップ環境として実行しています。

コンピューターは2つのモニターに接続されています。1つは通常のVGAケーブル経由で、もう1つはHDMIスイッチャーに接続されます。その設定は正常に機能しますが、HDMIスイッチャーを一時的に別のHDMI接続に変更するたびに、Xorgはモニターが切断されたことを検出し、Xorgが単一のモニターのみを使用するように再構成しますどちらかを使用して、手動でそれをトリガーする必要がありますxrandr

この種の自動モニター検出と再構成が行われないようにするにはどうすればよいですか?コンピューターが何もしなくても、HDMIスイッチャーを切り替えられるようにしたいと思います。

マルチモニター設定の復元に使用されるコマンド:

xrandr \
 --output HDMI-1 \
   --mode "1920x1080" \
   --panning "1920x1080+1280+0/0x0+0+0" \
 --output DVI-1-I \
   --mode "1280x1024" \
   --panning "1280x1024/0x0+0+0"

通常使用時のxrandr出力:

Screen 0: minimum 320 x 200, current 3200 x 1080, maximum 8192 x 8192
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 connected 1920x1080+1280+0 (normal left inverted right x axis y axis) 443mm x 249mm panning 1920x1080+1280+0
   1920x1080     60.00*+  60.00    50.00    59.94    59.93  
   1920x1080i    60.00    50.00    59.94  
   1680x1050     59.95    59.88  
   1600x1024     60.17  
   1400x1050     74.76    70.00    59.98  
   1280x1024     75.02    60.02  
   1440x900      59.89    59.90  
   1280x960      60.00  
   1360x768      59.80    59.96  
   1280x800      59.91  
   1152x864      75.00    75.00    70.00    60.00  
   1280x720      60.00    50.00    59.94  
   1024x768      60.04    75.03    70.07    60.00  
   960x720       75.00    60.00  
   928x696       75.00    60.05  
   896x672       75.05    60.01  
   960x600       60.00  
   832x624       74.55  
   960x540       59.99  
   800x600       75.00    70.00    65.00    60.00    72.19    75.00    60.32    56.25  
   840x525       74.96    69.88    60.01    59.88  
   720x576       50.00  
   800x512       60.17  
   700x525       74.76    70.06    59.98  
   720x480       60.00    59.94  
   640x512       75.02    60.02  
   720x450       59.89  
   640x480       60.00    72.81    75.00    66.67    60.00    59.94  
   720x400       70.08  
   680x384       59.80    59.96  
   576x432       75.00    75.00    70.00    60.06  
   512x384       75.03    70.07    60.00  
   416x312       74.66  
   400x300       72.19    75.12    60.32    56.34  
   320x240       72.81    75.00    60.05  
DVI-I-1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 359mm x 287mm
   1280x1024     60.02*+  75.02  
   1280x960      60.00  
   1280x800      74.93    59.81  
   1152x864      75.00  
   1280x768      74.89    59.87  
   1280x720      60.00  
   1024x768      75.08    75.03    70.07    60.00  
   1024x576      59.97  
   832x624       74.55  
   800x600       72.19    75.00    70.01    60.32    56.25  
   848x480       60.00  
   640x480       75.00    72.81    66.67    60.00  
   720x400       70.08  

HDMIスイッチャーが別の接続に切り替えられたときのxrandr出力:

Screen 0: minimum 320 x 200, current 1280 x 1024, maximum 8192 x 8192
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)
DVI-I-1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 359mm x 287mm
   1280x1024     60.02*+  75.02  
   1280x960      60.00  
   1280x800      74.93    59.81  
   1152x864      75.00  
   1280x768      74.89    59.87  
   1280x720      60.00  
   1024x768      75.08    75.03    70.07    60.00  
   1024x576      59.97  
   832x624       74.55  
   800x600       72.19    75.00    70.01    60.32    56.25  
   848x480       60.00  
   640x480       75.00    72.81    66.67    60.00  
   720x400       70.08  

私が試したいくつかのこと:

モニターを接続した状態でモードラインを見つけます:

$ xvidtune -show 
"1920x1080"   148.50   1920 2008 2052 2200   1080 1084 1089 1125 -hsync +vsync

次に、モニターを切断した状態で:

$ xrandr --newmode "1920x1080-new"   148.50   1920 2008 2052 2200   1080 1084 1089 1125 -hsync +vsync
$ xrandr --addmode HDMI-1 1920x1080-new
$ xrandr --output HDMI-1 --mode 1920x1080-new

これにより、切断時にディスプレイをアクティブにすることができます。そうしないと、1920x1080モードが存在しないために失敗します。ただし、HDMIスイッチャーを切り替えると、カスタムモードに設定していても、ディスプレイが無効になります。

これは、HDMIスイッチャーでディスプレイを切断するときのudevイベントです:

$ udevadm monitor --property
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

KERNEL[41678.571099] change   /devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
MAJOR=226
MINOR=0
SEQNUM=3248
SUBSYSTEM=drm

UDEV  [41678.573432] change   /devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
ID_FOR_SEAT=drm-pci-0000_01_00_0
ID_PATH=pci-0000:01:00.0
ID_PATH_TAG=pci-0000_01_00_0
MAJOR=226
MINOR=0
SEQNUM=3248
SUBSYSTEM=drm
TAGS=:uaccess:master-of-seat:seat:
USEC_INITIALIZED=31279519

これは、HDMIスイッチャーでディスプレイを再度有効にするときのudevイベントです。

$ udevadm monitor --property
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

KERNEL[41696.104481] change   /devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
MAJOR=226
MINOR=0
SEQNUM=3249
SUBSYSTEM=drm

UDEV  [41696.105685] change   /devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
ID_FOR_SEAT=drm-pci-0000_01_00_0
ID_PATH=pci-0000:01:00.0
ID_PATH_TAG=pci-0000_01_00_0
MAJOR=226
MINOR=0
SEQNUM=3249
SUBSYSTEM=drm
TAGS=:seat:master-of-seat:uaccess:
USEC_INITIALIZED=31279519

$ sudo lshw -c display
  *-display                 
       description: VGA compatible controller
       product: Redwood XT [Radeon HD 5670/5690/5730]
       vendor: Advanced Micro Devices, Inc. [AMD/ATI]
       physical id: 0
       bus info: pci@0000:01:00.0
       version: 00
       width: 64 bits
       clock: 33MHz
       capabilities: pm pciexpress msi vga_controller bus_master cap_list rom
       configuration: driver=radeon latency=0
       resources: irq:55 memory:c0000000-cfffffff memory:fea20000-fea3ffff ioport:e000(size=256) memory:c0000-dffff

xrandr再接続するとモニターが表示されると思いますか?xrandrセットアップが好きなときに出力を投稿できますか?その後、簡単に再接続時に自動的に復元することができます。また、xrandr手動でトリガー」するコマンドは何ですか
ジェイコブVlijm 16年

投稿を更新しました。ただし、構成を自動的に復元するだけではなく、そもそも混乱しないようにします。
グリュンベル

それを修正するグラフィックスドライバーを見つけない限り、ほとんど手が届かないでしょう。この問題は、接続時にドライバーと画面間の通信が失敗し、デフォルトにジャンプするという事実が原因で発生します。ショートカットキーまたは自動で何らかのアクションが必要です。あなたの好きなものを作り、すべての:)で汚れたりないそれを修正
ヤコブVlijm

@Grumbel、sudo lshw -c display質問にの出力を追加してもらえますか。nvidiaがある場合は、askubuntu.com
q /

回答:


2

これは最終的な答えではなく、正しい方向への指針にすぎません。XFCEでは、xfsettingsdプログラムはRRScreenChangeNotifyイベントの処理とモード切り替えのトリガーを担当します。正確な関数はxfce4-settings-4.12.0/xfsettingsd/displays.c77行目で見つかり、関数が呼び出されxfce_displays_helper_screen_on_eventます。この機能を無効にすると、新しいモニターが接続されたときにモードが変更されなくなります。

デバッグ情報は次の方法で取得できます。

DISPLAY=:0 XFSETTINGSD_DEBUG=512 xfsettingsd --replace --no-daemon

1
提案をありがとう。RRScreenChangeNotifyの処理を無効にし、セットアップの多くの問題を修正しました。これには、モニターがサスペンドした直後に起動する問題が含まれます。
ジムパリ

0

他のCinnamonとGnomeについては、こちらで解決策を見つけることができます

シナモン:

gsettings set org.cinnamon.settings-daemon.plugins.xrandr active false

ノーム:

gsettings set org.gnome.settings-daemon.plugins.xrandr active false
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.