HiDPI unter Linux, speziell KDE

Monitore mit einer Auflösung von 4K gelten nicht mehr als das Los der Bourgeoisie und treten allmählich in das Leben gewöhnlicher Menschen ein. Sowie Monitore anderer hoher Auflösungen. Vor ein paar Jahren sagte ich über die Unterstützung solcher Monitore unter Linux und sagte "eher nein als ja". Es schien Unterstützung zu geben, aber die Anzahl der Störungen machte den gesamten Prozess sinnlos, und ich wollte den Monitor unbedingt auf eine niedrigere Auflösung umstellen. Was einige 4K-Monitore unter Linux bisher nicht zulassen. Tatsache ist, dass NVidia-Treiber, wenn sie über DisplayPort verbunden sind, naiv an die EDID des Monitors glauben. Wenn dort nur eine maximale Auflösung geschrieben ist, können sie keine andere einstellen. Sie müssen entweder ein Rollback auf Nouveau durchführen oder HiDPI konfigurieren. Wir werden anpassen! (Der Artikel richtet sich an Personen, die die Grundlagen von Linux kennen und wissen, was ein X-Server ist.)

Über DPI im Allgemeinen und HiDPI im Besonderen


DPI (Punkte pro Zoll) ist ein Wert, der angibt, wie viele Pixel des Bildschirms der physische Zentimeter seiner Fläche sind. Wenn der Monitor in nicht nativer Auflösung arbeitet, handelt es sich um Pixel mit virtueller Auflösung. Von der Antike bis in die jüngste Zeit waren 96 DPI der Standard - das heißt, gewöhnliche Monitore waren, wenn sie sich davon unterschieden, so stark, dass dies vernachlässigt werden konnte. 120 DPI war einmal der Maximalwert, der üblicherweise getestet wurde.

Es überrascht nicht, dass Softwareentwickler diesen Wert seit so vielen Jahren als unerschütterliche Konstante betrachten. Plötzlich kamen Monitore mit 160-192 DPI und es begann. Alle Programme, die mindestens eine bestimmte Größe in der Benutzeroberfläche haben, wurden in Pixel eingestellt. Sie erhielten überlappende Bedienfelder, auf den ersten Buchstaben zugeschnittene Signaturen und Schaltflächen, für die Sie für erfolgreiches Drücken einen Geldpreis vergeben müssen.

Das Wort HiDPI bezieht sich auf die Situation auf Monitoren mit DPI> 160. Die DPI des Betriebssystems muss nicht unbedingt der DPI des Bildschirms entsprechen. Im Gegenteil, DPI-Systeme können verdreht werden, um die Schnittstelle größer und kleiner zu machen. Darüber hinaus unterscheiden Systeme zwischen DPI von allem, DPI von Schriftarten und DPI für Vollbildanwendungen.

Wie wäre es mit anderen?


Makos half ihrer autoritären Herrschaft aus. Da fast alle Programme ihre Schnittstelle über dieselbe API erstellen, wurde sie einfach behoben und hat sofort funktioniert. Separate unzerstörbare Pfosten betonen nur, wie gut alles insgesamt ist.

Android wurde auf Systemen mit einer großen DPI-Streuung geboren, sodass es alles von der Windel aus tun konnte, und die Lehrbücher für Programmierer berücksichtigten dies.

Windows erlaubte immer das Verdrehen von DPI-Schriftarten. Hier sind nur DPI-Grafiken davon haben sich nicht geändert. Einzelne Elemente haben ihre Größe geändert, da sie an die Größe der Schriftart oder des Bildschirms gebunden waren. Die in Pixel angegebenen Größen haben sich jedoch nicht davon verschoben. In Win 10 gab es schließlich normale HiDPI-Unterstützung, jedoch nur für Programme, die für Win 10 geschrieben wurden. Für den Rest wurde eine Krücke geschrieben, was nur eine grafische Vergrößerung des Programmfensters mit der Übersetzung der Position der Klicks darstellt. Durch Zoomen wird das Fenster verschwommen und die Sendung funktioniert schief. Das Schlimmste ist, dass dieser Anstieg versucht, auch für Vollbildanwendungen zu starten. Zum Spielen müssen Sie ihn also ausschalten und zum Arbeiten einschalten.

Was ist mit Linux?


Und unter Linux wie immer eine Bacchanalia. Wir haben zwei Haupt-Sets für die GUI (Qt und GTK), von denen jedes vor relativ kurzer Zeit das Umschreiben von Grund auf überstanden hat, sodass die alte und die neue Version weiterhin verwendet werden. Plus ein paar kleinere Sets (EFL, wxWidgets). Plus mehrere Sprachen, die ihre Tools dafür verwenden, zum Beispiel Java. Plus ein paar alte Bibliotheken, in die niemand schreibt, aber die notwendige Software existiert noch auf ihnen. (GTK 1, Motiv) Auch wenn der X-Server und der Fenstermanager DPI korrekt verarbeiten, ist es keine Tatsache, dass all dieser Zoo diese Informationen akzeptiert und einwandfrei funktioniert.

Es gibt eine Menge, die Sie an Ubuntu mit Unity vielleicht nicht mögen, aber eines muss ich sagen. Ich weiß nicht, wie ich HiDPI in Unity konfigurieren soll, da immer alles sofort funktioniert hat. Alle anderen DEs: Cinnamon, KDE, XFCE haben ebenfalls eine entsprechende Flagge. Dieses Flag setzt DE selbst, Anwendungen, die in seiner Hauptbibliothek geschrieben sind (nur die neue Version), und einige Flags für Qt / GTK. Und der Rest ist seitwärts. Infolgedessen bleibt beispielsweise bei Spielern die Wiedergabetaste winzig. Und die Tray-Symbole sind klein, aber nicht alle. Ein Jahr nach einem solchen System - und die Person in Overwatch spielt nur für McCrack, weil die Person eine pixelweise Genauigkeit der Maus hat und jeden hasst.

Ich werde darüber sprechen, wie man KDE konfiguriert. Nicht wie angewiesen, aber damit alles funktioniert. Deadbeef, Yakuake, Mixer. Ich habe es hauptsächlich in Arch überprüft. In anderen Distributionen kann es sein, dass einiges von dem, was ich beschreibe, bereits oder anders gemacht wurde. Denken Sie mit Ihrem Kopf nach oder schreiben Sie in die Kommentare - wir werden es herausfinden.

X-Setup


Als erstes muss überprüft werden, ob X weiß, dass wir HiDPI haben. Dazu benötigen wir den Softlink xdpyinfo - er befindet sich in der Rübe. Stellen Sie, falls nicht installiert, die native Auflösung des Monitors ein (und starten Sie X neu.) Führen Sie die Konsole im X aus (dh nicht mit Strg-Alt-F *).

 xdpyinfo | grep -B 2 resolution screen #0: dimensions: 3840x2160 pixels (621x341 millimeters) resolution: 157x161 dots per inch 

Wir sehen drei Wertepaare - Bildschirmauflösung, tatsächliche Bildschirmgröße und DPI (getrennt vertikal und horizontal). Wenn alle drei Paare der Wahrheit ähnlich sind, wenden Sie sich vom Monitor ab und loben Sie die höchste Entität Ihrer Wahl. denn wenn xdpyinfo Unsinn zurückgibt und DPI = 96, dann schickt dir dein höheres Wesen Schwierigkeiten.

Die häufigsten Ursachen für falsche DPIs sind EDID-Kurven und Markenbrennholz auf der Grafikkarte. Ich werde nichts über ATi-Grafikkarten sagen, da ich sie meide. Nicht dass sie schlecht wären, aber ATi + Linux = unnötige Probleme. Mit Intel sollte alles funktionieren. NVidia verfaulte bis vor kurzem hartnäckig DPI. Deaktivieren Sie zunächst die G-Synchronisierung in den nvidia-settings . Kein Composite Manager ist damit befreundet. Wenn dies nicht hilft, aktivieren Sie KMS. Die Kernelmoduseinstellung ist die Methode, mit der der Linux-Kernel anstelle von X die Bildschirmauflösung verwaltet. Zusätzlich zur direkten Verwendung können Sie so eine Menge fehlerhafter Codes vor 20 Jahren in X umgehen. Leider ist das Verfahren zum Aktivieren von KMS auf proprietären Nvidia-Treibern verteilungsabhängig, daher werde ich es nur allgemein beschreiben. Sie müssen die Module nvidia, nvidia_modeset, nvidia_uvm, nvidia_drm in initramfs nvidia, nvidia_modeset, nvidia_uvm, nvidia_drm und dann den Parameter nvidia-drm.modeset=1 zum Kernel hinzufügen. Google.

Wenn Sie im vorherigen Absatz nichts verstanden haben, können Sie einfach auf das Brennholz der Marke NVidia verzichten und vorerst Nouveau verwenden - KMS ist sofort einsatzbereit. In Kubunt erfolgt dies über ein Programm, das Treiber verwaltet.

Wenn all das nicht hilft und xdpyinfo immer noch Müll schreibt, dann sind vielleicht die Videotreiber, aber die EDID-Kurven des Monitors schuld. Führen Sie zunächst xrandr --dpi 192 in derselben Konsole aus. Und ein Programm ausführen. Wenn es größer geworden ist, funktioniert die Methode. .xprofile diesen Befehl in .xprofile und starten Sie .xprofile In Zukunft werde ich viel über .xprofile . Dies ist eine Datei im Home-Ordner jedes Benutzers, die den Betrieb grafischer Anwendungen konfiguriert. Wenn nicht, erstellen Sie es einfach: touch ~/.xprofile . Wenn alles geklappt hat - Hurra! Wenn nicht, überprüfen Sie zunächst, ob für Ihre Distribution keine .xprofile Unterstützung aus KDE ausgeschnitten ist. Warum so etwas wie touch ~/net_ne_vyrezali und neu touch ~/net_ne_vyrezali

Funktioniert immer noch nicht? Lassen Sie uns DPI in X manuell registrieren. Erstellen Sie, falls noch nicht geschehen , die Datei /etc/X11/xorg.conf.d/90-monitor.conf und schreiben Sie hinein:

 Section "Monitor" Identifier "Prikolny monitor" DisplaySize 286 179 #   EndSection 

Und für Brennholz der Marke Nvidia

 Section "Monitor" Identifier "Prikolny monitor" Option "DPI" "192 x 192" EndSection 

Bitte beachten Sie, dass ich überall den erzwungenen DPI-Wert auf 192 oder vielmehr auf einen Wert einstelle, der ein Vielfaches von 96 ist. Er funktioniert genauer als der echte DPI, da es sich um einen Gladiolen handelt. Hier funktioniert das Paradox des Designers:

  • Wenn DPI ein Vielfaches von 96 ist, werden Schriftarten in Anwendungen, die mit Text arbeiten, besser gerendert. Besonders in Kairo Apps.
  • Wenn die DPI der tatsächlichen DPI des Monitors entspricht, hat die 1: 1-Skala auf dem Bildschirm dieselbe Größe wie auf Papier.

Ich habe den dummen Namen des Monitors geschrieben, damit in allen grafischen Dienstprogrammen zu sehen ist, dass unser Setup gelesen wird und versucht, es anzuwenden.

Speichern, X neu starten und sich freuen. Oder trinke bitter und warte, bis Wayland fertig ist.

Konfiguration in KDE


Schließlich konfigurieren wir HiDPI in KDE korrekt. Im Menü → Systemeinstellungen → Anzeige und Monitor ganz unten befindet sich eine große Schaltfläche zur Skalenanzeige . Durch Drücken wird ein Fenster mit einem einzelnen Skalierungsregler geöffnet. Jetzt Aufmerksamkeit! Wenn Sie DPI in Xs immer noch nicht konfigurieren konnten, schließen Sie diesen Artikel, stellen Sie den Wert des Schiebereglers nach Geschmack ein und genießen Sie, was funktioniert. Und was nicht funktioniert - abgleichen (Dies ist normalerweise Chrome, Skype, QtCreator, Yakuake, GTK).

Wenn die DPI in Xs korrekt ist, berühren Sie diesen Schieberegler nicht! Drehen Sie es im Idealfall nicht einmal hin und her, da er anscheinend irgendwo etwas schreibt. Schließen Sie dieses Fenster nafig. Laut dem Blog-Beitrag des Erstellers dieses Schiebereglers (Salz in den Kommentaren) überschreibt er die System-DPI und legt einige weitere Variablen fest. Das Problem ist, dass nicht alle Programme diese Neudefinition sehen und es sich als Chaos herausstellt. Daher werden wir den Schieberegler nicht berühren, sondern alles manuell konfigurieren.

Im Allgemeinen sollte zu diesem Zeitpunkt, wenn die DPI korrekt ist, bereits alles groß genug sein. Gehen Sie zu Systemeinstellungen → Schriftarten . Standardmäßig gibt es eine Schriftgröße von 11. Wenn 10-14 ausreichen, um Harmonie zu erreichen, werden die Anwendungen aufholen. Wenn mehr oder weniger - es ist sinnvoll, zu versuchen, DPI wie oben beschrieben zu subsystemieren. Unten finden Sie das Feld Force Font DPI. Sie können es drehen, wenn Sie möchten, aber denken Sie daran, dass nicht alle Anwendungen diesen Wert lesen. Nicht einmal das. Einige Anwendungen lesen diesen Wert nicht in allen Teilen. Wenn Sie also versuchen, die System-DPI in 96 hier zu beheben, kommt es zu einem Durcheinander. Sie können jedoch den DPI 167 des Monitors auf den idealen Wert 192 einstellen.

Schließen Sie das Fenster "Schriftarten". Im Allgemeinen ist es jetzt an der Zeit, das X neu zu starten und zu sehen, was passiert ist. Sie sollten funktionieren und eine bequeme KDE-Größe sowie alle Einstellungen und Anwendungen haben. Das Plasma-Panel wächst übrigens nicht von selbst. Aber es ist vektoriell und Sie können es jederzeit dehnen - klicken Sie auf das Sandwich links und die Schaltflächen werden angezeigt. Außerdem muss die Größe in Dolphin manuell eingestellt werden. Wenn an anderer Stelle in KDE-Anwendungen die Schaltflächen und Bedienfelder zu klein sind, müssen Sie die Größe der Symbole unter Systemeinstellungen → Symbole anpassen.

Wir konfigurieren andere Anwendungen


Chrome, Atom und andere


Diese Anwendungen lesen DPI direkt von dort, wo es herkommt, und folgen ihm wie ein Rittercode. Wenn sie etwas falsch lesen, sehen sie irgendwie falsch aus. Normalerweise ignorieren sie die Einstellungen in den Systemeinstellungen und folgen der von xdpyinfo zurückgegebenen DPI. Wenn es 96 gibt, können Sie für Chrome das Argument --force-device-scale-factor=2 , für Atom gibt es ein hidpi Kurven-Plugin in der offiziellen Rübe, für andere Programme die Krücken.

QtCreator, Yakuake und andere Qt5-Anwendungen


Im Allgemeinen sollten sie funktionieren . QtCreator skaliert die Symbolleiste jedoch manchmal nicht, während Yakuake nicht über die Registerkartenleiste verfügt. Der Grund liegt im Fehler und in der Umgebungsvariablen QT_AUTO_SCREEN_SCALE_FACTOR . Wenn es gleich 1 , versucht Qt5, den DPI-Wert selbst zu finden, und wenn 0 - erwartet es, dass dieser Wert ihm in anderen Variablen gegeben wird. Der Fehler ist, dass KDE Müll weitergibt.

Kurz gesagt, diese Anwendungen müssen die Variable QT_AUTO_SCREEN_SCALE_FACTOR=1 und alles wird funktionieren. Dies kann entweder selektiv oder global erfolgen. Selektiv im Menü-Editor. Denken Sie daran, die Anwendung zum Bedienfeld hinzuzufügen und später automatisch auszuführen. Dies liegt daran, dass .desktop-Einträge kopiert und nicht verknüpft werden. Die zweite Option besteht darin, diese Variable systemweit in .xprofile oder sogar / etc / environment festzulegen oder wo die Variablen in Ihrer Distribution geschrieben sind. Es gibt zwei Nuancen. Zunächst setzt KDE diese Variable im Skript / usr / bin / startkde zwangsweise auf 0 zurück. Sie müssen es öffnen und bearbeiten, indem Sie die Zeile #export QT_AUTO_SCREEN_SCALE_FACTOR=0 . Denken Sie danach daran, diesen Patch jedes Mal zu wiederholen, wenn KDE aktualisiert wird. Die zweite Einschränkung ist, dass KDE-Entwickler in den Kommentaren warnen: Wenn Sie diese Variable global festlegen, können einige Qt5-Anwendungen doppelt verstärkt werden. Aber das passiert mir nicht. Wenn die System-DPI falsch ist, müssen Sie die Variable QT_SCALE_FACTOR=2 in .xprofile festlegen .

Denken Sie daran, dass die Variable QT_DEVICE_PIXEL_RATIO veraltet ist. Wenn Sie es irgendwo ablegen, müssen Sie es entfernen.

Qt4-Anwendungen


Diese Anwendungen sind im Allgemeinen bei HiDPI nicht gut. Aber nicht alles ist verloren. Qt4 schafft eine sehr flexible Schnittstelle. Führen Sie qtconfig-qt4 . Schauen Sie sich zunächst die Schriftart an und stellen Sie eine geeignete Größe ein. Suchen Sie dann auf der Registerkarte "Schnittstelle" eine Krücke mit dem Namen " Globale Strebe " (in Übersetzung - eine globale Krücke). Diese Einstellung bedeutet, dass die Instanzen von QWidget und seinen Nachkommen nicht kleiner als diese Größe in Pixel sein dürfen, unabhängig davon, was sie tun. Mit der minimalen Breite können Sie die Breite der Bildlaufleisten und mit der minimalen Höhe die Höhe der Symbolleisten festlegen.

GTK3-Apps


Hier ist alles einfach. Sie müssen zwei Variablen in .xprofile festlegen :

GDK_SCALE=2 Befehl GTK, alles um das GDK_SCALE=2 zu erhöhen. Der Wert muss eine Ganzzahl sein. GDK_DPI_SCALE passt die Schriftvergrößerung an. Wenn GDK_SCALE Schriftarten nach GDK_SCALE sehr groß sind, müssen Sie GDK_DPI_SCALE=0.5

GTK2 Apps


Hier ist alles kompliziert. GTK2 weiß nicht, wie man HiDPI macht. Aber es gibt einen Hack. Softina namens Oomox ist ein Generator von Themen (Skins) für GTK. Mit seiner Hilfe können Sie auch ein solches Thema unter GTK2 sammeln, das HiDPI imitiert. Oder finden Sie ein Thema bereit .

Anwendungen auf Qt3, Gtk1, Motiv


Hier ist alles sehr kompliziert. Es gibt zwei mögliche Hacks. Erstens können Sie Kwins Fähigkeit nutzen, den gesamten Bildschirm zu vergrößern. Systemeinstellungen → Desktop-Effekte → Desktop-Effekte → Zoom . Die mittlere Taste links zeigt die Einstellungen, einschließlich der Tasten zum Ein- und Ausschalten. Die zweite Möglichkeit besteht darin, die Anwendung auf dem Remotedesktopserver auszuführen und eine lokale Verbindung herzustellen. Ich werde nur einen Link zum Skript einfügen, da das Einrichten eine Frage eines separaten Artikels ist.

Java-Anwendungen


Coolere und kommerziellere Java-Programme verhalten sich wie Chrome: Sie lesen DPI von X und folgen ihm. -Dsun.java2d.uiScale=2 Programme können mit einem von zwei Argumenten -Dsun.java2d.uiScale=2 : -Dsun.java2d.uiScale=2 erhöht die Schnittstelle um das -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel und -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel weist sie an, die Dimensionen von GTK zum Zeichnen zu verwenden . Ich möchte Sie daran erinnern, dass Sie in .xprofile die Variable export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel' erstellen können export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel' . Dieses Beispiel enthält Anti-Aliasing in Schriftarten und GTK.

Na ja, irgendwie.

Source: https://habr.com/ru/post/de403165/


All Articles