ubuntu : แก้ปัญหาฟอนต์กระโดด

 

ฟอนต์กระโดดในอูบุนตู เดาเอาว่าเป็นปัญหาข้อผิดพลาดแพคเกจ defoma ของอูบุนตูเอง (ยังไม่รู้จริงครับ)
คือระบบจะไม่รู้ว่าฟอนต์ Norasi, และฟอนต์อื่น ๆ เป็นฟอนต์สกุลไหน
เขาจะดึงมาจากตัวที่น่าจะใกล้เคียงที่สุด
ซึ่งพบว่าในหน้าเว็บที่ถูกเข้ารหัสแบบ utf-8 ถ้าหน้าเว็บไม่ระบุสกุลฟอนต์ หรือระบุเป็นสกุล Sans-Serif
ระบบจะดึงเอาฟอนต์ TlwgMono เข้ามาใช้ก่อน ซึ่งจริง ๆ แล้วฟอนต์ TlwgMono เป็นฟอนต์แบบความกว้างคงที่
เลยทำให้เกิดปัญหาฟอนต์กระโดด

การแก้ไขคือ เราต้องสร้างคอนฟิกไฟล์ให้ระบบรู้ว่าเราต้องการฟอนต์แบบไหน
ไฟล์คอนฟิกที่ว่านี้คือ
1.กรณีที่ต้องการให้มีผลแค่เราคนเดียว ใช้ไฟล์ ~/.fonts.conf
2.กรณีที่ต้องการให้มีผลทั้งระบบ ให้ใช้ไฟล์ /etc/fonts/local.conf
*** ไม่ควรแก้ไฟล์ /etc/fonts/fonts.conf โดยตรง เนื่องจากเวลาอัพเกรดระบบ
จะทำให้ไฟล์นี้ถูกลบ หรือไม่ถูกปรับปรุงตามแพคเกจไปด้วย

$ vi ~/.fonts.conf

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- /etc/fonts/fonts.conf file to configure system font access -->
<fontconfig>

  <alias>
    <family>serif</family>
    <prefer>
      <family>Bitstream Vera Serif</family>
      <family>DejaVu Serif</family>
      <family>FreeSerif</family>
      <family>Norasi</family>
    </prefer>
    </alias>
    <alias>
      <family>sans-serif</family>
      <prefer>
        <family>Bitstream Vera Sans</family>
        <family>DejaVu Sans</family>
        <family>FreeSans</family>
        <family>Loma</family>
        <family>Garuda</family>
      </prefer>
    </alias>
    <alias>
      <family>monospace</family>
      <prefer>
        <family>Bitstream Vera Sans Mono</family>
        <family>FreeMono</family>
        <family>TlwgTypewriter</family>
        <family>TlwgMono</family>
    </prefer>
  </alias>

</fontconfig>

เวลาระบบเลือกใช้ เขาจะดึงจากตัวแรกก่อน ถ้าภาษาตรง ระบบจะเลือกใช้ฟอนต์อันแรก
แต่ถ้าภาษาไม่ตรง จะเลือกฟอนต์อันดับถัดมา
ที่ต้องเอา Bitstream Vera ขึ้นต้น เพราะว่าเป็นฟอนต์ของระบบในเดเบียน
ในอนาคต คงมีภาษาไทยฝังอยู่ในนี้เลย
(หมายเหตุ ในการแสดงหน้าเว็บ พบว่าถ้าหน้าเว็บมีการระบุสกุลฟอนต์ซ้ำ ๆ เช่น sans-serif
ระบบจะพยายามดึงฟอนต์ในอันดับถัดมาใช้ด้วย ฉะนั้นการที่มีหลายตัวเลือก จะทำให้การแสดงผลในหน้าเว็บมีความหลากหลายกว่า)
หลังจากแก้ไขเสร็จเรียบร้อยแล้ว ให้ล๊อกเอาต์และล๊อกอินใหม่ ก็จะสามารถใช้งานได้

เพิ่มเติม
ใช้วิธีของคุณเทพ debianclub แก้ปัญหาตรงจุดกว่าครับ
$ sudo vi /etc/fonts/conf.avail/65-thaifont.conf

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
        <alias>
                <family>serif</family>
                <accept>
                        <family>Norasi</family>
                </accept>
        </alias>
        <alias>
                <family>sans-serif</family>
                <accept>
                        <family>Loma</family>
                        <family>Garuda</family>
                </accept>
        </alias>
        <alias>
                <family>monospace</family>
                <accept>
                        <family>TlwgTypewriter</family>
                        <family>TlwgTypist</family>
                        <family>TlwgMono</family>
                </accept>
        </alias>
</fontconfig>

สร้างลิงก์ไปยัง /etc/fonts/conf.d
$ sudo ln -sf /etc/fonts/conf.avail/65-thaifont.conf /etc/fonts/conf.d

ล๊อกเอาต์แล้วล๊อกอินใหม่ ก็ใช้ได้ อย่าลืมลบไฟล์เก่า ~/.fonts.conf หรือ /etc/fonts/local.conf ด้วย

เพิ่มเติม ๒
อูบุนตูของผมไม่มีไดเรกทอรี่ conf.avail ก็ใช้วิธีสร้างไฟล์ตรง ๆ คือ sudo vi /etc/fonts/conf.d/65-thaifont.conf ได้เลย
หมายเหตุ - อูบุนตู Feisty เดินตามรอยเดเบียนแล้ว ใช้ตามข้างบนได้เลย

เพิ่มเติม ๓ - ๕๐ พ.ค. ๔
เพิ่มความคมให้ฟอนต์ด้วย xml ท่อนนี้ครับ

...
        <match target="font">
                <test name="family"><string>Loma</string></test>
                <edit name="autohint" mode="assign"><bool>true</bool></edit>
                <edit name="hinting" mode="assign"><bool>true</bool></edit>
        </match>
...