1

I have a file 10-sub.conf which I'm using to substitute font for specific locales: (made using this answer)

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">

<!-- file saved in /.config/fontconfig/conf.d -->

<fontconfig> <match> <test compare="contains" name="lang"> <string>hi</string> </test> <edit mode="prepend" name="family"> <string>Lohit Devanagari</string> </edit> </match> <match> <test compare="contains" name="lang"> <string>gu</string> </test> <edit mode="prepend" name="family"> <string>Lohit Gujarati</string> </edit> </match> <match> <test compare="contains" name="lang"> <string>kn</string> </test> <edit mode="prepend" name="family"> <string>Lohit Kannada</string> </edit> </match> <alias> <family>sans-serif</family> <prefer> <family>Ubuntu</family> <familt>DejaVu Sans</family> <family>Liberation Sans</family> <family>Noto Sans</family> <family>Arial Unicode MS</family> </prefer> </alias>

&lt;alias&gt;
    &lt;family&gt;serif&lt;/family&gt;
        &lt;prefer&gt;
            &lt;family&gt;Noto Serif&lt;/family&gt;
            &lt;family&gt;DejaVu Serif&lt;/family&gt;
            &lt;family&gt;Liberation Serif&lt;/family&gt;
            &lt;family&gt;Noto Serif Devanagari&lt;/family&gt;
            &lt;family&gt;Arial Unicode MS&lt;/family&gt;
        &lt;/prefer&gt;
&lt;/alias&gt;

&lt;alias&gt;
    &lt;family&gt;monospace&lt;/family&gt;
        &lt;prefer&gt;
            &lt;family&gt;Ubuntu Mono&lt;/family&gt;
            &lt;family&gt;Noto Sans Mono&lt;/family&gt;
            &lt;family&gt;DejaVu Sans Mono&lt;/family&gt;
            &lt;family&gt;Liberation Mono&lt;/family&gt;
            &lt;family&gt;Arial Unicode MS&lt;/family&gt;
        &lt;/prefer&gt;
&lt;/alias&gt;    

</fontconfig>

The Arial Unicode font is used to capture any font not installed on the system. And this method works for Devanagari and Gujarati, but the Kannada script is always rendered by Arial Unicode instead of Lohit Kannada. I have the Lohit Kannada installed on my system /usr/share/fonts/truetype/lohit-kannada/Lohit-Kannada.ttf

System: Ubuntu 22.04 on GNOME 42.5.

Visiting this website renders Kannada font in Arial Unicode despite providing <match> for it in the file, whereas this website renders Gujarati in Lohit Gujarati (on removing the <match> tag for Gujarati, it is rendered by fallback font for Gujarati)

Output of LC_CTYPE=kn_IN fc-match

Lohit-Kannada.ttf: "Lohit Kannada" "Regular" Hover

2 Answers2

0

I suspect that you run Firefox under some other locale (more specifically the LC_CTYPE locale category) but kn_IN, and if that is the case, the first language guarded part of your fontconfig file does not make a difference.

Please try the following:

  • Close Firefox

  • Press Alt+F2 and restart Firefox with this command:

    env LC_CTYPE=kn_IN firefox
    

Hopefully webpages with Kannada script look better now.

Gunnar Hjalmarsson
  • 33,540
  • 3
  • 64
  • 94
0

I had to remove Arial Unicode from the system to make this work. Then I tweaked the config file a little:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
   <alias>
        <family>sans-serif</family>
        <prefer>
            <family>Ubuntu</family>
            <family>Liberation Sans</family>
            <family>DejaVu Sans</family>
            <family>Noto Sans</family>
            <family>Lohit Devanagari</family>
            <family>Lohit Gujarati</family>          
        </prefer>
    </alias>
&lt;alias&gt;
    &lt;family&gt;serif&lt;/family&gt;
    &lt;prefer&gt;
        &lt;family&gt;Noto Serif&lt;/family&gt;
        &lt;family&gt;Liberation Serif&lt;/family&gt;
        &lt;family&gt;DejaVu Serif&lt;/family&gt;
        &lt;family&gt;Noto Serif Devanagari&lt;/family&gt;
    &lt;/prefer&gt;
&lt;/alias&gt;

&lt;alias&gt;
    &lt;family&gt;monospace&lt;/family&gt;
    &lt;prefer&gt;
        &lt;family&gt;Ubuntu Mono&lt;/family&gt;
        &lt;family&gt;Noto Sans Mono&lt;/family&gt;
        &lt;family&gt;Liberation Mono&lt;/family&gt;
        &lt;family&gt;Biryani&lt;/family&gt;
    &lt;/prefer&gt;
&lt;/alias&gt;    

</fontconfig>

Plus, blacklist FreeSans and FreeSerif because they aren't made for Indic languages, yet the system falls back on them somehow (easily done through Font Manager):

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <selectfont>
    <rejectfont>
      <pattern>
        <patelt name="family">
          <string>FreeSerif</string>
        </patelt>
      </pattern>
      <pattern>
        <patelt name="family">
          <string>FreeSans</string>
        </patelt>
      </pattern>
      <pattern>
        <patelt name="family">
          <string>FreeMono</string>
        </patelt>
      </pattern>
    </rejectfont>
  </selectfont>
</fontconfig>