Kernel mode setting (Español)

Related articles
ATI (Español)
Intel graphics (Español)
Nouveau (Español)
Esta traducción de
Kernel mode setting
fue revisada el
2024-02-29
. Si existen
cambios
puede
actualizarla
o avisar al
equipo de traducción
.
Kernel
Mode Setting
(KMS) es un método para configurar la resolución y profundidad de la pantalla en el espacio del kernel en lugar del espacio del usuario.
La implementación de KMS en el kernel de Linux permite la resolución nativa en el framebuffer y el cambio instantáneo de consola (tty).  KMS también habilita tecnologías más recientes (como
DRI2
) que ayudarán a reducir los "artifacts" y aumentar el rendimiento 3D, incluso el ahorro de energía en el espacio del núcleo.
Note
El controlador propietario
NVIDIA
(desde 364.12) también implementa la configuración modesetting, pero no utiliza la implementación integrada del kernel y un controlador fbdev para la consola de alta resolución sólo está presente como una función experimental opcional (desde 545.29).
Información
Anteriormente, la configuración de la tarjeta de vídeo era tarea del servidor X. Debido a esto, no era fácilmente posible tener gráficos de alta calidad en
consolas virtuales
. Además, cada vez que se cambiaba de X a una consola virtual (
Ctrl+Alt+F2
), el servidor tenía que ceder el control de la tarjeta de vídeo al kernel, lo que era lento y provocaba parpadeos. El mismo "doloroso" proceso  ocurría cuando se devolvía el control al servidor X (
Alt+F7
cuando X se ejecuta en VT7).
Con Kernel Mode Setting (KMS), el kernel es ahora capaz de establecer el modo de la tarjeta de vídeo. Esto hace posible los gráficos de alta calidad durante el arranque, la consola virtual, poder cambiar rápidamente a X y entre otras cosas.
Instalación
Al principio, ten en cuenta que para
cualquier
método desees utilizar, deberías
siempre
deshabilitar:
Cualquier opción
vga=
en el cargador de arranque, ya que entrará en conflicto con la resolución nativa activada por KMS.
Cualquier línea
video=
que active un framebuffer que entre en conflicto con el controlador.
Inicio tardío de KMS
Los controladores
Intel
,
Nouveau
,
ATI
y
AMDGPU
ya habilitan KMS automáticamente para todos los chipsets, por lo que no es necesario instalarlo manualmente.
El controlador propietario
NVIDIA
soporta KMS (desde la versión 364.12) y tiene que ser
habilitado manualmente
.
Inicio anticipado de KMS
Sugerencia
Si tienes problemas con la resolución, puedes comprobar si
forzar el "modo"
te ayuda.
KMS se inicializa normalmente después de la etapa
initramfs
. Sin embargo, es posible habilitar KMS durante la etapa initramfs. Añada el módulo necesario para el
controlador de vídeo
[
enlace roto
: sección no válida]
al fichero de configuración initramfs:
amdgpu
para
AMDGPU
, o
radeon
cuando se utiliza el controlador
ATI
heredado.
i915
para
gráficos Intel
.
nouveau
para el controlador
Nouveau
de código abierto.
nvidia nvidia_modeset nvidia_uvm nvidia_drm
para los controladores que no están dentro del kernel
nvidia
[
enlace roto
: package not found]
y
nvidia-open
. Vea
NVIDIA (Español)#DRM kernel mode setting
para más detalles.
mgag200
para gráficos Matrox.
Dependiendo de los gráficos
QEMU
en uso (
qemu
opción
-vga
tipo
} o
libvirt
<video><model type='
type
'>
[1]
):
bochs
para
std
(
qemu
) y
vga
/
bochs
(
libvirt
),
virtio-gpu
para
virtio
,
qxl
para
qxl
,
vmwgfx
para
vmware
(
qemu
) y
vmvga
(
libvirt
),
cirrus
para
cirrus
.
Dependiendo del controlador gráfico de
VirtualBox
:
vmwgfx
para VMSVGA,
vboxvideo
para VBoxVGA o VBoxSVGA.
Las instrucciones de configuración para initramfs son ligeramente diferentes dependiendo del generador de initramfs que utilices.
mkinitcpio
Para módulos dentro del kernel, añada
kms
a la matriz HOOKS en
/etc/mkinitcpio.conf
.
Para los módulos fuera del kernel, coloque los nombres de los módulos en la matriz MODULES. Por ejemplo, para activar KMS anticipado para el controlador de gráficos NVIDIA:
/etc/mkinitcpio.conf
MODULES=(... nvidia nvidia_modeset nvidia_uvm nvidia_drm ...)
Nota
Si utilizas una Unidad de procesamiento gráfico (GPU) con una tarjeta grafica integrada Intel (IGP) como GPU principal y AMD como discreta usando
PRIME
, el modulo
intel_agp
puede dar problemas al reanudar desde la hibernación (el monitor no recibe señal). Consulte
[2]
para más detalles.
Si está utilizando el método
#Forzar modos y EDID
, debe incrustar el archivo personalizado en
initramfs
también:
/etc/mkinitcpio.conf
FILES=(/usr/lib/firmware/edid/
your_edid
.bin)
Luego
regenera el initramfs
.
Booster
Si utiliza
Booster
, puede cargar los módulos necesarios con este cambio de configuración:
/etc/booster.yaml
modules_force_load: i915
Si utiliza el método
#Forzar modos y EDID
, deberá incluir también el archivo personalizado en sus imágenes de Booster:
/etc/booster.yaml
extra_files: /usr/lib/firmware/edid/
your_edid
.bin
Luego
regenera
[
enlace roto
: sección no válida]
las imágenes de booster.
Solución de problemas
Mis fuentes son demasiado pequeñas
Vea
Linux console (Español)#Tipografías
para saber cómo cambiar la fuente de su consola a una fuente grande. La fuente Terminus (
terminus-font
) está disponible en muchos tamaños, como
ter-132b
que es más grande.
Alternativamente,
desactivar modesetting
puede cambiar a una resolución más baja y hacer que las fuentes parezcan más grandes.
Forzar modos y EDID
Si su resolución nativa no se configura automáticamente o no se detecta ninguna pantalla, entonces su monitor podría no enviar ningún o sólo un archivo
EDID
defectuoso. El kernel intentará detectar este caso y establecerá una de las resoluciones más típicas.
En caso de que disponga del archivo EDID de su monitor, basta con aplicarlo explícitamente (vea más abajo). Sin embargo, la mayoría de las veces no se tiene acceso directo a un archivo limpio haciendo necesario extraer uno existente y arreglarlo o generar uno nuevo.
Generar nuevos binarios EDID para varias resoluciones y configuraciones es posible durante la compilación del kernel siguiendo la
documentación de upstream
(vea también
esto
para una breve guía). Otras soluciones se describen en detalle en este
artículo
.
Extraer uno existente es más fácil en la mayoría de los casos, por ejemplo, si tu monitor funciona bien en Windows, puede que tengas suerte extrayendo el EDID del controlador correspondiente, o si funciona un monitor similar que tenga la misma configuración, puedes usar
get-edid
del paquete
read-edid
. También puedes probar a buscar dentro de
/sys/class/drm/*/edid
.
Después de haber preparado tu archivo EDID, colócalo en un directorio, por ejemplo llamado
edid
dentro de
/usr/lib/firmware
y copia tu archivo EDID en él.
Para cargarlo en el arranque, especifique lo siguiente en la
línea de comandos del kernel
:
drm.edid_firmware=edid/your_edid.bin
Para kernels anteriores a 4.13, utilice esta línea en su lugar:
drm_kms_helper.edid_firmware=edid/your_edid.bin
Para aplicarlo sólo a un conector específico, utilice:
drm.edid_firmware=VGA-1:edid/your_edid.bin
Si desea configurar varios archivos edid, utilice:
drm.edid_firmware=VGA-1:edid/your_edid.bin,VGA-2:edid/your_other_edid.bin
Para las resoluciones incorporadas, consulte la siguiente tabla. La columna
Nombre
especifica el nombre que se debe utilizar para imponer su uso.
Resolución
Nombre
800x600
edid/800x600.bin
1024x768
edid/1024x768.bin
1280x1024
edid/1280x1024.bin
1600x1200 (kernel 3.10 o superior)
edid/1600x1200.bin
1680x1050
edid/1680x1050.bin
1920x1080
edid/1920x1080.bin
Si estás utilizando el
#Inicio anticipado de KMS
, debes
incluir el archivo EDID personalizado en el initramfs
, de lo contrario tendrá problemas.
El valor del parámetro
drm.edid_firmware
también puede modificarse después del arranque escribiendo en
/sys/module/drm/parameters/edid_firmware
:
# echo edid/your_edid.bin > /sys/module/drm/parameters/edid_firmware
Esto sólo afectará a las pantallas recién conectadas, las pantallas ya conectadas seguirán utilizando su configuración EDID existente. Sin embargo, para las pantallas externas, basta con volver a conectarlas para que surta efecto.
Desde el kernel 3.15, para cargar un EDID después del arranque, puede utilizar debugfs en lugar de un parámetro de línea de comandos del kernel si éste no está en con la
restricción de acceso al kernel
.  Esto es muy útil si intercambias los monitores en un conector o simplemente para hacer pruebas.  Una vez que tengas un archivo EDID como el anterior, ejecuta:
# cat correct-edid.bin > /sys/kernel/debug/dri/0/HDMI-A-2/edid_override
Y para desactivar:
# echo -n reset > /sys/kernel/debug/dri/0/HDMI-A-2/edid_override
Si su monitor admite
conexión en caliente
, también puede hacer una conexión en caliente para que el monitor utilice el nuevo EDID que acaba de cargar (por ejemplo, en
edid_override
), de modo que no tenga que volver a conectar físicamente el monitor ni reiniciarlo:
# echo 1 > /sys/kernel/debug/dri/0/HDMI-A-2/trigger_hotplug
Forzar modos
Advertencia
El método descrito a continuación es en cierto modo incompleto porque, por ejemplo,
Xorg
no tiene en cuenta la resolución especificada, por lo que se recomienda a los usuarios que utilicen el método descrito anteriormente. Sin embargo, especificar la resolución con
video=
línea de comandos puede ser útil en algunos escenarios.
De la
wiki de Nouveau
:
Se puede forzar un modo usando la línea de comandos del kernel. Desafortunadamente, la opción de línea de comandos
video
está my poco documentada en el caso DRM. Fragmentos de cómo usarlo se pueden encontrar en
https://docs.kernel.org/fb/modedb.html
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/drm_fb_helper.c
El formato es:
video=<conn>:<xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]
<conn>
: Conector, por ejemplo DVI-I-1, vea
/sys/class/drm/
para los conectores disponibles.
<xres> x <yres>
: resolución
M
: ¿calcular un modo CVT?
R
: ¿blanqueo reducido?
-<bpp>
: profundidad de color
@<refresh>
: frecuencia de actualización
i
: entrelazado (modo no-CVT)
m
: ¿márgenes?
e
: salida forzada habilitada
d
: salida forzada deshabilitada
D
: salida digital forzada habilitada (p.ej. conector DVI-I)
Puedes anular los modos de varias salidas utilizando
video=
varias veces, por ejemplo, para forzar
DVI
a
1024x768
a
85 Hz
y
TV-out
desactivado:
video=DVI-I-1:1024x768@85 video=TV-1:d
Para obtener el nombre y el estado actual de los conectores, puede utilizar el siguiente script de una linea:
$ for p in /sys/class/drm/*/status; do con=${p%/status}; echo -n "${con#*/card?-}: "; cat $p; done
DVI-I-1: connected
HDMI-A-1: disconnected
VGA-1: disconnected
Desactivar modesetting
Es posible que desee desactivar KMS por varias razones. Para desactivar KMS, añada
nomodeset
como parámetro del kernel. Vea
parametros del kernel
para más información.
Junto con el parámetro del kernel
nomodeset
, para una tarjeta gráfica Intel, necesitaras añadir
i915.modeset=0
, y para una tarjeta gráfica Nvidia, necesitaras añadir
nouveau.modeset=0
. Para un sistema gráfico dual
NVIDIA Optimus
, necesitaras añadir los tres parámetros del kernel (es decir,
"nomodeset i915.modeset=0 nouveau.modeset=0"
).
Nota
Algunos controladores
Xorg
no funcionarán con KMS desactivado. Consulte la página wiki de su controlador específico para más detalles.