Le système ne détecte pas le port d'affichage branché à chaud (via le connecteur Thunderbolt)

9

Mon écran externe (connecté à mon ordinateur portable via Thunderbolt) fonctionne correctement s'il est connecté avant le démarrage. Cependant, une fois qu'il est débranché ou déconnecté par quelque moyen que ce soit, xrandr ne détectera plus le moniteur reconnecté.

Je cours Arch Linux, j'utilise bumblebeepour la gestion des cartes graphiques. La carte externe est connectée via le connecteur Thunderbolt. Quelqu'un pourrait-il me dire ce qui ne va pas avec la machine et comment faire fonctionner le branchement à chaud? Merci.


[Détails de débogage]

Après plusieurs threads sur bumblebeeet udevadm, j'ai fait plusieurs tests et fait un script hotplug. Pourtant, le problème n'est toujours pas résolu. Le résultat est affiché comme ci-dessous.

Pour les bourdons, je n'ai pas beaucoup modifié, car le deuxième moniteur est bien détecté lorsqu'il n'est pas branché à chaud.

Pour les problèmes liés au branchement à chaud. J'ai fait ce qui suit:

Lorsque le moniteur fonctionne normalement, xrandr --queryretourne

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* 

...

Lorsque vous débranchez le moniteur de DP2 avec udevadm monitor --environment --udevouvert, les informations recueillies sont les suivantes:

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

Et lorsque vous branchez le moniteur:

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

Il semble que udevsoit capable de détecter le matériel lorsque le moniteur est branché, j'ai donc mis en place une règle udev pour aider à xrandrutiliser le nouveau moniteur. Mon script pour /etc/udev/rules.d/95-monitor-hotplug.rulesest le suivant:

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

Et /usr/local/bin/hotplug_monitor.shest

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

Le script s'exécute et se ferme normalement, mais après, il est xrandr --querytoujours affiché DP1et DP2déconnecté.

Chong
la source
Je ressens exactement le même comportement. Aussi sur Arch. J'ai également essayé sans bourdon avec les pilotes propriétaires nvidia sans succès. Avez-vous essayé avec nouveau?
Johnride
@Johnride Ma carte graphique est Maxwell Architecture. Nouveau n'a pas encore fonctionné. Actuellement, j'utilise un port HDMI et un pilote NVIDIA direct. Il semble qu'ils fonctionnent bien.
Chong
cela sera corrigé dans l'un des prochains noyaux bugzilla.kernel.org/show_bug.cgi?id=115121
Est-ce que quelqu'un a trouvé une solution? J'ai un noyau plus récent que celui mentionné ci-dessus et j'ai toujours le même problème que Chong. Je reçois le port réseau, la webcam et l'USB détectés et fonctionnent, mais pas l'écran.
dvdgc13
#! / bin / bash (pas sh) sinon l'instruction de fonction est en erreur
nd34567s32e

Réponses:

1

J'ai trouvé votre code et j'ai persisté à essayer de le faire fonctionner. En aucun cas je ne pourrais le faire fonctionner avec un paradigme "si alors". le "xrandr | grep" n'a PAS toujours été vrai lorsqu'il a été exécuté en tant que déclencheur udev, mais a fonctionné si je l'ai exécuté manuellement. J'ai été forcé de le diviser en deux scripts.

Bien que mon appareil soit différent (StarTech CDPVGDVHDMDP), je publierai ma version ici.

Tout d'abord, j'ai trouvé utile de recharger les règles udev lors du dépannage:

sudo udevadm control --reload-rules

Mon appareil était un peu différent, et j'ai trouvé que le sous-système "hidraw" était quelque chose que je pouvais déclencher. De plus, j'ai été obligé d'exécuter / bin / bash / path / to / script "; sinon, il ne s'est pas exécuté. Voici ma règle 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"

Ceci est mon 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

Ceci est mon script de déconnexion à chaud

#!/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
la source
Depuis la publication de cela, j'ai désactivé le script hotUNplug, car il n'est pas nécessaire et a en fait posé des problèmes lors de la connexion d'autres périphériques USB.
nd34567s32e