#8348 NORM Not Tri: Font issues affecting Java OpenJDK (and other applications?)
Zarro Boogs per Child
bugtracker at laptop.org
Sun Sep 7 21:17:14 EDT 2008
#8348: Font issues affecting Java OpenJDK (and other applications?)
---------------------------------------------+------------------------------
Reporter: eliasen | Owner:
Type: defect | Status: new
Priority: normal | Milestone: Not Triaged
Component: not assigned | Version: Development build as of this date
Keywords: Java, OpenJDK, font, fontconfig | Next_action: never set
Verified: 0 | Blockedby:
Blocking: |
---------------------------------------------+------------------------------
I'm working on making it possible to get Java to run on the OLPC, and have
a solution to the problem that any Java program uses a strange italicized
serif font, no matter what font you request. This odd font is used
everywhere, and no other fonts seem to work.
This is focusing on the OpenJDK 1.6.0.0 distribution as found in yum.
(That's "yum install java-1.6.0-openjdk") I've also considered gcj, but
gcj's implementations of things like AWT or Swing is far less complete
than OpenJDK currently. My OLPC is running Joyride 2346. I was glad to
see that despite what our Wiki says about Java, it's actually relatively
easy to make graphical Java programs at least run on the OLPC, to switch
to its window, etc. (I'm not talking about making it a full-blown
activity, which is dependent on a lot of other things happening, such as
not having to set raw X properties on windows, bug
http://dev.laptop.org/ticket/5271 and having a clean C/Java implementation
of the services currently built in Python.)
(By the way, I'm also experimenting with "java-gnome" which creates GTK
bindings for gnome, so Java interfaces can look more like other Sugar
applications, but due to several compounding bugs in our yum distribution,
and pending patches to java-gnome, I can't build that on the OLPC.)
The problem is that our fontconfig files are not set up correctly for
the fonts distributed on the OLPC. I've verified that adding one file
fixes the problem, but there are several ways of fixing the problem and I
wanted input from others on the proper way to do it.
Here's a page that gives background on how fonts are loaded in Java:
http://java.sun.com/j2se/1.5.0/docs/guide/intl/fontconfig.html
(It's Java 1.5 but it still seems to work the same in OpenJDK 1.6)
When looking at that page, note that Joyride 2346 sets the following:
{{{
JavaHome=/usr/lib/jvm/jre-1.6.0-openjdk
OS=Fedora
Version=9
}}}
Thus, it searches for a working font configuration in the following
order:
{{{
/usr/lib/jvm/jre-1.6.0-openjdk/lib/fontconfig.Fedora.9.properties
/usr/lib/jvm/jre-1.6.0-openjdk/lib/fontconfig.Fedora.9.bfc
/usr/lib/jvm/jre-1.6.0-openjdk/lib/fontconfig.Fedora.properties
* /usr/lib/jvm/jre-1.6.0-openjdk/lib/fontconfig.Fedora.bfc
/usr/lib/jvm/jre-1.6.0-openjdk/lib/fontconfig.9.properties
/usr/lib/jvm/jre-1.6.0-openjdk/lib/fontconfig.9.bfc
/usr/lib/jvm/jre-1.6.0-openjdk/lib/fontconfig.properties
/usr/lib/jvm/jre-1.6.0-openjdk/lib/fontconfig.bfc
}}}
The one marked with * is the first one that exists. The .bfc files are a
binary format.
In the above directory, there exists a file
{{{
/usr/lib/jvm/jre-1.6.0-openjdk/lib/fontconfig.Fedora.properties.src
}}}
By copying this file to the filename "fontconfig.Fedora.properties" in
the same directory, we can create a file that is found before the .bfc
file and test our changes.
Inside the new "fontconfig.Fedora.properties" file, at the end, there
are lines like:
{{{
filename.DejaVu_Sans=/usr/share/fonts/dejavu/DejaVuSans.ttf
}}}
Unfortunately, those font files don't exist, but instead of, say
DejaVuSans.ttf, we have files named DejaVuLGCSans.ttf.
Fixing the "fontconfig.fedora.properties" to change filenames of all
DejaVu... to DejaVuLGC... fixes these problems, and Java implementations
now display correctly.
Now, how is the proper way to fix it? Here are a few alternatives:
1.) Just add the fixed properties file as demonstrated above to the
OLPC's OpenJDK distribution. Doing this is nice because it doesn't affect
any existing files, and it's user-tweakable as opposed to the compiled
.bfc file.
2.) Create symbolic links in the fonts directory, for example,
DejaVuSans.ttf would be a symbolic link to DejaVuLGCSans.ttf. I don't
know if this might help other applications. Note that Fedora 9 usually
contains /usr/share/fonts/dejavu/ *AND* /usr/share/fonts/dejavu-lgc/
directories while the OLPC just contains the former. Other applications
expecting a Fedora-like atmosphere may miss these fonts too.
3.) Add the missing fonts such as DejaVuSans.ttf. I'm not sure about
the difference between these fonts and the LGC equivalents, but Fedora 9
seems to contain both.
4.) Do some unspecified font fallback trick?
5.) Change "osname" (probably fetched from the Java property os.name)
in the OpenJava JVM from "Fedora" to something more specific to the OLPC,
like "OLPC". This might allow us to push an OLPC configuration file
upstream to the OpenJDK project. I'm not sure where os.name is set, or
how it is detected, though.
Which of these (or some other alternative) is the best way to fix our
Java font problem?
Is there anyone in charge of packaging the OpenJDK distribution? I can
probably create a patch for it. By the way, I haven't verified if *all*
fonts in our fontconfig file exist, such as Sazanami, Lohit, Baekmuk,
etc., or if we should point it at other files on the OLPC.
By the way, what's the best way to:
a.) Create a patch for a *new* file
b.) compile a resource file to that .bfc format?
--
Ticket URL: <http://dev.laptop.org/ticket/8348>
One Laptop Per Child <http://laptop.org/>
OLPC bug tracking system
More information about the Bugs
mailing list