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 bumblebee
pour 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 bumblebee
et 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 --query
retourne
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 --udev
ouvert, 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 udev
soit capable de détecter le matériel lorsque le moniteur est branché, j'ai donc mis en place une règle udev pour aider à xrandr
utiliser le nouveau moniteur. Mon script pour /etc/udev/rules.d/95-monitor-hotplug.rules
est le suivant:
ACTION=="change", SUBSYSTEM=="drm", RUN+="/usr/local/bin/hotplug_monitor.sh"
Et /usr/local/bin/hotplug_monitor.sh
est
#!/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 --query
toujours affiché DP1
et DP2
déconnecté.
Réponses:
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:
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):
Ceci est mon script hotplug
Ceci est mon script de déconnexion à chaud
la source