จอแสดงผลภายนอกของฉัน (เชื่อมต่อกับแล็ปท็อปของฉันผ่านทางสายฟ้า) ทำงานได้ดีหากเชื่อมต่อก่อนบูตเครื่อง อย่างไรก็ตามเมื่อไม่ได้เสียบปลั๊กหรือตัดการเชื่อมต่อด้วยวิธีการใด ๆ xrandr จะไม่ตรวจสอบจอภาพที่เชื่อมต่อใหม่อีกต่อไป
ฉันกำลังใช้งานArch Linux
โดยใช้bumblebee
สำหรับการจัดการกราฟิกการ์ด การ์ดภายนอกเชื่อมต่อผ่านช่องเสียบสายฟ้า มีคนบอกฉันว่าเกิดอะไรขึ้นกับเครื่องและฉันจะทำงาน hotplugging ได้อย่างไร ขอบคุณ
[รายละเอียดการดีบัก]
ต่อไปนี้หลายหัวข้อในbumblebee
และudevadm
ผมได้มีการทดสอบหลายคนและทำสคริปต์ hotplug แต่ปัญหายังไม่สามารถแก้ไขได้ ผลลัพธ์จะถูกโพสต์ดังนี้
สำหรับ bumblebee ฉันไม่ได้ปรับแต่งอะไรมากเพราะหน้าจอที่สองตรวจจับได้ดีเมื่อไม่เสียบปลั๊ก
สำหรับปัญหาที่เกี่ยวข้องกับการเสียบแบบร้อน ฉันทำต่อไปนี้:
เมื่อจอภาพทำงานปกติให้xrandr --query
ส่งคืน
Screen 0: minimum 8 x 8, current 2944 x 1080, maximum 32767 x 32767
eDP1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 382mm x 215mm
1920x1080 60.02*+
...
DP1 connected 1024x768+1920+0 (normal left inverted right x axis y axis) 0mm x 0mm
1024x768 60.00*
...
เมื่อถอดปลั๊กจอภาพจาก DP2 ที่udevadm monitor --environment --udev
เปิดอยู่ข้อมูลที่รวบรวมคือ:
UDEV [979.022342] change /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
ID_FOR_SEAT=drm-pci-0000_00_02_0
ID_PATH=pci-0000:00:02.0
ID_PATH_TAG=pci-0000_00_02_0
MAJOR=226
MINOR=0
SEQNUM=2650
SUBSYSTEM=drm
TAGS=:master-of-seat:uaccess:seat:
USEC_INITIALIZED=3775241
และเมื่อเสียบมอนิเตอร์ใน:
UDEV [1111.426386] change /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
ID_FOR_SEAT=drm-pci-0000_00_02_0
ID_PATH=pci-0000:00:02.0
ID_PATH_TAG=pci-0000_00_02_0
MAJOR=226
MINOR=0
SEQNUM=2651
SUBSYSTEM=drm
TAGS=:seat:uaccess:master-of-seat:
USEC_INITIALIZED=3775241
UDEV [1111.522857] change /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
ID_FOR_SEAT=drm-pci-0000_00_02_0
ID_PATH=pci-0000:00:02.0
ID_PATH_TAG=pci-0000_00_02_0
MAJOR=226
MINOR=0
SEQNUM=2652
SUBSYSTEM=drm
TAGS=:seat:uaccess:master-of-seat:
USEC_INITIALIZED=3775241
ดูเหมือนว่าudev
จะสามารถตรวจจับฮาร์ดแวร์ได้เมื่อเสียบปลั๊กของมอนิเตอร์ดังนั้นฉันจึงตั้งกฎ udev ขึ้นมาเพื่อช่วยในการxrandr
ใช้งานจอภาพใหม่ สคริปต์ของฉัน/etc/udev/rules.d/95-monitor-hotplug.rules
เป็นดังนี้:
ACTION=="change", SUBSYSTEM=="drm", RUN+="/usr/local/bin/hotplug_monitor.sh"
และ/usr/local/bin/hotplug_monitor.sh
ก็เป็น
#!/bin/sh
export XAUTHORITY=/home/chong/.Xauthority
function connectDP1(){
DISPLAY=:0 xrandr --output DP1 --auto --right-of eDP1
}
function disconnectDP1(){
DISPLAY=:0 xrandr --output DP1 --off
}
function connectDP2(){
DISPLAY=:0 xrandr --output DP2 --auto --right-of eDP1
}
function disconnectDP2(){
DISPLAY=:0 xrandr --output DP2 --off
}
xrandr | grep "DP1 connected" &> /dev/null && connectDP1 || disconnectDP1
xrandr | grep "DP2 connected" &> /dev/null && connectDP2 || disconnectDP2
สคริปต์รันและหยุดทำงานตามปกติ แต่หลังจากนั้นxrandr --query
ยังคงแสดงDP1
และDP2
ยกเลิกการเชื่อมต่อ