LoginSignup
0

More than 3 years have passed since last update.

[linux] HighDPI環境でJavaアプリケーションをまともな大きさで表示する方法

Posted at

Java系のアプリのUIが豆粒で使えない!

僕の高解像度3000x2000ノートPCは、Java(nimbus)を使用していると思われるアプリの画面をうまく表示できません。いえ、画面自体は正しく表示されるのですが、豆粒のように小さなフォントで表示されてしまいます。

今回は、この問題の解決方法と、それまでにやったことをまとめていきます。

前提

  • ArchLinux(5.4.6-arch1-1)を「gnome3 + wayland」で使用
  • gnome-control-centerの「Displays」設定から「Built-in display」の「Scale」を「200%」に設定している
  • gnome標準のアプリやelectron系のアプリでは上の設定に応じて正しいDPIで表示されている

Javaのghidraやburpsuiteでは表示が豆粒みたいになっていて読めないw

結論

  1. java --versionを確認して、JRE/JDK環境がjava8以下の場合はjava9以降を利用する (HiDPI用の実装が含まれているため)
  2. 1だけではうまく行かない場合は、環境変数にGDK_SCALE=2.0を含めた状態で起動する
  3. 「解決策1」のオプションをいろいろ付けて実行してみる
  4. 1,2もうまく行かない場合は、アプリ個別に対処するしかなさそう

やったこと

作業ログのため、取り組んだ順で書いてあります。結論と順番は一致していませんのでご注意ください。

解決法1: (失敗)javaにオプションを付けて実行

How to fix scaling of a java-based application on a high dpi display in linux?を参考にすると

実行時にオプションで

  • -Dsun.java2d.uiScale=2.0
  • -Dsun.java2d.dpiaware=true
  • -Dsun.java2d.uiScale.enabled=true
  • -Dsun.java2d.ddscale=true

等を追加すればよいとあるのですが、これをghidra -Dsun.java2d.uiScale=2.0java -Dsun.java2d.uiScale=2.0 -jar jd-gui.jar等で試してもうまく行きません。。1つ1つ指定してみたり、複数指定もしてみましたが効果がないようでした。。

解決法2: (失敗)GDK_SCALEを使う

次に、archwikiのHiDPIについての説明を確認してみます。使用しているツール別にHiDPIの適用方法が書いてありました。

Javaで使えるレンダリングエンジンといえばJavaFX,AWTとかが挙げられるわけですが、内部でライブラリとしてGTKを読み込んでいるようです(よく分かってない)

そのため、JavaFXを使っている場合、GDKの設定が適用されるようです。
export GDK_SCALE=2.0をしてから実行すると、ghidraでは確かに拡大されました。

image.png

しかし、まだ一部しか表示されておらず不具合がありそうです。

ちなみにburpsuiteや手元に会ったjd-guiではこの設定をしても表示の大きさは変わりませんでした。。
実装によるのでしょうか。

解決策3: (成功)アプリ個別に設定する

Ghidra

Ghidra does not render correctly with GDK_SCALE set (HiDPI display)

Ghidraの場合、HighDPIの設定について、設定ファイルをイジるように書いてありました。

/opt/ghidra/support/launch.propertiesにあるVMARGS=-Dsun.java2d.xrender=falseをtrueにすればよいようです。

image.png

image.png

Burp Suite

Burp shows super tiny window&letters

Burp Suiteの場合は、設定画面からフォントサイズ等を指定すると改善しました。「User options > Display > User Interface > Font size」

zaproxy (owasp-zap)

ZAP doesn't play nice with high-DPI displays

Java9以降だとうまく行くかもって書いてありました。
archlinux-javaでopenjdk11に変更すると、普通にいい感じの大きさで表示されました。

jd-gui

特に情報はありませんでしたが、java11にしたあとに、GTK_SCALE=2.0付きで実行したらうまく行きました。このGTK_SCALEの実装は汎用的に使えそうです。

お願い

今回はHighDPIでJavaのアプリケーションを使うなら、とりあえずjava9以降にしとけってことが分かりました。ちゃんと調べていませんが、これが実装されたおかげらしいです。

ここまで書いておいてなんですが、実は私、Javaでデスクトップ向けのGUIアプリケーションを書いたことはありません。もし、他の方法をご存知の方はぜひ教えて欲しいです🙏🙏🙏

ご覧いただき、ありがとうございました!!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0