
Tengo Linux Mint 17 en mi computadora portátil. También tengo un monitor de 22 '' conectado a una computadora portátil mediante un cable HDMI. Mi disco está completamente cifrado con LUKS y LVM. Al arrancar, aparece un mensaje gráfico para ingresar la contraseña para las particiones cifradas. La resolución de pantalla tanto en la computadora portátil como en el monitor externo es incorrecta al solicitar la contraseña. El mensaje gráfico y el logotipo de Linux Mint se mueven a la esquina superior izquierda en ambos monitores y el resto del espacio es negro. La resolución es correcta solo después de iniciar sesión en mi perfil. Esto es lo que xrandr
se muestra cuando inicio sesión:
Screen 0: minimum 320 x 200, current 3286 x 1080, maximum 32767 x 32767
LVDS1 connected 1366x768+1920+312 (normal left inverted right x axis y axis) 344mm x 194mm
1366x768 60.1*+ 40.1
1360x768 59.8 60.0
1024x768 60.0
800x600 60.3 56.2
640x480 59.9
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 531mm x 298mm
1920x1080 60.0*+
1680x1050 59.9
1600x900 60.0
1280x1024 75.0 60.0
1280x800 59.9
1152x864 75.0
1280x720 60.0
1024x768 75.1 60.0
832x624 74.6
800x600 75.0 60.3
640x480 75.0 60.0
720x400 70.1
DP1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
Después de montar el disco cifrado, puedo cambiar la resolución en los monitores usando xrandr
el comando. Pero este comando no está disponible con initramfs
.
Recientemente estuve arreglando el brillo de la pantalla de otra computadora portátil al arrancar usando initramfs
un script y funcionó. Este script estaba configurando el brillo haciendo eco del valor correcto en to /sys/class/backlight/acpi_video0/brightness
. ¿Puedo usar también algo similar para cambiar la resolución de la pantalla de alguna manera?
ACTUALIZAR
Probé la solución @mikeserv:
Archivos EDID de monitores (no estoy seguro si son correctos):
# cat /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-LVDS-1/edid > /lib/firmware/edid/1366x768.bin # cat /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-1/edid > /lib/firmware/edid/1920x1080.bin # hexdump /lib/firmware/edid/1366x768.bin 0000000 ff00 ffff ffff 00ff e430 033b 0000 0000 0000010 1600 0401 2290 7813 610a 9ed5 5b5e 269a 0000020 501a 0054 0000 0101 0101 0101 0101 0101 0000030 0101 0101 0101 1de2 b456 0050 3038 3024 0000040 0035 c258 0010 1900 13ec c656 0050 302e 0000050 3024 0035 c258 0010 1900 0000 fe00 3500 0000060 4833 3935 3180 3635 4857 0a34 0000 0000 0000070 0000 3141 0096 0000 0100 0a01 2020 ac00 0000080 # hexdump /lib/firmware/edid/1920x1080.bin 0000000 ff00 ffff ffff 00ff d109 78a5 5445 0000 0000010 1626 0301 3580 781e b72e a4d5 5456 279f 0000020 500c a554 806b 0081 c081 8081 c0a9 00b3 0000030 c0d1 0101 0101 3a02 1880 3871 402d 2c58 0000040 0045 2a13 0021 1e00 0000 ff00 4c00 4339 0000050 3030 3537 3039 3931 200a 0000 fd00 3200 0000060 1e4c 1153 0a00 2020 2020 2020 0000 fc00 0000070 4200 6e65 2051 4c47 3432 3035 200a d900 0000080
Script de enlace para initramfs, carga
i915
el módulo e incluyeEDID
archivos en/lib/firmware/edid/
el directorio internoinitramfs
(lo he verificado yEDID
los archivos están dentro de initramfs)# cat /etc/initramfs-tools/hooks/include-edid-data #!/bin/sh PREREQ="udev" prereqs() { echo "$PREREQ" } case $1 in prereqs) prereqs exit 0 ;; esac . /usr/share/initramfs-tools/hook-functions # Begin real processing below this line if [ ! -e "${DESTDIR}/lib/firmware/edid" ]; then mkdir -p "${DESTDIR}/lib/firmware/edid" fi if [ -r "/lib/firmware/edid/1366x768.bin" ]; then cp "/lib/firmware/edid/1366x768.bin" "${DESTDIR}/lib/firmware/edid/" fi if [ -r "/lib/firmware/edid/1920x1080.bin" ]; then cp "/lib/firmware/edid/1920x1080.bin" "${DESTDIR}/lib/firmware/edid/" fi manual_add_modules i915 exit 0 # chmod a+rx /etc/initramfs-tools/hooks/include-edid-data # update-initramfs -u
Al reiniciar, agregué el parámetro de arranque (no estoy seguro si debería ser HDMI-1 o HDMI1 o algo más)
drm_kms_helper.edid_firmware=HDMI1:/lib/firmware/edid/1920x1080.bin
No cambió nada. Entonces también probé:
drm_kms_helper.edid_firmware=HDMI-1:/lib/firmware/edid/1920x1080.bin drm_kms_helper.edid_firmware=HDMI1:edid/1920x1080.bin drm_kms_helper.edid_firmware=HDMI-1:edid/1920x1080.bin
No hubo suerte en absoluto. Todo es como era antes de que diera pasos desde arriba.
También quiero agregar que cuando la identificación del monitor HDMI está desconectada, la resolución en el monitor de la computadora portátil es correcta.
¿Qué estoy haciendo mal?
ACTUALIZACIÓN 2
Sigue sin funcionar. Pasos que tomé:
Descubrí los nombres correctos para mis monitores:
$ for p in /sys/class/drm/*/status; do if [ "$(cat "$p")" == "connected" ]; then echo -n "$p" | awk -F '/' '{print $5}'; fi; done card0-HDMI-A-1 card0-LVDS-1
Instalar
linux-doc
(para obtener documentos que describan la creación de paquetes personalizadosEDID
)dos2unix
,make
(para compilarEDID
archivos)$ sudo apt-get install linux-doc dos2unix make
Cree un directorio temporal para compilar y copiar archivos fuente para
EDID
$ mkdir ~/Tmp/edid $ cd ~/Tmp/edid $ cp /usr/share/doc/linux-doc/EDID/* . $ rm *.S $ cp /usr/share/doc/linux-doc/EDID/1920x1080.S . $ cp /usr/share/doc/linux-doc/EDID/1920x1080.S 1366x768.S
Editar archivo
1366x768.S
con correctovalores, compilar, copiar a/lib/firmware/edid
:Obtener el modelo de trabajo actual para la pantalla de mi computadora portátil
$ xvidtune -show "1366x768" 76.50 1366 1402 1450 1546 768 771 776 824 -hsync -vsync
Son a su vez:
resolution
,clock MHz
,hdisp
,hsyncstart
,hsyncend
,htotal
,vdisp
,vsyncstart
,vsyncend
,vtotal
Calcular valores:
CLOCK = 76500 XPIX = hdisp = 1366 XBLANK = htotal - hdisp = 1546 - 1366 = 180 XOFFSET = hsyncstart - hdisp = 1402 - 1366 = 36 XPULSE = hsyncend - hsyncstart = 1450 - 1402 = 48 YPIX = vdisp = 768 YBLANK = vtotal - vdisp = 824 - 768 = 56 YOFFSET = 63 + vsyncstart - vdisp = 63 + 771 - 768 = 66 YPULSE = 63 + vsyncend - vsyncstart = 63 + 776 - 771 = 68 TIMING_NAME "Linux HDR" CRC 0xcd
Versión definitiva
1366x768.S
:$ cat 1366x768.S /* EDID */ #define VERSION 1 #define REVISION 3 /* Display */ #define CLOCK 76500 /* kHz */ #define XPIX 1366 #define YPIX 768 #define XY_RATIO XY_RATIO_16_9 #define XBLANK 180 #define YBLANK 56 #define XOFFSET 36 #define XPULSE 48 #define YOFFSET 66 #define YPULSE 68 #define DPI 96 #define VFREQ 60 /* Hz */ #define TIMING_NAME "Linux HDR" #define ESTABLISHED_TIMINGS_BITS 0x00 /* none */ #define HSYNC_POL 1 #define VSYNC_POL 1 #define CRC 0xcd #include "edid.S"
Compile archivos y verifique si no hay errores usando
edid-decode
(sudo apt-get install edid-decode
):$ make clean && make rm 1920x1080.o 1366x768.o $ ls -1 *.bin 1366x768.bin 1920x1080.bin $ edid-decode 1366x768.bin Extracted contents: header: 00 ff ff ff ff ff ff 00 serial number: 31 d8 00 00 00 00 00 00 05 16 version: 01 03 basic params: 6d 23 14 78 ea chroma info: 5e c0 a4 59 4a 98 25 20 50 54 established: 00 00 00 standard: 8b c0 01 01 01 01 01 01 01 01 01 01 01 01 01 01 descriptor 1: e2 1d 56 b4 50 00 38 30 24 30 35 00 63 c8 10 00 00 1e descriptor 2: 00 00 00 ff 00 4c 69 6e 75 78 20 23 30 0a 20 20 20 20 descriptor 3: 00 00 00 fd 00 3b 3d 30 32 08 00 0a 20 20 20 20 20 20 descriptor 4: 00 00 00 fc 00 4c 69 6e 75 78 20 48 44 52 0a 20 20 20 extensions: 00 checksum: cd Manufacturer: LNX Model 0 Serial Number 0 Made week 5 of 2012 EDID version: 1.3 Analog display, Input voltage level: 0.7/0.7 V Sync: Separate Composite Serration Maximum image size: 35 cm x 20 cm Gamma: 2.20 DPMS levels: Standby Suspend Off RGB color display First detailed timing is preferred timing Established timings supported: Standard timings supported: 1360x816@60Hz Detailed mode: Clock 76.500 MHz, 355 mm x 200 mm 1366 1402 1450 1546 hborder 0 768 771 776 824 vborder 0 +hsync +vsync Serial number: Linux #0 Monitor ranges: 59-61HZ vertical, 48-50kHz horizontal, max dotclock 80MHz Monitor name: Linux HDR Checksum: 0xcd $ edid-decode 1920x1080.bin Extracted contents: header: 00 ff ff ff ff ff ff 00 serial number: 31 d8 00 00 00 00 00 00 05 16 version: 01 03 basic params: 6d 32 1c 78 ea chroma info: 5e c0 a4 59 4a 98 25 20 50 54 established: 00 00 00 standard: d1 c0 01 01 01 01 01 01 01 01 01 01 01 01 01 01 descriptor 1: 02 3a 80 18 71 38 2d 40 58 2c 45 00 f4 19 11 00 00 1e descriptor 2: 00 00 00 ff 00 4c 69 6e 75 78 20 23 30 0a 20 20 20 20 descriptor 3: 00 00 00 fd 00 3b 3d 42 44 0f 00 0a 20 20 20 20 20 20 descriptor 4: 00 00 00 fc 00 4c 69 6e 75 78 20 46 48 44 0a 20 20 20 extensions: 00 checksum: 05 Manufacturer: LNX Model 0 Serial Number 0 Made week 5 of 2012 EDID version: 1.3 Analog display, Input voltage level: 0.7/0.7 V Sync: Separate Composite Serration Maximum image size: 50 cm x 28 cm Gamma: 2.20 DPMS levels: Standby Suspend Off RGB color display First detailed timing is preferred timing Established timings supported: Standard timings supported: 1920x1152@60Hz Detailed mode: Clock 148.500 MHz, 500 mm x 281 mm 1920 2008 2052 2200 hborder 0 1080 1084 1089 1125 vborder 0 +hsync +vsync Serial number: Linux #0 Monitor ranges: 59-61HZ vertical, 66-68kHz horizontal, max dotclock 150MHz Monitor name: Linux FHD Checksum: 0x5
Copiar archivos a
/lib/firmware/edid
$ sudo cp *.bin /lib/firmware/edid
Actualización
initramfs
, el script de enlace debería agregar archivos editados (están ahí, lo he comprobado)$ sudo update-initramfs -u
En el arranque, edite la línea de comando de grub (presione Mayús en el arranque para mostrar el menú de grub y luego presione
e
) desde:linux /vmlinuz-3.13.0-24-generic root=/dev/mapper/mint--vg-root ro quiet splash $vt_handoff
a
linux /vmlinuz-3.13.0-24-generic root=/dev/mapper/mint--vg-root ro quiet splash $vt_handoff drm_kms_helper.edid_firmware=card0-LVDS-1:/lib/firmware/edid/1366x768.bin drm_kms_helper.edid_firmware=card0-HDMI-A-1:/lib/firmware/edid/1920x1080.bin
También intenté configurarlo solo para un monitor. Pero no hubo suerte en absoluto. Estoy empezando a pensar que no es un problema de resolución sino de la imagen del Plymouth en sí. Cuando veo la imagen de arranque, no está borrosa, estirada ni nada parecido y el logotipo de Linux Mint es nítido y claro. Es simplemente más pequeño que mi pantalla y está ubicado en la parte superior izquierda de mi computadora portátil y en la pantalla HDMI.
He encontradoeste errorEso es muy similar a mi problema. Entonces creo que debo esperar a que solucionen esto.
Respuesta1
Su monitor proporciona información sobre sí mismo mediante un estándar digital llamado EDID. El kernel lee esta información cuando detecta un dispositivo de visualización y configura automáticamente su pantalla para que coincida lo más posible con la del dispositivo de visualización.nativoresolución. En realidad, los dispositivos LCD sólo pueden admitir una resolución: sunativoresolución - yemulartodos los otros. DeWikipedia:
Datos de identificación de pantalla ampliada(EDID)es una estructura de datos proporcionada por una pantalla digital para describir sus capacidades a una fuente de vídeo (por ejemplo, tarjeta gráfica o decodificador). Es lo que permite a una computadora personal moderna saber qué tipos de monitores están conectados a ella. EDID está definido por un estándar publicado por la Video Electronics Standards Association (VESA). El EDID incluye el nombre del fabricante y el número de serie, el tipo de producto, el tipo de fósforo o filtro, los tiempos admitidos por la pantalla, el tamaño de la pantalla, los datos de luminancia y (solo para pantallas digitales) los datos de mapeo de píxeles.
El problema con esto es que muy a menudo el proporcionadoedidesequivocadoo de alguna manera corrupto; esto generalmente se debe a que los fabricantes son perezosos o equivocados y tienen que programar esa información en el firmware del dispositivo. Incluso puede deberse a un cable HDMI defectuoso, pero las posibilidades de que esto ocurra son mucho menores ya que un cable digital esmuchoes más probable que simplemente no funcione en absoluto. Pero hay otras posibilidades, si usas KMS probablemente encontrarás esto interesante:
Hoy en día, con la llegada de la configuración del modo Kernel, una tarjeta gráfica funciona correctamente porque todos los componentes siguen los estándares, o la computadora no se puede utilizar porque la pantalla permanece oscura después del arranque o muestra el área incorrecta. Los casos en los que esto sucede son:
La tarjeta gráfica no reconoce el monitor.
La tarjeta gráfica no puede detectar ningún dato EDID.
La tarjeta gráfica envía incorrectamente datos EDID al controlador.
El monitor no envía datos EDID falsos o no los envía.
Un KVM envía sus propios datos EDID en lugar de consultar el monitor conectado.
Agregar el parámetro del kernel "nomodeset" ayuda en la mayoría de los casos, pero causa restricciones más adelante.
∆Eso∆es un extracto deEl propio HOWTO.txt de kernel.orgpara KMS EDID. Ese archivo de texto se encuentra en elmisma carpetacomo cinco EDID de resolución estándar que puede proporcionar al kernel en el arranque a través de un parámetro del kernel e initramfs para omitir el EDID proporcionado por su monitor.
Si está utilizando uno de los controladores de pantalla de código abierto, está utilizando la configuración del modo kernel y puede, por ejemplo, utilizar cualquiera de los cinco ajustes preestablecidos de omisión de resolución KMS EDID ya mencionados. Alternativamente, puede proporcionar su propio archivo EDID completo que utilizará el kernel en lugar de la información proporcionada por el dispositivo de visualización.
Veresta secciónde la wiki de Arch Linux para obtener más información, pero probablementeeste hilo de AskUbuntuestaría mejor orientado hacia su distribución.
Si no está utilizando KMS y en su lugar utiliza los controladores de código cerrado nvidia o AMD, hasta donde yo sé, sus posibilidades de manejar las resoluciones de tiempo de arranque de manera confiable son casi nulas. Es posible configurarlos en grub
otro gestor de arranque.antesse monta cualquier imagen initramfs, pero la probabilidad de que hacerlo interfiera más tarde con la configuración de resolución de los controladores de código cerrado cuando X
se inicia es bastante alta. Si usted esmuyAfortunadamente, el fabricante de su placa base le ha proporcionado amablemente una configuración en el firmware UEFI para configurar la resolución del tiempo de arranque y puede configurarla allí incluso antes de que se grub
cargue cualquier cargador de arranque secundario. Aunque personalmente nunca he conocido a nadie con tanta suerte.