Hay veces que la resolución de video es baja y no puede cambiarse. Esto suele pasar por dos motivos:
- El hardware no está correctamente reconocido o configurado.
- No se está obteniendo correctamente la información EDID.
Aquí se supondrá que el hardware está correctamente detectado y configurado y nos concentraremos en caso en que no se obtiene correctamente la información EDID.
Verificación de precondiciones
Para corroborar las precondiciones del problema verificaremos:
-
Que el kernel está siendo detectado:
$ lspci -s 00:02.0 -v | grep -i kernel Kernel driver in use: i915 Kernel modules: i915
En este caso el hardware está siendo detectado y se está utilizando el módulo del kernel
i915
. Si la salida del comando es vacía no se está detectando correctamente el hardware. -
Que la información EDID no es devuelta correctamente
Para obtener la información EDID deben utilizarse los comandos provistos por el paquete
read-edid
:$ sudo apt-get install -qVy read-edid $ sudo get-edid 2>/dev/null | parse-edid
Aquí se espera que se devuelva un valor inválido del checksum.
Corrección de información EDID
Para este caso el módulo del kernel drm_kms_helper
incluye el parámetro
edid_firmware
, el cual espera la ruta del archivo con la información EDID a
partir del directorio /lib/firmware
.
Si el monitor fuera por ejemplo un AOC e1621Sw y se tuviera un archivo
aoc-e1621Sw.bin
con la información EDID hay que guardar dicho archivo en
el directorio /lib/firmware/edid
y modificar la configuración de grub para
agregar el parámetro drm_kms_helper.edid_firmware=edid/aoc-e1621Sw.bin
:
$ sudo sed -i.bak-$(date -uIs) 's#GRUB_CMDLINE_LINUX_DEFAULT="\(.*\)"#GRUB_CMDLINE_LINUX_DEFAULT="\1 drm_kms_helper.edid_firmware=edid/aoc-e1621Sw.bin"#' /etc/default/grub
$ sudo update-grub
En caso de no tener el archivo EDID correspondiente al monitor, se puede utilizar el hecho de que el módulo del kernel posee precargados los siguientes archivos (con indicar los siguientes strings se configura la resolución correspondiente):
- edid/800x600.bin
- edid/1024x768.bin
- edid/1280x1024.bin
- edid/1600x1200.bin
- edid/1680x1050.bin
- edid/1920x1080.bin
Siguiendo con el ejemplo anterior, ya que el monitor
AOC e1621Sw
posee una resolución nativa de 1366 x 768 at 60 Hz
que no se corresponde con
ninguna de las precargadas en el módulo se utiliza la resolución menor más
cercana:
$ sudo sed -i.bak-$(date -uIs) 's/GRUB_CMDLINE_LINUX_DEFAULT="\(.*\)"/GRUB_CMDLINE_LINUX_DEFAULT="\1 drm_kms_helper.edid_firmware=edid/1280x1024.bin"/' /etc/default/grub
$ sudo update-grub
Obtener EDID de un monitor
Para obtener la información EDID de un monitor se utiliza el programa
get-edid
(provisto en el paquete read-edid
):
$ sudo get-edid > <marca>-<modelo>.bin
Se utiliza
$ cat <marca>-<modelo>.bin | parse-edid
para verificar que la información se obtuvo correctamente (verificando el valor del Checksum).