System nie wykrywa podłączonego na gorąco portu wyświetlacza (przez złącze piorunowe)

9

Mój zewnętrzny wyświetlacz (podłączony do mojego laptopa przez piorun) działa dobrze, jeśli jest podłączony przed uruchomieniem. Jednak po odłączeniu lub odłączeniu w jakikolwiek sposób xrandr nie wykrywa już podłączonego monitora.

Używam Arch Linux, używając bumblebeedo obsługi karty graficznej. Karta zewnętrzna jest podłączona przez złącze piorunowe. Czy ktoś mógłby mi powiedzieć, co jest nie tak z maszyną i jak mogę sprawić, by hotplugging działał? Dzięki.


[Szczegóły debugowania]

Po wielu wątkach bumblebeei udevadmprzeprowadziłem kilka testów i wykonałem skrypt hotplug. Jednak problem nadal nie został rozwiązany. Wynik opublikowano jak poniżej.

W przypadku trzmiela nie poprawiłem wiele, ponieważ drugi monitor wykrywa się dobrze, gdy nie jest podłączony do sieci.

W przypadku problemu związanego z podłączaniem podczas pracy. Zrobiłem następujące:

Gdy monitor działa normalnie, xrandr --querypowraca

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* 

...

Podczas odłączania monitora od DP2 przy udevadm monitor --environment --udevotwartym zgromadzone informacje to:

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

A po podłączeniu monitora:

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

Wydaje się, że udevjest w stanie wykryć sprzęt po podłączeniu monitora, więc skonfigurowałem regułę udev, aby pomóc w xrandrkorzystaniu z nowego monitora. Mój skrypt dla /etc/udev/rules.d/95-monitor-hotplug.rulesjest następujący:

ACTION=="change", SUBSYSTEM=="drm", RUN+="/usr/local/bin/hotplug_monitor.sh"

I /usr/local/bin/hotplug_monitor.shjest

#!/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

Skrypt działa normalnie i kończy pracę, ale potem xrandr --querynadal się wyświetla DP1i DP2rozłącza.

Czong
źródło
Doświadczam dokładnie tego samego zachowania. Również na Arch. Próbowałem również bez trzmiela z zastrzeżonymi sterownikami NVIDIA bez powodzenia. Próbowałeś z secesją?
Johnride,
@Johnride Moja karta graficzna to Maxwell Architecture. Nouveau jeszcze nie działa. Obecnie używam portu HDMI i bezpośredniego sterownika NVIDIA. Wygląda na to, że działają dobrze.
Chong,
zostanie to naprawione w jednym z kolejnych jąder bugzilla.kernel.org/show_bug.cgi?id=115121
Czy ktoś znalazł rozwiązanie? Mam nowsze jądro niż wspomniane powyżej i nadal mam ten sam problem, co Chong. Dostaję port sieci, kamerę internetową i usb wykryte i działają, ale nie wyświetla.
dvdgc13
#! / bin / bash (not sh) w przeciwnym razie instrukcja funkcji jest błędna
nd34567s32e

Odpowiedzi:

1

Znalazłem twój kod i starałem się, aby działał. W ŻADNYCH warunkach nie mogę sprawić, aby działał zgodnie z paradygmatem „jeśli to”. "xrandr | grep" ZAWSZE nie działało, gdy działało jako wyzwalacz udev, ale działało, jeśli uruchomiłem go ręcznie. Zmuszono mnie do podzielenia go na dwa skrypty.

Chociaż moje urządzenie jest inne (StarTech CDPVGDVHDMDP), opublikuję tutaj swoją wersję.

Po pierwsze, uznałem, że pomocne jest przeładowanie reguł udev podczas rozwiązywania problemów:

sudo udevadm control --reload-rules

Moje urządzenie było trochę inne i odkryłem, że podsystem „hidraw” był czymś, co mogłem uruchomić. Ponadto byłem zmuszony do uruchomienia / bin / bash / path / to / script "; w przeciwnym razie nie zadziałał. To jest moja reguła 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"

To jest mój skrypt 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

To jest mój skrypt odłączania na gorąco

#!/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
nd34567s32e
źródło
Od czasu opublikowania tego wyłączyłem skrypt hotUNplug, ponieważ nie jest to konieczne i faktycznie powoduje problemy podczas podłączania innych urządzeń USB.
nd34567s32e