Aktuell nutze ich den i3 Window Manager. Dieser ist ein kleiner, praktischer Tiling WM, welcher sich an erfahrene Benutzer richtet. Diese Art von WM macht natürlich besonders mit einem 4k Monitor Sinn. Mein Problem war, dass wenn ich im Gegensatz zu dem Standard-Display meinen Rechner mit einem 4k Monitor starte, eine andere DPI Zahl verwendet werden sollte. Kurz gesagt: Rechner startet ohne 4k Display → DPI-Zahl x. Rechner startet mit 4k Display → DPI-Zahl y.
Erkennung
In einem ersten Schritt müsste erkannt werden, ob ein 4k Display angeschlossen ist. Dazu verwende ich das Programm xrandr. Im Terminal seiner Wahl gestartet, liefert es folgende Ausgabe (Ausschnitt):
[..]
HDMI1 disconnected (normal left inverted right x axis y axis)
DP1 connected primary 3840x2160+0+0 (normal left inverted right x axis y axis) 621mm x 341mm
3840x2160 30.00*+ 25.00 24.00 29.97 23.98
2560x1440 59.95
[..]
Die Ausgabe verrät, dass ein Display mit einer Auflösung von 3840×2160 (UHD) an den Display Port (DP1 connected) und kein Display per HDMI angeschlossen ist (HDMI1 disconnected). Somit liefert das folgende Kommando die Fallunterscheidung, ob ein 4k Monitor verbunden ist:
xrandr | grep "connected primary 3840x2160"
Anpassen der DPI-Zahl
Auch hierbei hilft das wunderbare Programm xrandr. Die folgende Codezeile setzt eine DPI-Zahl von 180 für das Display, welches am Display-Port (DP1) angeschlossen ist:
xrandr --output DP1 --dpi 180
i3 Konfiguration
Ich binde in meiner i3 Konfigurationsdatei ~/.i3/config eine extra „Autostart“ Datei ein:
# autostart script
exec --no-startup-id ~/.i3/autostart
Diese führt den Code aus, welcher für die Änderung der DPI Zahl nötig ist. Es gibt nur noch ein Problem. Nach der Anpassung der DPI Zahl müsste noch ein manuelles Neuladen (Mod+R) des i3 erfolgen. Das geht natürlich auch per Kommando (i3-msg). Insgesamt sieht das Shell-Script wie folgt aus:
# change dpi
for line in `xrandr | grep "connected primary 3840x2160"`; do xrandr --output `echo $line | cut -f 1 -d ' '` --dpi 180; break; done
i3-msg -t command restart
Ich habe mich für das for-Statement entschieden, weil prinzipiell auch mehrere 4k Displays angeschlossen sein könnten. Ich unterbinde aber den mehrfachen Schleifendurchlauf per break;.
Schreibe einen Kommentar