ระบบตรวจไม่พบพอร์ตจอแสดงผลแบบเสียบร้อน (ผ่านตัวเชื่อมต่อสายฟ้า)


9

จอแสดงผลภายนอกของฉัน (เชื่อมต่อกับแล็ปท็อปของฉันผ่านทางสายฟ้า) ทำงานได้ดีหากเชื่อมต่อก่อนบูตเครื่อง อย่างไรก็ตามเมื่อไม่ได้เสียบปลั๊กหรือตัดการเชื่อมต่อด้วยวิธีการใด ๆ 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ยกเลิกการเชื่อมต่อ


ฉันกำลังประสบพฤติกรรมเดียวกัน บน Arch ฉันพยายามโดยไม่ต้องบัมเบิลบีด้วยกับไดรเวอร์ที่เป็นกรรมสิทธิ์ของ nvidia โดยไม่มีโชค คุณลองกับนูโวหรือไม่?
Johnride

@Johnride การ์ดกราฟิกของฉันคือ Maxwell Architecture Nouveau ยังไม่ได้ทำงาน ขณะนี้ฉันกำลังใช้พอร์ต HDMI และไดร์เวอร์ NVIDIA โดยตรง ดูเหมือนว่าพวกเขาจะทำงานได้ดี
ช่อง

สิ่งนี้จะได้รับการแก้ไขในหนึ่งใน

มีใครพบวิธีแก้ปัญหา? ฉันมีเคอร์เนลใหม่กว่าที่กล่าวไว้ข้างต้นและฉันยังคงมีปัญหาเดียวกันกับปากช่อง ฉันได้รับพอร์ตเครือข่ายเว็บแคมและ usb ที่ตรวจพบและใช้งานได้ แต่ไม่ใช่จอแสดงผล
dvdgc13

#! / bin / bash (ไม่ใช่ sh) มิฉะนั้นคำสั่งฟังก์ชั่นมีข้อผิดพลาด
nd34567s32e

คำตอบ:


1

ฉันพบรหัสของคุณและยืนยันในการพยายามทำให้มันทำงาน ภายใต้เงื่อนไขที่ฉันสามารถทำให้มันทำงานกับกระบวนทัศน์ "ถ้านั้น" "xrandr | grep" ล้มเหลวในการเป็นจริงเมื่อเรียกใช้เป็น udev ทริกเกอร์ แต่ทำงานถ้าฉันวิ่งด้วยตนเอง ฉันถูกบังคับให้แบ่งมันออกเป็นสองสคริปต์

แม้ว่าอุปกรณ์ของฉันจะแตกต่างกัน (StarTech CDPVGDVHDMDP) ฉันจะโพสต์เวอร์ชั่นของฉันที่นี่

ครั้งแรกฉันพบว่าเป็นประโยชน์ในการโหลดกฎ udev เมื่อแก้ไขปัญหา:

sudo udevadm control --reload-rules

อุปกรณ์ของฉันแตกต่างกันเล็กน้อยและฉันพบว่าระบบย่อย "hidraw" เป็นสิ่งที่ฉันสามารถกระตุ้นได้ นอกจากนี้ฉันถูกบังคับให้รัน / bin / bash / path / to / script "มิฉะนั้นจะไม่ทำงานนี่คือกฎ udev ของฉัน (/etc/udev/rules.d/95-monitor-hotplug.rules):

ACTION=="remove", SUBSYSTEM=="hidraw", RUN+="/bin/bash /home/user/scripts/hotunplug-displayport.sh"
ACTION=="add", SUBSYSTEM=="hidraw", RUN+="/bin/bash /home/user/scripts/hotplug-displayport.sh"

นี่คือสคริปต์ hotplug ของฉัน

#!/bin/bash
export XAUTHORITY=/home/user/.Xauthority
DISPLAY=:0 /usr/bin/xrandr --addmode DP-1 1680x1050
DISPLAY=:0 /usr/bin/xrandr --output DP-1 --right-of  eDP-1 --mode 1680x1050
echo "$(date) : Hotplug Connect DP-1" >> /var/log/hotplug.txt
DISPLAY=:0 /usr/bin/xrandr --addmode DP-2 1680x1050
DISPLAY=:0 /usr/bin/xrandr --output DP-2 --right-of  eDP-1 --mode 1680x1050
echo "$(date) : Hotplug Connect DP-2" >> /var/log/hotplug.txt

นี่เป็นสคริปต์ hot-unplug ของฉัน

#!/bin/bash
export XAUTHORITY=/home/user/.Xauthority
DISPLAY=:0 /usr/bin/xrandr --output DP-1 --off
echo "$(date) : Hotplug Disconnect DP-1" >> /var/log/hotplug.txt
DISPLAY=:0 /usr/bin/xrandr --output DP-2 --off
echo "$(date) : Hotplug Disconnect DP-2" >> /var/log/hotplug.txt

ตั้งแต่การโพสต์สิ่งนี้ฉันได้ปิดใช้งานสคริปต์ hotUNplug เนื่องจากไม่จำเป็นและเป็นปัญหาจริง ๆ เมื่อเสียบอุปกรณ์ usb อื่น ๆ
nd34567s32e
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.