Monitor desconectado después de suspender
He estado probando el entorno de ventanas i3 (junto con XFCE). Después de suspender, xrandr reportaba mi monitor CRT (conectado con un adaptador HDMI-VGA) como desconectado. Al reiniciar volvía a funcionar. Curiosamente no he tenido este problema en Gnome, no sé por qué. Quizá GDM (GNOME Display Manager) haga magia.
Todo esto lo he hecho con el kernel 5.3.11-300.fc31.x86_64
Primer intento
Añadir un modo con xrandr:
xrandr --newmode "1024x768_85.00" 94.50 1024 1096 1200 1376 768 771 775 809 -hsync +vsync
xrandr --addmode HDMI-2 "1024x768_85.00"
xrandr --output HDMI-2 --mode "1024x768_85.00"
Encendía el monitor pero clonando, no extendiendo el escritorio, así que no me vale. Además no es visible para X11 (no aparece en arandr ni en el gestor «Display» de XFCE).
Segundo intento
Pedírselo al kernel (drm) NOTA: HDMI-A-2 es lo que en xrandr me aparece como HDMI-2:
echo detect > /sys/class/drm/card0-HDMI-A-2/status
echo on-digital > /sys/class/drm/card0-HDMI-A-2/status
En dmesg el módulo amdgpu
me devolvía error:
May 31 01:54:15 localhost kernel: [drm:emulated_link_detect [amdgpu]] *ERROR* Failed to read EDID
May 31 01:54:15 localhost kernel: [drm:dc_link_detect [amdgpu]] *ERROR* No EDID read.
Al desconectar y reconectar físicamente funcionaba la detección, y XFCE me preguntaba si extender/clonar el escritorio. Xrandr lo mostraba como conectado. Sin embargo, quería evitar tocar los cables físicamente, por el engorro de mover mi torre y por evitar el desgaste y consiguiente flojeo de los puertos.
Tercer intento
Encontré este enlace que explica cómo pasar un EDID a las opciones del kernel y además forzar el estado de conexión. Veamos.
Antes de nada, reinicié el PC y obtuve el EDID. Lo guardé en /lib/firmware/edid
:
cat /sys/class/drm/card0-HDMI-A-2/edid > CPD-E220E.bin
mv CPD-E220E.bin /lib/firmware/edid
A continuación seguí las instrucciones del enlace:
Editar grub y añadir en GRUB_CMDLINE_LINUX
:
video=HDMI-A-2:D drm_kms_helper.edid_firmware=HDMI-A-2:edid/CPD-E220E.bin
HDMI-A-2
con la opción:D
fuerza a esa salida de vídeo a estar siempre conectada, incluso si se desconecta el cable.
Para que el kernel pueda acceder al fichero del EDID necesitamos incluirlo en initramfs. De lo contrario mostrará este error:
May 31 05:26:00 localhost kernel: platform HDMI-A-2: Direct firmware load for edid/CPD-E220E.bin failed with error -2
May 31 05:26:00 localhost kernel: [drm:edid_load [drm]] *ERROR* Requesting EDID firmware "edid/CPD-E220E.bin" failed (err=-2)
Creamos el fichero /etc/dracut.conf.d/99-local.conf
con este contenido:
install_items+=" /usr/lib/firmware/edid/CPD-E220E.bin "
Y ahora recreamos la imagen de initramfs:
dracut -f
Comprobamos con lsinitrd
que efecivamente haya sido incluído:
[root@localhost img]# lsinitrd | grep CPD-E220
-rw-r--r-- 1 root root 256 Jul 25 2019 usr/lib/firmware/edid/CPD-E220E.bin
Ahora reiniciamos y dmesg deberíamos mostrar que se fuerza la conexión (la opción :D
que vimos anteriormente) y que se carga nuestro EDID:
May 31 09:39:28 localhost kernel: [drm] forcing HDMI-A-2 connector on
May 31 09:39:28 localhost kernel: [drm] Got external EDID base block and 1 extension from "edid/CPD-E220E.bin" for connector "HDMI-A-2"
Ahora puedo encender y apagar el monitor con xrandr o el menú «Display» de XFCE. NOTA: forzar la conexión con :D
no implica que el monitor tenga que estar encendido, simplemente que aparezca como conectado.

Para Arch
Guardamos el EDID en /usr/lib/firmware/edid/ (crear el directorio edid si es necesario).
Modificamos /etc/mkinitcpio.conf:
FILES=(/usr/lib/firmware/edid/CPD-E220E.bin)
Generamos initramfs con:
sudo mkinitcpio -P
Comprobamos que el EDID esté efectivamente incluído:
lsinitcpio /boot/initramfs-linux.img | grep CPD
Modificamos /etc/default/grub de la misma manera que en Fedora. Finalmente, actualizamos con:
# grub-mkconfig -o /boot/grub/grub.cfg