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 bumblebee
para 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 bumblebee
y 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 --query
vuelve
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 --udev
abierto, 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 udev
puede detectar el hardware cuando el monitor está enchufado, así que configuré una regla udev para ayudar a xrandr
usar el nuevo monitor. Mi script para /etc/udev/rules.d/95-monitor-hotplug.rules
es el siguiente:
ACTION=="change", SUBSYSTEM=="drm", RUN+="/usr/local/bin/hotplug_monitor.sh"
Y /usr/local/bin/hotplug_monitor.sh
es
#!/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 --query
aún se muestra DP1
y se DP2
desconecta.
Respuestas:
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:
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):
Este es mi script hotplug
Este es mi script de desconexión en caliente
fuente