heavyrail
@heavyrail

Как изменить (подменить) стандартный шрифт Dialog в Java?

Есть Arch Linux, на нём установлены JDK/JRE версий 1.6 и 1.7.

Заметил такую особенность — стандартному шрифту Dialog в 1.6 соответствует Lucida Sans, а в 1.7 — DejaVu Sans.

Я хочу, чтобы в 1.7 тоже была Lucida. Полез смотреть файлы fontconfig* в /opt/java — там везде Lucida и прописана, а DejaVu, напротив, не встречается ни разу. Зато общесистемная команда fc-match с параметром Dialog выдаёт как раз DejaVu Sans. Т.е. похоже на то, что вместо псевдонима «Dialog» из своих конфигов 7-я Java берёт системный «Dialog»? Это баг или фича?

И как мне всё-таки сделать так, чтобы в JRE шрифтом Dialog считался бы Lucida Sans?
  • Вопрос задан
  • 4465 просмотров
Решения вопроса 1
heavyrail
@heavyrail Автор вопроса
Короче, разобрался сам. Пришлось посмотреть исходники OpenJDK.
Оказалось, что, по крайней мере под Linux, JRE файлы fontconfig* в /opt/java игнорирует (спрашивается, зачем они там вообще лежат). Вместо этого она смотрит системную конфигурацию Fontconfig, т.е., например, в качестве шрифта Dialog берётся тот шрифт, который выдаёт команда fc-match sans
Таким образом, подменив этот шрифт путём шаманства с файлами из директории /etc/fonts/conf.d, мы изменим шрифт Dialog в Java. Одна беда - в остальных программах шрифт по умолчанию тоже поменяется. Я менял на Arimo - смотрится, мягко говоря, не очень.

Но есть выход. В директории /etc/fonts/ есть файл fonts.conf, создаём его копию под именем /etc/fonts/fonts.conf.alt, там исправляем строчку
<include ignore_missing="yes">/etc/fonts/conf.d</include>
на
<include ignore_missing="yes">/etc/fonts/conf.d.alt</include>

После этого создаём директорию /etc/fonts/conf.d.alt, копируем в неё все нужные нам файлы и (или) символические ссылки из /etc/fonts/conf.d и корёжим их, как нам заблагорассудится (только если это символические ссылки - не забываем, что изменится и соответствующий "основной" файл, так что в этом случае лучше копировать, а не делать ссылку).
Проверяем результат командой
FONTCONFIG_FILE=/etc/fonts/fonts.conf.alt fc-match sans

Если результат (выводимое имя шрифта) нас устраивает, запускаем Java-приложение аналогичным образом, например FONTCONFIG_FILE=/etc/fonts/fonts.conf.alt netbeans
При этом для остальных приложений всё остаётся по-прежнему.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы