Il sistema non rileva la porta del display collegata a caldo (tramite connettore thunderbolt)


9

Il mio display esterno (collegato al mio laptop tramite fulmine) funziona bene se collegato prima dell'avvio. Tuttavia, una volta scollegato o disconnesso in qualsiasi modo, xrandr non rileverà più il monitor ricollegato.

Sto correndo Arch Linux, usando bumblebeeper la gestione della scheda grafica. La scheda esterna è collegata tramite il connettore fulmine. Qualcuno potrebbe dirmi cosa c'è di sbagliato con la macchina e come posso far funzionare hotplugging? Grazie.


[Dettagli debug]

Dopo aver seguito più thread bumblebeee udevadm, ho fatto diversi test e ho creato uno script hotplug. Tuttavia il problema non è ancora risolto. Il risultato è pubblicato come di seguito.

Per il calabrone, non ho ottimizzato molto, dal momento che il secondo monitor viene rilevato correttamente quando non è collegato a caldo.

Per problemi relativi all'hot-plug. Ho fatto quanto segue:

Quando il monitor funziona normalmente, xrandr --queryritorna

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* 

...

Quando si scollega il monitor da DP2 con udevadm monitor --environment --udevaperto, le informazioni raccolte sono:

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

E quando si collega il monitor:

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

Sembra che udevsia in grado di rilevare l'hardware quando il monitor è collegato, quindi ho impostato una regola udev per aiutare a xrandrutilizzare il nuovo monitor. La mia sceneggiatura per /etc/udev/rules.d/95-monitor-hotplug.rulesè la seguente:

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

Ed /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

Lo script viene eseguito e chiuso normalmente, ma in seguito viene xrandr --querycomunque mostrato DP1e DP2disconnesso.


Sto sperimentando lo stesso identico comportamento. Anche sull'Arch. Ho provato senza bombo anche con i driver proprietari nvidia senza fortuna. Hai provato con il nouveau?
Johnride,

@Johnride La mia scheda grafica è Maxwell Architecture. Nouveau non l'ha ancora fatto funzionare. Attualmente sto usando la porta HDMI e il driver NVIDIA diretto. Sembra che stiano funzionando bene.
Chong,

questo verrà risolto in uno dei kernel successivi bugzilla.kernel.org/show_bug.cgi?id=115121

Qualcuno ha trovato una soluzione? Ho un kernel più recente di quello sopra menzionato e ho ancora lo stesso problema di Chong. Ottengo la porta di rete, webcam e usb rilevati e funzionanti, ma non il display.
dvdgc13

#! / bin / bash (non sh) altrimenti l'istruzione di funzione è in errore
nd34567s32e

Risposte:


1

Ho trovato il tuo codice e ho continuato a provare a farlo funzionare. In NESSUNA condizione potrei farlo funzionare con un paradigma "se poi". lo "xrandr | grep" SEMPRE non è stato vero quando eseguito come trigger udev, ma ha funzionato se l'ho eseguito manualmente. Sono stato costretto a dividerlo in due script.

Sebbene il mio dispositivo sia diverso (StarTech CDPVGDVHDMDP), pubblicherò la mia versione qui.

Innanzitutto, ho trovato utile ricaricare le regole udev durante la risoluzione dei problemi:

sudo udevadm control --reload-rules

Il mio dispositivo era un po 'diverso e ho scoperto che il "sottosistema" del sottosistema era qualcosa che potevo innescare. Inoltre, sono stato costretto a eseguire / bin / bash / path / to / script "; altrimenti non è stato eseguito. Questa è la mia regola 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"

Questo è il mio script 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

Questo è il mio script 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

Da quando ho pubblicato questo, ho disabilitato lo script hotUNplug, in quanto non è necessario e in realtà ho riscontrato problemi durante il collegamento di altri dispositivi USB.
nd34567s32e
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.