OpenJDK-8/Oracle JDK 8 Font Patches for Ubuntu

Solution 1:

After reading various tutorials and messing with a bunch of fixes I've found a way that works perfectly.

First of all download JDK 8 from Oracle and execute the following lines in the terminal:

cd Downloads
tar -xvf jdk-8u25-linux-x64.tar.gz
rm jdk-8u25-linux-x64.tar.gz
sudo mkdir -p /usr/lib/jvm/
sudo mv jdk1.8.0_25 /usr/lib/jvm/

Now download the JDK font fix (Courtesy of Urshulyak Yaroslav) by executing the following:

cd ~/Downloads
wget http://urshulyak.com/jdk-8u5-tuxjdk-b08.tar.gz
tar -xvf jdk-8u5-tuxjdk-b08.tar.gz
sudo mv jdk-8u5-tuxjdk-b08 /usr/lib/jvm
rm jdk-8u5-tuxjdk-b08.tar.gz

This will extract the downloaded zip and move it to /usr/lib/jvm/. Now run the following in the terminal:

cd ~
sudo gedit .bashrc

Then add the following lines to the very bottom of the bashrc file.

JAVA_HOME=/usr/lib/jvm/jdk1.8.0_25/
export JAVA_HOME

Save it then gedit the idea.sh. (Your script location may be different)

gedit /home/USER/Downloads/idea/bin/idea.sh

At the very bottom of the script replace the line(s) in the While Do statement at the bottom with these two lines:

eval "/usr/lib/jvm/jdk-8u5-tuxjdk-b08/bin/java" $ALL_JVM_ARGS -Djb.restart.code=88 $MAIN_CLASS_NAME "$@"
test $? -ne 88 && break

Save it then open up IntelliJ, the fonts should work and you will be using Oracle JDK 8 for development. You will likely have to edit Project Settings and set up your JDK again but be sure to use the actual JDK and not the font fix one.

This fix also works with CLion, Android Studio and PyCharm.

These instructions assume the JDK version was 1.8.0_25, file/path names will change for future versions.

Solution 2:

To make DanielSteward anwser complete:

Unfortunately tuxjdk for GTK look and feel uses font set in currently used gtkrc. But most of the themes don't set any font there. As a result netbeans will use bold Arial 15 as UI font.

To fix that create gtkrc just for netbeans with fixed font and tell netbeans to use this file.

I prepared special launcher that does this semi-automatically:


#!/bin/bash

### Customizable variables: ###

# Path where netbeans was installed
NETBEANS_PATH=${NETBEANS_PATH:-~/opt/netbeans-dev-2015-06-04}/bin/netbeans
# Desktop environment name to use style from
USED_DE=${USED_DE:-mate}
# Tuxjdk seems to render too big UI fonts so use this value to decrease them
FONT_SUBTRAHENT=${FONT_SUBTRAHENT:-3}

###############################

function remQuotes(){
  echo "${@//\'/}"
}

function decreaseFontSize(){
  local subtrahend=$1; shift
  local args="$@"
  echo ${args//[0-9]/} $((${args//[!0-9]/} - $subtrahend))
}

theme=$(remQuotes `gsettings get org.${USED_DE}.interface gtk-theme`)
font=$(remQuotes `gsettings get org.${USED_DE}.interface font-name`)
font=$(decreaseFontSize $FONT_SUBTRAHENT $font)

themeDirs=$(find ~/.themes/ /usr/share/themes/ -type d -name "${theme}")
gtkRcPath=""
for dir in "$themeDirs"; do
  if [[ -f "$dir/gtk-2.0/gtkrc" ]]; then
    gtkRcPath="$dir/gtk-2.0/gtkrc"
    break;
  fi
done

if [[ "$gtkRcPath" == "" ]]; then
  echo "Theme not found" >/dev/stderr
  ./$NETBEANS_PATH $@
fi

cat  $HOME/.netbeans/.gtkrc-2.0
include "$gtkRcPath"

style "user-font" {
    font_name = "$font"
}

widget_class "*" style "user-font"

gtk-font-name="$font"

EOF

GTK2_RC_FILES=~/.netbeans/.gtkrc-2.0 $NETBEANS_PATH $@

This will read your theme settings and create fake theme just for netbeans. You have to adjust NETBEANS_PATH and USED_DE variables to your environment.