ジャンル不定の日記です。

LinuxのJavaフォント

Linux環境再構築すると、毎度のようにJavaのフォント設定で苦労するんだが、理解できた気がする。
環境はArch Linux。


まず最重要なのが、バージョン別のJavaを初起動すると、
~/.java/fonts/バージョン/xxxxxxxxx.properties
ってなファイルが自動で作成される。
このファイルは利用可能なフォントの一覧と優先順位を設定するものと思う。
これがJavaのバージョンが変わらない限り自動で更新されないと思われるので、フォントをインストールしたらファイルを消して再作成させないと新しいフォントが有効にならないぽい。

上記ファイルで利用可能なフォントが確認できるが、
Linuxで使えるフォントであっても使えないフォントがある模様。(認識させれば使えるのかもしれないが)
手元の環境では、Adobe Source Han Sans JPがインストールされていて主に使っているのだが、上記ファイル内で確認できない。

フォントの優先順位はfontconfigに従うので、ユーザー別の設定なら ~/.config/fontconfig/fonts.conf に書けばいい。

ネイティブなアプリだと、規定フォントで表示できない文字が出現したらその他の優先順位の高いフォントが利用されると思うが、
Javaアプリの場合は規定フォントで表示できない文字は優先順位無視でfallbackフォントが利用される気配。
ttf-arphic-uming
がインストールされていると殆どの文字が表示できるようになるが、表示できない文字に ttf-arphic-umingが使われるためだと思う。
ちなみに、このフォントは汚い。

仕様は多分そんな感じだと思う。


まとめると、
  1. フォントを新しくインストールしたりfontconfigの優先順位を変えた場合は ~/.java/fonts を消す必要がある。
  2. Javaアプリを起動すると ~/.java/fonts に設定ファイルが作られ、利用可能なフォントが確認できる。
  3. fontconfigの優先順位の設定は、利用可能フォント中で目的のフォントが最上位でないといけない。
3.で設定に制限されてしまうが、
日本語フォントよりもラテンフォントの優先順位が高かったりすると、ラテンフォントで表示できない文字に日本語フォントが使われずにfallbackフォントが使われて、fallbackフォントでも表示できない場合は豆腐になっちゃう感じぽい。


うちのsans-serifの設定が、
<alias>
    <family>sans-serif</family>
    <prefer>
        <family>Source Han Sans JP</family>
        <family>Noto Sans CJK JP</family>
        <family>IPAPGothic</family>

        <family>Source Han Sans</family>
        <family>Source Sans Pro</family>
        <family>Noto Sans</family>
    </prefer>
</alias>
こんな感じでJPフォント、CJKフォント、ラテンフォント、の順の設定になってる。
Source Han SansかNoto Sans CJKが使えればいいんだが、それらのJPフォントはJavaで利用できないか認識できない模様で、この設定だとIPAフォントが使われるぽい。

CJK以外のNoto Sans、Source Sansフォントは利用可能のようなので、Noto Sansの優先順位がIPAよりも高いとNoto Sansが使われるぽい。
その場合はNoto Sans CJKフォントが使えないため、表示できない文字がfallbackフォント( ttf-arphic-uming)で表示される。



あと、いつも使ってる Java Web Start のアプリが、Oracleの公式Javaだと実行できるのにIcedtea-webだとエラーで実行できないんだが、
目的のjnlpファイルの先頭にBOMが入ってるとXMLパースエラーになって実行できない模様。
エラーになるjnlpファイルをダウンロードして、BOM(先頭3byteの[0xEF 0xBB 0xBF])を消して、<jnlp>のhref属性を消す。
そうすると、ダウンロードして編集したjnlpファイルからなら起動できる。
まあ、そんなことするよりもOracleのJava入れちゃった方が良いと思う。OpenJDKとの共存も簡単だし。
XMLの仕様的にはBOMが入ってても問題ないと思うんで、Icedtea-webが悪いね。

またPlasma5入れてみた

メイン環境のPlasma5消してXfce入れたが、
KateとかKDEアプリ入れちゃったことし、クリーンな状態でPlasma5入れればまともに動くかも・・・
というわけで、またPlasma5入れてみた。

前は最小構成のplasma-desktopパッケージ入れたらディスプレイ設定がなくて困ったからplasmaパッケージで全部入れちゃったが、
今回はXfce使うかもで最小構成にしたいからplasma-desktopパッケージ入れて、ディスプレイ設定は追加でkscreen入れたら出てきた。


ディスクアクセスが発生し続けてる気配だったから再インストールしたんだが、クリーンで入れた今回もやっぱ発生しているような・・・
試しにPlasma5でウインドウマネージャ変えてみたいが、設定項目がないな・・・前からだったっけ?

まあ、Xfceもdockbarx使えば結構良い感じになったが、デスクトップにウィジェットが置けるPlasmaの方が良いから、
とりあえずまたPlasma使ってみて、気になるようなら退避できるようにXfceも残しておく。
アプリはXfceでできるだけGTKに統一しようかとも思ったが、テキストエディタがやっぱKateっぽいから、TKにこだわらずに入れていこうかと。

dockbarx

こういうのを探してたんだが、AURにあった!
dockbarxってやつ。

Plasma5のメイン環境が、なんか常時HDDアクセスが発生しちゃってるような感じで、
Plasma5にしてから負具合いも多いし、クリーンなシステムを再構築しようかと考えたんだが、
以前からちょくちょく探していたが、KDE以外の環境でUnityランチャーとかPlasmaのIcon-Onlyタスクマネージャ的なサイドパネルで使いやすいランチャーとタスクマネージャが一体化した奴が無いか探してたんだが、見つかった。

この手のランチャーとタスクマネージャが一体化した奴は、Dockerって分類のものが近いようでいくつかあるようなんだが、
今回見つけたdockbarxはXfce用のプラグインが用意されてて、Xfceのパネル上に設置できる。


というわけで、メイン環境でKDE捨てる決断をしてXfce環境をクリーンインストールした。

dockbarxはArchの公式リポジトリにはなくてAURになるが、
dockbarx-git
xfce4-dockbarx-plugin-git
を入れた。



こんな感じに。
左パネルのランチャーアイコン的なのがタスクマネージャを兼ねてる。

開いてるウインドウ数とか矢印でわかる感じのほうが良いが、そんな感じのテーマはなかったんで初期テーマにしてる。
テーマ以外にも設定項目結構充実してて、
Plasma5にしてから左クリック1発でグループ一括操作ができなくなって不便だと思ってたが、できる。
初期状態で中クリックがクローズになってたが、中クリックで新規オープンに設定できる。
マウスオーバーでのプレビュー機能も設定あるんだが、なにか足りないのか表示されない・・・

dockbarxがあればXfceをメイン環境で使えそう。
ちょっと気になるのは、デスクトップのアイコンがパネルと重なるのと、
デスクトップのアイコンがKDEは左から右だったのが上から下に配置なのと、
デスクトップにウィジェットは置けないってのが不便だね。せっかくQMLのRSSリーダー作ったのにw