Bagaimana cara menonaktifkan konfigurasi otomatis monitor?

14

Saya menjalankan Ubuntu 16.04 (cabang dev), XFCE sebagai lingkungan desktop.

Komputer saya terhubung ke dua monitor. Satu melalui kabel VGA biasa dan yang lainnya terhubung ke HDMI Switcher. Pengaturan itu berfungsi dengan baik, tetapi setiap kali saya mengubah HDMI Switcher untuk sementara ke koneksi HDMI lain, Xorg mendeteksi bahwa monitor telah diputuskan dan mengkonfigurasi ulang Xorg untuk hanya menggunakan satu monitor, mengalihkan HDMI Switcher kembali ke komputer saya tidak mengaktifkan kembali dual monitor. gunakan salah satu, saya harus secara manual memicu itu denganxrandr

Bagaimana saya bisa mencegah deteksi dan konfigurasi ulang monitor otomatis semacam ini? Saya ingin dapat mengganti HDMI Switcher tanpa komputer melakukan apa pun.

Perintah yang digunakan untuk mengembalikan pengaturan multi-monitor:

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

Output xrandr untuk penggunaan rutin:

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  

output xrandr ketika switcher HDMI dialihkan ke koneksi yang berbeda:

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  

Beberapa hal lagi yang saya coba:

Dengan monitor tersambung temukan modeline:

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

Kemudian dengan monitor dilepas:

$ 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

Ini memungkinkan saya untuk mengaktifkan tampilan ketika terputus, yang jika tidak akan gagal karena mode 1920x1080 tidak ada. Namun masalahnya tetap ada, jika saya mengganti HDMI Switcher, layar akan dinonaktifkan, meskipun saya telah mengaturnya ke mode khusus.

Ini adalah peristiwa udev saat melepaskan koneksi layar dengan HDMI Switcher:

$ 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

Ini adalah peristiwa udev saat mengaktifkan kembali tampilan dengan HDMI Switcher:

$ 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
Grumbel
sumber
Saya berasumsi monitor terdaftar xrandrsaat terhubung kembali? Bisakah Anda memposting output xrandrketika setup sesuai keinginan Anda? kita kemudian dapat dengan mudah mengembalikannya secara otomatis saat terhubung kembali. Juga, apa xrandrperintah Anda untuk " memicu secara manual ".
Jacob Vlijm
Memperbarui pos. Namun saya tidak ingin hanya secara otomatis mengembalikan konfigurasi, saya ingin itu tidak menjadi kacau sejak awal.
Grumbel
Itu kemungkinan besar di luar jangkauan, kecuali jika Anda menemukan driver grafis yang memperbaikinya. Masalah ini disebabkan oleh kenyataan bahwa komunikasi antara pengemudi dan layar Anda gagal saat koneksi, melompat ke default. Anda memerlukan beberapa tindakan, baik dengan tombol pintas atau secara otomatis. Pilihlah, perbaiki kotor atau tidak sama sekali :)
Jacob Vlijm
@ Grumbel, Bisakah Anda menambahkan output sudo lshw -c displayke pertanyaan. Jika Anda memiliki nvidia, coba jawabannya di askubuntu.com/q/858798/26246
user.dz

Jawaban:

2

Ini bukan jawaban akhir, hanya sebuah penunjuk ke arah yang benar. Pada XFCE, xfsettingsdprogram bertanggung jawab untuk menangani RRScreenChangeNotifyperistiwa dan memicu sakelar mode, fungsi yang tepat dapat ditemukan pada xfce4-settings-4.12.0/xfsettingsd/displays.cbaris 77, fungsi ini disebutxfce_displays_helper_screen_on_event . Menonaktifkan fungsi ini akan membuat mode tidak lagi berubah ketika monitor baru terhubung.

Informasi debug dapat diperoleh dengan:

DISPLAY=:0 XFSETTINGSD_DEBUG=512 xfsettingsd --replace --no-daemon
Grumbel
sumber
1
Terima kasih untuk sarannya. Saya menonaktifkan penanganan RRScreenChangeNotify dan itu memperbaiki banyak masalah pada pengaturan saya, termasuk masalah di mana monitor akan bangun segera setelah penangguhan.
Jim Paris
0

Untuk kayu manis dan Gnome lainnya, solusinya dapat ditemukan di sini :

Kayu manis:

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

Gnome:

gsettings set org.gnome.settings-daemon.plugins.xrandr active false
Grumbel
sumber