Исправляем шрифты в Java приложениях под GNU/Linux

Шрифты в Java приложениях, запущенных в большинстве дистрибутивов GNU/Linux, выглядят ужасно. В данной статье мы подробно рассмотрим как пересобрать OpenJDK с поддержкой нормального сглаживания шрифтов.

Подготовка к сборке

Установим модифицированные версии freetype и fontconfig с поддержкой патентованной технологии субпиксельного сглаживания. Для Fedora уже собранные пакеты есть в репозиториях Russian Fedora, а для openSUSE — специальная статья.

Для начала сборки OpenJDK с патчами infinality (включают в себя и tuxjdk) нам потребуется стандартный джентльменский набор разработчика: gcc, g++, rpmbuild, а также заголовочные файлы некоторых библиотек:

sudo yum install gcc gcc-c++ rpm-build autoconf automake cups-devel gtk2-devel lcms2-devel libjpeg-devel libpng-devel libX11-devel libXi-devel libXinerama-devel libXt-devel libXtst-devel nss-devel pkgconfig xorg-x11-proto-devel zip java-1.8.0-openjdk-devel prelink freetype-devel fontconfig-devel

Загрузим SRPM пакет с исходниками OpenJDK и патчами проектов tuxjdk и infinality:

wget https://raw.githubusercontent.com/smerrill/fedora-21-openjdk8-infinality/release/22/SRPMS/java-1.8.0-openjdk-infinality-1.8.0.45-40.b14.fc22.src.rpm -O java-1.8.0-openjdk-infinality.src.rpm

Сборка пакета

Сначала удалим переменную окружения _JAVA_OPTIONS (если задана), т.к. это приводит к проблемам:

unset _JAVA_OPTIONS

Теперь в том же терминале запустим сборку проекта:

rpmbuild --rebuild java-1.8.0-openjdk-infinality.src.rpm

Процесс займёт достаточно много времени (от получаса и дольше), а по её завершении в каталоге ~/rpmbuild/RPMS/`uname -p`/ мы найдём результат — несколько RPM файлов.

Установка пакетов

Удалим все установленные версии оригинального OpenJDK:

sudo yum remove java-*

Теперь установим только следующие пакеты (-debug устанавливать не нужно):

  • java-1.8.0-openjdk-infinality;
  • java-1.8.0-openjdk-infinality-devel;
  • java-1.8.0-openjdk-infinality-headless.

Настройка OpenJDK

Откроем файл ~/.bashrc в любом текстовом редакторе и пропишем в конце:

# Java settings...
export JAVA_HOME=/usr/lib/jvm/java-openjdk
export JAVA_FONTS=/usr/share/fonts/dejavu
export _JAVA_OPTIONS="-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel -Dsun.java2d.xrender=true

Перезаходим в систему (для применения переменных окружения) и запускаем любое Java приложение. Шрифты в нём будут выглядеть в зависимости от настроек среды.