Система не обнаруживает порт дисплея с горячей заменой (через разъем Thunderbolt)

3973
Chong

Мой внешний дисплей (подключенный к ноутбуку через Thunderbolt) работает нормально, если подключен до загрузки. Однако, как только он отключен или отключен каким-либо образом, xrandr больше не будет обнаруживать подключенный монитор.

Я бегу Arch Linux, использую bumblebeeдля обработки графических карт. Внешняя карта подключается через разъем Thunderbolt. Может кто-нибудь сказать мне, что не так с машиной, и как я могу сделать горячее подключение? Благодарю.


[Отладочная деталь]

После нескольких потоков на bumblebeeи udevadm, я сделал несколько тестов и сделал скрипт горячего подключения. И все же проблема до сих пор не решена. Результат размещен как показано ниже.

Для шмеля я не особо подправлял, так как второй монитор нормально работает, когда не подключен к сети.

Для горячей замены, связанной с проблемой. Я сделал следующее:

Когда монитор работает нормально, 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отключается.

9
Я испытываю точно такое же поведение. Также на Arch. Я попытался без шмеля также с проприетарными драйверами nvidia без удачи. Ты пробовал с нуво? Johnride 8 лет назад 0
@Johnride Моя графическая карта Maxwell Architecture. Модерн еще не заставил это работать. В настоящее время я использую порт HDMI и прямой драйвер NVIDIA. Похоже, они работают нормально. Chong 8 лет назад 0
это будет исправлено в одном из следующих ядер https://bugzilla.kernel.org/show_bug.cgi?id=115121 8 лет назад 0
Кто-нибудь нашел решение? У меня более новое ядро, чем упомянутое выше, и у меня все та же проблема, что и у Chong. Я получаю, что порт сети, веб-камера и USB обнаружены и работают, но не дисплей. dvdgc13 6 лет назад 0
#! / bin / bash (не sh), иначе оператор функции ошибочен nd34567s32e 6 лет назад 0
&& || утверждение не то же самое, что и в случае с https://github.com/koalaman/shellcheck/wiki/SC2015 nd34567s32e 6 лет назад 0

1 ответ на вопрос

1
nd34567s32e

Я нашел ваш код и продолжал пытаться заставить его работать. Ни при каких условиях я не мог бы заставить его работать с парадигмой «если тогда». «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" 

Это мой скрипт горячего подключения

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

Это мой сценарий горячего отключения

#!/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 6 лет назад 0

Похожие вопросы