El sistema no detecta el puerto de pantalla conectado en caliente (a través del conector de rayo)

9

Mi pantalla externa (conectada a mi computadora portátil a través del rayo) funciona bien si está conectada antes del arranque. Sin embargo, una vez que esté desconectado o desconectado por cualquier medio, xrandr ya no detectará el monitor reconectado.

Estoy corriendo Arch Linux, usando bumblebeepara el manejo de tarjetas gráficas. La tarjeta externa está conectada a través del conector de rayo. ¿Podría alguien decirme qué le pasa a la máquina y cómo puedo hacer que funcione la conexión en caliente? Gracias.


[Detalle de depuración]

Después de varios subprocesos bumblebeey udevadm, hice varias pruebas e hice un script hotplug. Sin embargo, el problema aún no está resuelto. El resultado se publica como a continuación.

Para el abejorro, no ajusté mucho, ya que el segundo monitor se detecta bien cuando no está conectado en caliente.

Para problemas relacionados con la conexión en caliente. Hice lo siguiente:

Cuando el monitor funciona normalmente, xrandr --queryvuelve

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* 

...

Al desconectar el monitor de DP2 con udevadm monitor --environment --udevabierto, la información recopilada es:

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

Y al enchufar el 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

Parece que udevpuede detectar el hardware cuando el monitor está enchufado, así que configuré una regla udev para ayudar a xrandrusar el nuevo monitor. Mi script para /etc/udev/rules.d/95-monitor-hotplug.ruleses el siguiente:

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

Y /usr/local/bin/hotplug_monitor.shes

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

El script se ejecuta y se cierra normalmente, pero luego xrandr --queryaún se muestra DP1y se DP2desconecta.

Chong
fuente
Estoy experimentando exactamente el mismo comportamiento. También en Arch. Intenté sin abejorro también con los controladores propietarios de nvidia sin suerte. ¿Intentaste con Nouveau?
Johnride
@Johnride Mi tarjeta gráfica es Maxwell Architecture. Nouveau aún no lo ha hecho funcionar. Actualmente estoy usando el puerto HDMI y el controlador directo NVIDIA. Parece que están funcionando bien.
Chong
este será fijado en uno de los siguientes núcleos bugzilla.kernel.org/show_bug.cgi?id=115121
¿Ha encontrado alguien una solución? Tengo un kernel más nuevo que el mencionado anteriormente y todavía tengo el mismo problema que Chong. Obtengo el puerto de red, la cámara web y el usb detectados y funcionando, pero no la pantalla.
dvdgc13
#! / bin / bash (no sh) de lo contrario la declaración de la función está en error
nd34567s32e

Respuestas:

1

Encontré su código y persistí en tratar de hacerlo funcionar. Bajo ninguna condición podría hacerlo funcionar con un paradigma "si entonces". el "xrandr | grep" SIEMPRE no fue cierto cuando se ejecutó como disparador udev, pero funcionó si lo ejecuté manualmente. Me forzaron a dividirlo en dos guiones.

Aunque mi dispositivo es diferente (StarTech CDPVGDVHDMDP), publicaré mi versión aquí.

Primero, me pareció útil volver a cargar las reglas de udev al solucionar problemas:

sudo udevadm control --reload-rules

Mi dispositivo era un poco diferente y descubrí que el subsistema "hidraw" era algo que podía activar. Además, me vi obligado a ejecutar / bin / bash / path / to / script "; de lo contrario, no se ejecutó. Esta es mi regla 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"

Este es mi 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

Este es mi script de desconexión en caliente

#!/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
fuente
Desde que publiqué esto, he deshabilitado el script hotUNplug, ya que no es necesario y en realidad causó problemas al conectar otros dispositivos usb.
nd34567s32e