Linuxに4Kモニターを導入した際の設定とか
新たにメインの開発環境に4Kモニターを導入した。使い心地は最高である。 画面に描画されるフォントの美しさは素晴らしい。
これは導入の前から分かってたことだけど、4Kモニターの表示はスケーリングしないと文字が小さくて作業しづらい。
Windowsで言うところのスケーリングをLinux環境でも行いたい、という記事。
色々試行錯誤して快適に使用する設定を見つけたので記録として残そうと思う。
mobiuz ex3210u
非アソシエイトリンクです
環境
- OS: Arch Linux
- WM: i3wm
- X環境(not Wayland)
- UHD(DP-2)が1枚、FHD(DP-0,DP-4)が縦置きで左右に2枚の3画面構成
文字が小さくなる問題
4Kモニターは単純にFHDの縦横2倍なので、高画質だけどウィンドウや文字全てが小さくなってしまう。 色々ググって最初に見つかるのはArch WIKIに記載されている以下のようなコマンドだと思う。
xrandr --output DP-1 --scale 1.2x1.2
今回は大きく表示させたいので、< 1
の設定値を設定してみる。
xrandr --output DP-1 --scale 0.75x0.75
以下のようにスケール値を0.75で設定すると大きくは表示されるが、フォントがジャギっていてぼやけたようなblurryな状態になった。
1以上のスケーリングではフォントがジャギることは無かった。これは利用出来そう。この方針で詰めてみることにした。
つまり4KモニタでスケーリングするのではなくFHDモニタ側を調整する方が問題が出ないのでは、というよみ。
行き着いた解決策
DPI設定で4Kモニタの表示を拡大し、FHD側はスケーリングで対応する
具体的な設定値は以下。
1. .Xresources
で全体のDPIを変更する
これで4Kモニタ側の表示が画質を保ったまま、FHDの表示に近づく これやるとFHDモニタがタブレット表示のようなどでかい表示になる。
Xft.dpi: 144
2. FHD側をスケールする
FHDモニタに対し、xrandrのscalingを>1で設定する。
exec xrandr --output DP-0 --scale 1.5
exec xrandr --output DP-4 --scale 1.5
exec_always ~/scripts/monitor_config.sh
上記スケーリングの実行後にarandrなりxrandrの解像度設定スクリプトを流すようにすると良い。 スケーリング前のwindowposでやるとずれるので注意。
~/scripts/monitor_config.sh
#!/bin/sh
xrandr --output HDMI-0 --off --output DP-0 --mode 1920x1200 --pos 5640x0 --rotate left --output DP-1 --off --output DP-2 --primary --mode 3840x2160 --pos 1800x240 --rotate normal --rate 144 --output DP-3 --off --output DP-4 --mode 1920x1200 --pos 0x0 --rotate left --output DP-5 --off --output HDMI-1-2 --off --output DP-1-4 --off
上記のオプション値にはscaleを設定してはならない。scaleのコマンドは冪等性がない。
つまり、コマンドを実行するたびに、currentのscalingに対するscalingが行われてしまうため、必ず1回のみ実行するようにする。
※ scaleコマンドにはi3の構文的にはexec_always
を付けてはならない
上記スクリプトはモニターの接続変更などで何度でも実行できるようscaleの設定は外してある。
よってこちらは何度でも実行しても問題がない。
arandrで出力したスクリプトにはリフレッシュレートに関するオプションを出力してくれないので、--rate 144
は自身で追加した。プログラミングとドキュメント書くくらいしかしないので、リフレッシュレートの恩恵は何も受けてないのだけれど。それでもスクロールはスムーズになった気がする。
3. i3statusのフォントサイズを個別に設定
以下にようにPrimaryとnonPrimaryでbarの設定値を分けて、ステータスバーのheight,width,sizeを調整してやる
bar {
output primary
font pango:Bungee 9
tray_output primary
tray_padding 7
status_command i3status-rs $HOME/.config/i3status-rust/config.toml
position top
height 45
workspace_min_width 50
colors {
background #000000
statusline #DDDDDD
focused_workspace #FFFFFF #FFFFFF #000000
active_workspace #FFFFFF #000000 #FFFFFF
inactive_workspace #000000 #000000 #CCCCCC
urgent_workspace #2F343A #900000 #FFFFFF
binding_mode_indicator yes
binding_mode #000000 #000000 #FFFFFF
}
}
bar {
output nonprimary
font pango:Bungee 8
tray_output primary
tray_padding 7
status_command i3status-rs $HOME/.config/i3status-rust/config.toml
position top
height 40
workspace_min_width 50
colors {
background #000000
statusline #DDDDDD
focused_workspace #FFFFFF #FFFFFF #000000
active_workspace #FFFFFF #000000 #FFFFFF
inactive_workspace #000000 #000000 #CCCCCC
urgent_workspace #2F343A #900000 #FFFFFF
binding_mode_indicator yes
binding_mode #000000 #000000 #FFFFFF
}
}
これで全体のDPI値とモニターの表示バランスが取れ、FHDとUHD双方の画質を落とすことなく作業出来るようになった。目が快適。めでたしめでたし。