Los monitores con una resolución de 4K ya no se consideran parte de la burguesía y gradualmente están entrando en la vida de la gente común. Así como monitores de otras altas resoluciones. Hace un par de años, dije sobre el soporte de tales monitores en Linux, diciendo que "más bien no que sí". Parecía haber soporte, pero la cantidad de problemas técnicos con él hizo que todo el proceso no tuviera sentido, y realmente quería cambiar el monitor a una resolución más baja. Lo que algunos monitores 4K no permiten en Linux hasta ahora. El hecho es que los controladores de NVidia, cuando se conectan a través de DisplayPort, creen ingenuamente el EDID del monitor, y si solo se escribe una resolución máxima allí, no permiten configurar ninguna otra. Debe volver a Nouveau o configurar HiDPI. ¡Lo personalizaremos! (El artículo está dirigido a una persona que conoce los conceptos básicos de Linux y qué es un servidor X).
Sobre DPI en general y HiDPI en particular
DPI (puntos por pulgada) es un valor que indica cuántos píxeles de la pantalla son el centímetro físico de su área. Si el monitor funciona en una resolución no nativa, estamos hablando de píxeles de resolución virtual. Desde la antigüedad hasta hace muy poco, 96 DPI era el estándar, es decir, los monitores ordinarios, si diferían de él, eran tanto que esto podría descuidarse. 120 DPI fue una vez el valor máximo que se probó comúnmente.
No es sorprendente que, durante tantos años, los desarrolladores de software hayan tomado este valor como una constante inquebrantable. De repente vinieron monitores con 160-192 DPI y comenzó. Todos los programas que al menos un cierto tamaño en la interfaz se configuraron en píxeles recibieron paneles que se superponían entre sí, firmas recortadas a la primera letra y botones, por los cuales debe otorgar un premio en efectivo por presionar con éxito.
La palabra HiDPI se refiere a la situación en monitores con DPI> 160. El DPI del sistema operativo no es necesariamente igual al DPI de la pantalla. Por el contrario, los sistemas DPI se pueden torcer para hacer que la interfaz sea más grande y más pequeña. Además, los sistemas distinguen entre DPI de todo, DPI de fuentes y DPI dado a aplicaciones de pantalla completa.
¿Qué hay de los demás?
Makos ayudó a su gobierno autoritario. Como casi todos los programas crean su interfaz a través de la misma API, simplemente se solucionó y funcionó de inmediato. Las jambas indestructibles separadas solo enfatizan cuán bueno es todo en general.
Android nació en sistemas con una gran extensión de DPI, por lo que fue capaz de hacer todo desde el mismo pañal, y los libros de texto para programadores tomaron esto en cuenta.
Windows siempre permitió que las fuentes DPI se torcieran. Aquí hay solo gráficos DPI de esto no ha cambiado. Los elementos individuales cambiaron su tamaño porque estaban vinculados al tamaño de la fuente o pantalla. Pero los tamaños especificados en píxeles no cambiaron de esto. En Win 10, finalmente, hubo soporte normal de HiDPI, pero solo para los programas escritos para Win 10. Se escribió una muleta para el resto, lo que es solo un aumento gráfico en la ventana del programa con la traducción de la posición de los clics. Al hacer zoom, la ventana se vuelve borrosa y la transmisión funciona de manera torcida. La peor parte es que este aumento está tratando de comenzar también para aplicaciones de pantalla completa, por lo que para jugar, debes apagarlo y, para trabajar, encenderlo.
¿Qué hay de Linux?
Y en Linux, como siempre, una bacanal. Tenemos dos conjuntos principales para la GUI (Qt y GTK), cada uno de los cuales ha sobrevivido relativamente recientemente a la reescritura desde cero, por lo que las versiones antiguas y nuevas todavía están en uso. Además de algunos conjuntos más pequeños (EFL, wxWidgets). Además de varios idiomas que usan sus herramientas para esto, por ejemplo Java. Además de algunas bibliotecas antiguas en las que nadie escribe, pero el software necesario aún existe en ellas. (GTK 1, Motivo) Incluso si el servidor X y el administrador de ventanas manejan correctamente el DPI, no es un hecho que todo este zoológico aceptará esta información y funcionará bien.
Hay muchas cosas que quizás no te gusten de Ubuntu con Unity, pero una cosa tengo que decir. No sé cómo configurar HiDPI en Unity porque todo siempre salió de la caja. Todos los demás DE: Cinnamon, KDE, XFCE, también tienen una bandera correspondiente. Este indicador establece el propio DE, las aplicaciones escritas en su biblioteca principal (solo la nueva versión) y un par de indicadores para Qt / GTK. Y el resto es de lado. Como resultado, por ejemplo, en los jugadores, el botón Reproducir sigue siendo pequeño. Y los iconos de la bandeja son pequeños, pero no todos. Un año después de tal sistema, y la persona en Overwatch juega solo para McCrack, porque la persona tiene una precisión de píxel por píxel en el mouse y odia a todos.
Hablaré sobre cómo configurar KDE. No según las instrucciones, sino para que todo funcione. Deadbeef, Yakuake, Blender. Lo revisé principalmente en Arch. En otras distribuciones, puede ser que algo de lo que describo ya se haya hecho o hecho de manera diferente. Piensa con la cabeza o escribe en los comentarios, lo resolveremos.
Configuración X
Lo primero que debe verificar es si X sabe que tenemos HiDPI. Para hacer esto, necesitamos el softink
xdpyinfo
, está en el nabo. Establezca, si no está instalado, la resolución nativa del monitor (y reinicie X). Ejecutar en la consola dentro de la X (es decir, no con Ctrl-Alt-F *).
xdpyinfo | grep -B 2 resolution screen
Vemos tres pares de valores: resolución de pantalla, tamaños de pantalla reales y DPI (por separado vertical y horizontalmente). Si los tres pares son similares a la verdad, aléjese del monitor y felicite a la entidad más alta de su elección; porque si xdpyinfo devuelve tonterías y DPI = 96, entonces tu ser superior te envía tribulaciones.
Las causas más comunes de DPI incorrectos son las curvas EDID y la leña de marca en la tarjeta de video. No diré nada sobre las tarjetas de video ATi, ya que las estoy evitando. No es que sean malos, pero ATi + Linux = problemas innecesarios. Con Intel, todo debería funcionar. NVidia hasta DPI tercamente podrido recientemente. Primero, apague G-sync en
nvidia-settings
, de todos modos, ningún administrador compuesto es amigo de él. Si eso no ayuda, habilite KMS. Kernel Mode Setting es el método por el cual el kernel de Linux, en lugar de X, administra la resolución de la pantalla. Además del uso directo, esto le permite sortear muchos códigos con errores hace 20 años en X. Desafortunadamente, el procedimiento para habilitar KMS en controladores propietarios de Nvidia depende de la distribución, por lo que lo describiré solo en términos generales.
nvidia, nvidia_modeset, nvidia_uvm, nvidia_drm
agregar los módulos
nvidia, nvidia_modeset, nvidia_uvm, nvidia_drm
en initramfs, reconstruirlo y luego agregar el parámetro
nvidia-drm.modeset=1
al kernel. Google
Si en el párrafo anterior no entendió nada, simplemente puede abandonar la leña de la marca NVidia y usar Nouveau por ahora, allí KMS está listo para usar. En Kubunt, esto se hace a través de un programa que gestiona los controladores.
Si todo lo anterior no ayuda y xdpyinfo todavía escribe basura, entonces quizás los controladores de video sean los culpables de las curvas EDID del monitor. Primero, ejecute
xrandr --dpi 192
en la misma consola. Y ejecuta algún programa. Si se ha vuelto más grande, entonces el método funciona. Pegue este comando en
.xprofile
y reinicie
.xprofile
En el futuro hablaré mucho sobre
.xprofile
. Este es un archivo en la carpeta de inicio de cada usuario que configura el funcionamiento de las aplicaciones gráficas. Si no, simplemente
touch ~/.xprofile
:
touch ~/.xprofile
. Si todo funcionó - ¡Hurra! Si no, primero verifique que su distribución no tenga soporte para
.xprofile
cortado de KDE. ¿Por qué agregar algo como
touch ~/net_ne_vyrezali
y reiniciar nuevamente?
¿Aún no funciona? Registremos DPI en X manualmente. Cree, si aún no, el archivo
/etc/X11/xorg.conf.d/90-monitor.conf y escriba en él:
Section "Monitor" Identifier "Prikolny monitor" DisplaySize 286 179
Y para leña de marca Nvidia
Section "Monitor" Identifier "Prikolny monitor" Option "DPI" "192 x 192" EndSection
Tenga en cuenta que en todas partes establezco el valor de DPI forzado en 192, o más bien en cualquier valor que sea un múltiplo de 96. Funciona con mayor precisión que el DPI real, porque es un gladiolo. Aquí funciona la paradoja del diseñador:
- Si DPI es un múltiplo de 96, las fuentes se representan mejor en aplicaciones que funcionan con texto. Especialmente en las aplicaciones de El Cairo.
- Si el DPI es igual al DPI real del monitor, entonces la escala 1: 1 en la pantalla tendrá el mismo tamaño que en el papel.
Escribí el estúpido nombre del monitor para que en todas las utilidades gráficas se pueda ver que nuestra configuración se está leyendo e intentando aplicar.
Guarda, reinicia X y regocíjate. O bebe amargo y espera a que Wayland lo termine.
Configuración en KDE
Entonces, finalmente, configuramos HiDPI en KDE correctamente. En el
menú → Configuración del sistema → Pantalla y monitor en la parte inferior hay un gran botón de
Escala de pantalla . Al presionarlo, aparece una ventana con un solo control deslizante
Escala . Ahora atencion! Si aún no pudo configurar DPI en X, cierre este artículo, configure el valor del control deslizante al gusto y disfrute de lo que funciona. Y lo que no funciona: conciliar (esto suele ser Chrome, Skype, QtCreator, Yakuake, GTK).
Si el DPI en Xs es correcto, ¡no toque este control deslizante! Idealmente, ni siquiera lo tuerzas de un lado a otro, porque, al parecer, él está escribiendo algo en alguna parte. Cierra esta ventana nafig. Según la
publicación de blog del creador de este control deslizante (sal en los comentarios), anula el DPI del sistema y establece algunas variables más. El problema es que no todos los programas ven esta redefinición, y resulta ser un desastre. Por lo tanto, no tocaremos el control deslizante, sino que configuraremos todo manualmente.
En general, en esta etapa, si el DPI es correcto, entonces todo debería ser lo suficientemente grande. Vaya a
Configuración del sistema → Fuentes . De forma predeterminada, hay un tamaño de fuente de 11. Si 10-14 es suficiente para lograr la armonía, póngalo, las aplicaciones se pondrán al día. Si es más o menos, tiene sentido intentar subsistema DPI como se describió anteriormente. A continuación se muestra el campo Force Font DPI. Puede girarlo si lo desea, pero tenga en cuenta que no todas las aplicaciones leen este valor. Ni siquiera eso. Algunas aplicaciones no leen este valor en todas sus partes. Entonces, si intenta arreglar el DPI del sistema en 96 aquí, habrá un desastre. Pero puede elevar el DPI 167 del monitor al 192 ideal.
Cierre la ventana de fuentes. En general, ahora es el momento de reiniciar la X y ver qué pasó. Deben funcionar y tener un tamaño KDE conveniente, todas sus configuraciones y aplicaciones. El panel de plasma, por cierto, no crecerá solo. Pero es vectorial, y siempre puede estirarlo: haga clic en el emparedado a la izquierda y aparecerán botones. Además, el tamaño en Dolphin debe establecerse manualmente. Si, en otro lugar de las aplicaciones de KDE, los botones y los paneles son demasiado pequeños, debe ajustar el tamaño de los íconos en Configuración del sistema → Iconos.
Configuramos otras aplicaciones
Chrome, Atom y otros
Estas aplicaciones leen DPI directamente de donde viene y lo siguen como el código de un caballero. Si leen algo mal, se verán mal de alguna manera. Por lo general, ignoran la configuración en Configuración del sistema y siguen el DPI que devuelve xdpyinfo. Si hay 96, entonces para Chrome puedes usar el argumento
--force-device-scale-factor=2
, para Atom hay un plugin de curva
hidpi
en el nabo oficial, para otros programas sus muletas.
QtCreator, Yakuake y otras aplicaciones Qt5
En general,
deberían funcionar . Pero QtCreator a veces no escala la barra de herramientas, mientras que Yakuake no tiene la barra de pestañas. La razón está en el error y en la variable de entorno
QT_AUTO_SCREEN_SCALE_FACTOR
. Cuando es igual a
1
, Qt5 intenta encontrar el valor de DPI por sí mismo, y cuando es
0
, espera que este valor se le dé en otras variables. El error es que KDE pasa basura.
En resumen, estas aplicaciones necesitan establecer la variable
QT_AUTO_SCREEN_SCALE_FACTOR=1
y todo funcionará. Esto se puede hacer de forma selectiva o global. Selectivamente en el Editor de menús. Solo recuerde agregar la aplicación al panel y ejecutar automáticamente más tarde. Esto se debe a que las entradas de .desktop se copian, no se vinculan. La segunda opción es establecer esta variable en todo el sistema, en
.xprofile o incluso
/ etc / environment , o donde las variables se escriben en su distribución. Hay dos matices. Primero, KDE restablece por la fuerza esta variable a 0 en el
script / usr / bin / startkde . Deberá abrirlo y editarlo
#export QT_AUTO_SCREEN_SCALE_FACTOR=0
la línea
#export QT_AUTO_SCREEN_SCALE_FACTOR=0
. Después de eso, recuerde repetir este parche cada vez que se actualiza KDE. La segunda advertencia es que los desarrolladores de KDE advierten en los comentarios: establecer esta variable a nivel mundial puede hacer que algunas aplicaciones Qt5 tengan un doble impulso. Pero esto no me está pasando. Además, si el DPI del sistema es incorrecto, debe configurar la variable
QT_SCALE_FACTOR=2
en
.xprofile .
Recuerde que la variable
QT_DEVICE_PIXEL_RATIO
desuso. Si lo pones en algún lugar, debes eliminarlo.
Aplicaciones Qt4
Estas aplicaciones, en general, no son buenas en HiDPI. Pero no todo está perdido. Qt4 crea una interfaz muy flexible. Ejecute
qtconfig-qt4
. Primero, mira la fuente y establece un tamaño conveniente. Luego, en la pestaña Interfaz, busque una muleta llamada "
puntal global " (en traducción, una muleta global). Esta configuración significa que las instancias de QWidget y sus descendientes no pueden ser más pequeños que este tamaño en píxeles, independientemente de lo que hagan. Usando el
Ancho mínimo puede establecer el ancho de las barras de desplazamiento, y usando la
Altura mínima , la altura de las barras de herramientas.
Aplicaciones GTK3
Todo es simple aquí. Necesita establecer dos variables en
.xprofile :
GDK_SCALE=2
Comando GTK para aumentar todo en 2 veces. El valor debe ser un entero.
GDK_DPI_SCALE
ajusta la ampliación de la fuente. Si después de
GDK_SCALE
fuentes son enormes, debe configurar
GDK_DPI_SCALE=0.5
Aplicaciones GTK2
Aquí todo es complicado. GTK2 no sabe cómo HiDPI. Pero hay un hack. Softina llamado Oomox es un generador de temas (skins) para GTK. Incluyendo, con su ayuda, puede recopilar dicho tema en GTK2, que imitará HiDPI. O encuentre un tema
listo .
Aplicaciones en Qt3, Gtk1, Motif
Aquí todo es muy complicado. Hay dos posibles hacks. Primero, puede aprovechar la capacidad de Kwin para ampliar toda la pantalla.
Configuración del sistema → Efectos de escritorio → Efectos de escritorio → Zoom . El botón central a la izquierda es la configuración, incluidas las teclas para encender y apagar. La segunda forma es ejecutar la aplicación en el servidor de escritorio remoto y conectarse localmente. Simplemente insertaré un
enlace al script , porque configurarlo es cuestión de un artículo separado.
Aplicaciones Java
Los programas Java más geniales y comerciales se comportan como Chrome: leen DPI de X y lo siguen.
-Dsun.java2d.uiScale=2
programas
-Dsun.java2d.uiScale=2
se pueden arreglar con uno de dos argumentos:
-Dsun.java2d.uiScale=2
aumenta la interfaz en 2 veces y
-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel
le dice que use las dimensiones de GTK para dibujar . Permítame recordarle que en
.xprofile puede crear
export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'
variable
export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'
. Este ejemplo incluye anti-aliasing en fuentes y GTK.
Bueno, de alguna manera