Шрифты в 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 приложение. Шрифты в нём будут выглядеть в зависимости от настроек среды.