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

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

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


[деталь отладки]

после нескольких потоков на bumblebee и udevadm, Я сделал несколько тестов и сделал скрипт hotplug. Но проблема до сих пор не решена. Результат опубликован ниже.

для шмеля, я не настроить много, так как второй монитор обнаружить нормально, когда не hotplugged.

для горяч-затыкать родственный вопрос. Я сделал следующее:

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

23
задан Chong
15.12.2022 13:54 Количество просмотров материала 3236
Распечатать страницу

1 ответ

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

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"

Это мой скрипт 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

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

#!/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
1
отвечен nd34567s32e 2022-12-16 21:42

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

hotplug
linux
multiple-monitors
thunderbolt
udev
Вверх