วิธีปิดการใช้งานการกำหนดค่าอัตโนมัติของจอภาพ


14

ฉันกำลังใช้ Ubuntu 16.04 (สาขา dev), XFCE เป็นสภาพแวดล้อมเดสก์ทอป

คอมพิวเตอร์ของฉันเชื่อมต่อกับจอภาพสองจอแล้ว สายหนึ่งผ่านสาย VGA ปกติและอีกสายหนึ่งเชื่อมต่อกับ HDMI Switcher การตั้งค่านั้นใช้งานได้ดี แต่ทุกครั้งที่ฉันเปลี่ยน HDMI Switcher เป็นการเชื่อมต่อ HDMI อื่นชั่วคราว Xorg ตรวจพบว่าจอภาพได้ถูกตัดการเชื่อมต่อและตั้งค่า Xorg ใหม่ให้ใช้จอภาพเดียวเท่านั้นการสลับ HDMI Switcher กลับไปที่คอมพิวเตอร์ของฉัน ใช้อย่างใดอย่างหนึ่งฉันต้องเรียกด้วยตนเองว่าด้วยxrandr

ฉันจะป้องกันไม่ให้การตรวจจับอัตโนมัติของจอภาพชนิดนี้และกำหนดค่าใหม่เกิดขึ้นได้อย่างไร ฉันต้องการสลับ HDMI Switcher โดยไม่ต้องใช้คอมพิวเตอร์ทำอะไร

คำสั่งที่ใช้เพื่อกู้คืนการตั้งค่าหลายจอภาพ:

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  

xrandr เอาท์พุทเมื่อ HDMI switcher ถูกสลับเป็นการเชื่อมต่ออื่น:

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 Switcher จอแสดงผลจะปิดการใช้งานแม้ว่าฉันจะตั้งเป็นโหมดที่กำหนดเองก็ตาม

นี่เป็นเหตุการณ์ที่เกิดขึ้นเมื่อถอดการเชื่อมต่อจอแสดงผลด้วย 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

นี่คือเหตุการณ์ udev เมื่อเปิดใช้งานการแสดงผลอีกครั้งด้วย 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

ฉันถือว่าหน้าจออยู่ในรายการxrandrเมื่อทำการเชื่อมต่อใหม่? คุณสามารถโพสต์ผลลัพธ์ของxrandrการตั้งค่าได้ตามที่คุณต้องการหรือไม่? จากนั้นเราสามารถทำการกู้คืนโดยอัตโนมัติเมื่อทำการเชื่อมต่อใหม่ นอกจากนี้xrandrคำสั่งของคุณที่จะ " เรียกใช้ด้วยตนเอง " คืออะไร
Jacob Vlijm

อัปเดตโพสต์แล้ว อย่างไรก็ตามฉันไม่ต้องการกู้คืนการกำหนดค่าโดยอัตโนมัติฉันต้องการให้มันไม่ได้รับความสับสนตั้งแต่แรก
Grumbel

นั่นเป็นเรื่องที่ไกลเกินเอื้อมเว้นแต่คุณจะพบไดรเวอร์กราฟฟิกที่แก้ไขได้ ปัญหาเกิดจากข้อเท็จจริงที่ว่าการสื่อสารระหว่างไดรเวอร์และหน้าจอของคุณล้มเหลวในการเชื่อมต่อข้ามไปที่ค่าเริ่มต้น คุณต้องดำเนินการบางอย่างไม่ว่าจะโดยทางลัดหรืออัตโนมัติ ทำการเลือกของคุณแก้ไขมันสกปรกหรือไม่เลย :)
Jacob Vlijm

@ Grumbel คุณสามารถเพิ่มผลลัพธ์ของsudo lshw -c displayคำถามได้ไหม หากคุณมี nvidia ลองคำตอบในaskubuntu.com/q/858798/26246
user.dz

คำตอบ:


2

นี่ไม่ใช่คำตอบสุดท้ายเพียงแค่ตัวชี้ไปในทิศทางที่ถูกต้อง เมื่อวันที่ XFCE xfsettingsdprogramm เป็นผู้รับผิดชอบในการจัดการของRRScreenChangeNotifyเหตุการณ์และการเรียกสลับโหมดการทำงานที่แน่นอนสามารถพบได้ในxfce4-settings-4.12.0/xfsettingsd/displays.cบรรทัด 77, 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.