Les moniteurs avec une résolution de 4K ne sont plus considérés comme le lot de la bourgeoisie et entrent progressivement dans la vie des gens ordinaires. Ainsi que des moniteurs d'autres hautes résolutions. Il y a quelques années, j'ai parlé de la prise en charge de tels moniteurs sous Linux, en disant "plutôt non que oui". Il semblait y avoir un support, mais le nombre de problèmes avec lui rendait l'ensemble du processus inutile, et je voulais vraiment passer le moniteur à une résolution inférieure. Ce que certains moniteurs 4K n'autorisent pas jusqu'à présent sous Linux. Le fait est que les pilotes NVidia, lorsqu'ils sont connectés via DisplayPort, croient naïvement à l'EDID du moniteur, et si une seule résolution maximale y est écrite, ils ne vous permettent pas d'en définir une autre. Vous devez soit revenir à Nouveau ou configurer HiDPI. Nous personnaliserons! (L'article est destiné à une personne qui connaît les bases de Linux et ce qu'est un serveur X).
À propos de DPI en général et de HiDPI en particulier
DPI (points par pouce) est une valeur qui indique combien de pixels de l'écran sont le centimètre physique de sa zone. Si le moniteur fonctionne en résolution non native, alors nous parlons de pixels de résolution virtuelle. De l'Antiquité à très récemment, le 96 DPI était la norme - c'est-à-dire que les moniteurs ordinaires, s'ils en différaient, étaient si importants que cela pouvait être négligé. 120 DPI était autrefois la valeur maximale communément testée.
Sans surprise, depuis tant d'années, les développeurs de logiciels ont pris cette valeur comme une constante inébranlable. Soudain, des moniteurs avec 160-192 DPI sont arrivés et tout a commencé. Tous les programmes qui au moins une certaine taille dans l'interface ont été spécifiés en pixels ont reçu des panneaux qui se chevauchaient, des signatures coupées à la première lettre et des boutons, pour lesquels vous devez donner un prix en espèces pour une pression réussie.
Le mot HiDPI fait référence à la situation sur les moniteurs avec DPI> 160. Le DPI du système d'exploitation n'est pas nécessairement égal au DPI de l'écran. Au contraire, les systèmes DPI peuvent être tordus afin d'agrandir et de réduire l'interface. De plus, les systèmes distinguent le DPI de tout, le DPI des polices et le DPI donné aux applications plein écran.
Et les autres?
Makos a aidé son régime autoritaire. Étant donné que presque tous les programmes créent leur interface via la même API, elle a été simplement corrigée et cela a fonctionné immédiatement. Les jambages indestructibles séparés ne font que souligner à quel point tout est bon dans l'ensemble.
Android est né sur des systèmes avec une large répartition DPI, il était donc capable de tout faire depuis la couche même, et les manuels pour les programmeurs en tenaient compte.
Windows autorisait toujours la torsion des polices DPI. Voici juste des graphiques DPI de cela n'a pas changé. Les éléments individuels ont changé de taille car ils étaient liés à la taille de la police ou de l'écran. Mais les tailles spécifiées en pixels n'ont pas changé. Dans Win 10, enfin, il y avait un support HiDPI normal, mais uniquement pour les programmes écrits pour Win 10. Pour le reste, une béquille a été écrite qui a simplement fait une augmentation graphique de la fenêtre du programme avec traduction de la position des clics. Le zoom rend la fenêtre floue et la diffusion fonctionne de travers. Le pire, c'est que cette augmentation tente également de démarrer pour les applications en plein écran, donc pour jouer, vous devez l'éteindre et, pour travailler, l'activer.
Et Linux?
Et sous Linux, comme toujours, une bacchanale. Nous avons deux ensembles principaux pour l'interface graphique (Qt et GTK), dont chacun a relativement récemment survécu à la réécriture à partir de zéro, de sorte que l'ancienne et la nouvelle version sont toujours utilisées. Plus quelques petits ensembles (EFL, wxWidgets). Plus plusieurs langages qui utilisent leurs outils pour cela, par exemple Java. Plus quelques anciennes bibliothèques sur lesquelles personne n'écrit, mais le logiciel nécessaire existe toujours dessus. (GTK 1, Motif) Même si le serveur X et le gestionnaire de fenêtres gèrent correctement le DPI, ce n'est pas un fait que tout ce zoo acceptera ces informations et fonctionnera bien.
Il y a beaucoup de choses que vous pourriez ne pas aimer à propos d'Ubuntu avec Unity, mais une chose que je dois dire. Je ne sais pas comment configurer HiDPI dans Unity car tout a toujours fonctionné hors de la boîte. Tous les autres DE: Cinnamon, KDE, XFCE, ont également un indicateur correspondant. Cet indicateur définit DE lui-même, les applications écrites dans sa bibliothèque principale (uniquement la nouvelle version) et quelques indicateurs pour Qt / GTK. Et le reste est de côté. Par conséquent, par exemple, chez les joueurs, le bouton Lecture reste minuscule. Et les icônes des plateaux sont petites, mais pas toutes. Un an après un tel système - et la personne dans Overwatch ne joue que pour McCrack, car la personne a une précision pixel par pixel sur la souris et il déteste tout le monde.
Je vais parler de la façon de configurer KDE. Pas comme indiqué, mais pour que tout fonctionne. Deadbeef, Yakuake, Blender. Je l'ai vérifié principalement dans Arch. Dans d'autres distributions, il se peut qu'une partie de ce que je décris se fasse déjà ou se fasse différemment. Pensez avec votre tête ou écrivez dans les commentaires - nous le découvrirons.
Configuration X
La première chose à vérifier est de savoir si X sait que nous avons HiDPI? Pour ce faire, nous avons besoin du softink
xdpyinfo
- il est dans le navet. Définissez, s'il n'est pas installé, la résolution native du moniteur (et redémarrez X.) Exécutez dans la console à l'intérieur du X (c'est-à-dire, pas par Ctrl-Alt-F *).
xdpyinfo | grep -B 2 resolution screen
Nous voyons trois paires de valeurs - résolution d'écran, tailles d'écran réelles et DPI (séparément, verticalement et horizontalement) Si les trois paires sont similaires à la vérité, détournez-vous du moniteur et félicitez l'entité la plus élevée de votre choix; car si xdpyinfo renvoie un non-sens et DPI = 96, alors votre être supérieur vous envoie des tribulations.
Les causes les plus courantes de DPI incorrects sont les courbes EDID et le bois de chauffage de marque sur la carte vidéo. Je ne dirai rien sur les cartes vidéo ATi, car je les évite. Non pas qu'ils soient mauvais, mais ATi + Linux = problèmes inutiles. Avec Intel, tout devrait fonctionner. NVidia jusqu'à récemment obstinément DPI pourri. Tout d'abord, désactivez G-sync dans
nvidia-settings
, de toute façon, aucun gestionnaire composite n'est ami avec lui. Si cela ne vous aide pas, activez KMS. Le paramètre de mode du noyau est la méthode par laquelle le noyau Linux, plutôt que X, gère la résolution d'écran. En plus de l'utilisation directe, cela vous permet de contourner beaucoup de code buggé il y a 20 ans dans X. Malheureusement, la procédure d'activation de KMS sur les pilotes Nvidia propriétaires dépend de la distribution, donc je ne la décrirai qu'en termes généraux. Vous devez ajouter les modules
nvidia, nvidia_modeset, nvidia_uvm, nvidia_drm
dans initramfs, le reconstruire, puis ajouter le paramètre
nvidia-drm.modeset=1
au noyau. Google.
Si dans le paragraphe précédent vous n'avez rien compris, vous pouvez simplement abandonner le bois de chauffage de marque NVidia et utiliser Nouveau pour l'instant - KMS est prêt à l'emploi. Dans Kubunt, cela se fait via un programme qui gère les pilotes.
Si tout ce qui précède n'aide pas et que xdpyinfo écrit toujours des ordures, alors peut-être les pilotes vidéo, mais les courbes EDID du moniteur sont à blâmer. Tout d'abord, exécutez
xrandr --dpi 192
dans la même console. Et lancez un programme. S'il est devenu plus grand, la méthode fonctionne. Collez cette commande dans
.xprofile
et redémarrez
.xprofile
À l'avenir, je parlerai beaucoup de
.xprofile
. Il s'agit d'un fichier dans le dossier de départ de chaque utilisateur qui configure le fonctionnement des applications graphiques. Sinon, créez-le simplement:
touch ~/.xprofile
. Si tout fonctionnait - Hourra! Si ce n'est pas le cas, vérifiez d'abord que votre distribution ne prend pas en charge le
.xprofile
dans KDE. Pourquoi ajouter quelque chose comme
touch ~/net_ne_vyrezali
et redémarrer à nouveau.
Vous ne travaillez toujours pas? Enregistrons DPI dans X manuellement. Créez, si ce n'est déjà fait, le fichier
/etc/X11/xorg.conf.d/90-monitor.conf et écrivez-y:
Section "Monitor" Identifier "Prikolny monitor" DisplaySize 286 179
Et pour le bois de chauffage de marque Nvidia
Section "Monitor" Identifier "Prikolny monitor" Option "DPI" "192 x 192" EndSection
Veuillez noter que partout où je fixe la valeur DPI forcée à 192, ou plutôt à toute valeur qui est un multiple de 96. Cela fonctionne plus précisément que le vrai DPI, car il s'agit d'un glaïeul. Ici, le paradoxe du designer fonctionne:
- Si DPI est un multiple de 96, les polices sont mieux rendues dans les applications qui fonctionnent avec du texte. Surtout dans les applications du Caire.
- Si le DPI est égal au DPI réel du moniteur, alors l'échelle 1: 1 sur l'écran sera de la même taille que sur le papier.
J'ai écrit le nom stupide du moniteur afin que dans tous les utilitaires graphiques, on puisse voir que notre configuration est en cours de lecture et tente de s'appliquer.
Enregistrez, redémarrez X et réjouissez-vous. Ou buvez amèrement et attendez que Wayland le termine.
Configuration dans KDE
Donc, enfin, nous configurons correctement HiDPI dans KDE. Dans le
menu → Paramètres système → Affichage et moniteur tout en bas se trouve un grand bouton d'
affichage à l'échelle . En appuyant dessus, une fenêtre avec un seul curseur d'
échelle apparaît. Maintenant attention! Si vous ne parvenez toujours pas à configurer DPI dans Xs, fermez cet article, définissez la valeur du curseur à votre goût et profitez de ce qui fonctionne. Et ce qui ne fonctionne pas - réconcilier (Il s'agit généralement de Chrome, Skype, QtCreator, Yakuake, GTK).
Si le DPI dans Xs est correct, ne touchez pas ce curseur! Idéalement, ne le tordez même pas d'avant en arrière, car il semble qu'il écrit quelque chose quelque part. Fermez cette fenêtre nafig. Selon le
blog du créateur de ce curseur (sel dans les commentaires), il outrepasse le système DPI et définit quelques variables supplémentaires. Le problème est que tous les programmes ne voient pas cette redéfinition, et cela s'avère être un gâchis. Par conséquent, nous ne toucherons pas au curseur, mais nous configurerons tout manuellement.
En général, à ce stade, si le DPI est correct, alors tout devrait déjà être assez grand. Accédez à
Paramètres système → Polices . Par défaut, il y a une taille de police de 11. Si 10-14 est suffisant pour que vous puissiez atteindre l'harmonie - mettez-le, les applications rattraperont. Si plus ou moins - il est logique d'essayer de sous-système DPI comme décrit ci-dessus. Ci-dessous se trouve le champ Force Font DPI. Vous pouvez le tordre si vous le souhaitez, mais gardez à l'esprit que toutes les applications ne lisent pas cette valeur. Pas même ça. Certaines applications ne lisent pas cette valeur dans toutes leurs parties. Donc, si vous essayez de corriger le DPI système en 96 ici, il y aura un gâchis. Mais vous pouvez augmenter le DPI 167 du moniteur à 192 idéal.
Fermez la fenêtre Polices. En général, il est maintenant temps de redémarrer le X et de voir ce qui s'est passé. Ils devraient fonctionner et avoir une taille KDE pratique, tous ses paramètres et applications. Le panneau plasma, en passant, ne se développera pas tout seul. Mais c'est vectoriel, et vous pouvez toujours l'étirer - cliquez sur le sandwich à gauche et des boutons apparaîtront. De plus, la taille dans Dolphin doit être définie manuellement. Si, ailleurs dans les applications KDE, les boutons et les panneaux sont trop petits, vous devez redimensionner la taille des icônes dans Paramètres système → Icônes.
Nous configurons d'autres applications
Chrome, Atom et autres
Ces applications lisent le DPI directement d'où il vient et le suivent comme un code de chevalier. S'ils lisent quelque chose de mal, alors ils auront l'air en quelque sorte faux. Habituellement, ils ignorent les paramètres des paramètres système et suivent le DPI renvoyé par xdpyinfo. S'il y en a 96, alors pour Chrome vous pouvez utiliser l'argument
--force-device-scale-factor=2
, pour Atom il y a un plugin courbe
hidpi
dans le navet officiel, pour d'autres programmes ses béquilles.
QtCreator, Yakuake et autres applications Qt5
En général, ils
devraient fonctionner . Mais QtCreator parfois ne met pas à l'échelle la barre d'outils, tandis que Yakuake n'a pas la barre d'onglets. La raison en est dans le bogue et dans la variable d'environnement
QT_AUTO_SCREEN_SCALE_FACTOR
. Lorsqu'il est égal à
1
, Qt5 essaie de trouver la valeur DPI elle-même, et lorsque
0
- il s'attend à ce que cette valeur lui soit donnée dans d'autres variables. Le bogue est que KDE passe les ordures.
En bref, ces applications doivent définir la variable
QT_AUTO_SCREEN_SCALE_FACTOR=1
et tout fonctionnera. Cela peut être fait de manière sélective ou globale. Sélectivement dans l'éditeur de menu. N'oubliez pas d'ajouter l'application au panneau et de l'exécuter automatiquement plus tard. En effet, les entrées .desktop sont copiées et non liées. La deuxième option consiste à définir cette variable à l'échelle du système, dans
.xprofile ou même
/ etc / environment , ou là où les variables sont écrites dans votre distribution. Il y a deux nuances. Tout d'abord, KDE réinitialise de force cette variable à 0 dans le
script / usr / bin / startkde . Vous devrez l'ouvrir et le modifier en
#export QT_AUTO_SCREEN_SCALE_FACTOR=0
la ligne
#export QT_AUTO_SCREEN_SCALE_FACTOR=0
. Après cela, n'oubliez pas de répéter ce correctif chaque fois que KDE est mis à jour. La deuxième mise en garde est que les développeurs de KDE mettent en garde dans les commentaires: définir cette variable de manière globale peut entraîner un double boost pour certaines applications Qt5. Mais cela ne m'arrive pas. De plus, si le DPI système est incorrect, vous devez définir la variable
QT_SCALE_FACTOR=2
dans
.xprofile .
N'oubliez pas que la variable
QT_DEVICE_PIXEL_RATIO
obsolète. Si vous le mettez quelque part, vous devez le retirer.
Applications Qt4
Ces applications, en général, ne sont pas bonnes avec HiDPI. Mais tout n'est pas perdu. Qt4 crée une interface très flexible. Exécutez
qtconfig-qt4
. Tout d'abord, regardez la police et définissez une taille appropriée. Ensuite, dans l'onglet Interface, recherchez une béquille appelée "
Global strut " (en traduction - une béquille globale.) Ce paramètre signifie que les instances de QWidget et de ses descendants ne peuvent pas être plus petites que cette taille en pixels, quoi qu'elles fassent. En utilisant la
largeur minimale, vous pouvez définir la largeur des barres de défilement et en utilisant la
hauteur minimale - la hauteur des barres d'outils.
Applications GTK3
Ici, tout est simple. Vous devez définir deux variables dans
.xprofile :
GDK_SCALE=2
Commandez GTK pour tout augmenter de 2 fois. La valeur doit être un entier.
GDK_DPI_SCALE
ajuste l'agrandissement de la police. Si après
GDK_SCALE
polices sont énormes, vous devez définir
GDK_DPI_SCALE=0.5
GTK2 Apps
Ici, tout est compliqué. GTK2 ne sait pas comment HiDPI. Mais il y a un hack. Softina appelé Oomox est un générateur de thèmes (skins) pour GTK. Y compris, avec son aide, vous pouvez collecter un tel thème sous GTK2, qui
imitera HiDPI. Ou trouvez un sujet
prêt .
Applications sur Qt3, Gtk1, Motif
Tout est très compliqué ici. Il y a deux hacks possibles. Tout d'abord, vous pouvez profiter de la capacité de Kwin à agrandir tout l'écran.
Paramètres système → Effets du bureau → Effets du bureau → Zoom . Le bouton du milieu sur la gauche est les paramètres, y compris les touches pour allumer et éteindre. La deuxième façon consiste à exécuter l'application sur le serveur de bureau distant et à s'y connecter localement. Je vais simplement insérer un
lien vers le script , car sa configuration fait l'objet d'un article séparé.
Applications Java
Des programmes Java plus cool et commerciaux se comportent comme Chrome: ils lisent DPI de X et le suivent.
-Dsun.java2d.uiScale=2
programmes
-Dsun.java2d.uiScale=2
peuvent être corrigés avec l'un des deux arguments:
-Dsun.java2d.uiScale=2
augmente l'interface de 2 fois et
-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel
dit d'utiliser les dimensions de GTK pour dessiner . Permettez-moi de vous rappeler qu'en
.xprofile, vous pouvez créer la variable
export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'
. Cet exemple inclut l'anticrénelage dans les polices et GTK.
Eh bien, en quelque sorte.