วันจันทร์ที่ 6 พฤศจิกายน พ.ศ. 2549

การปรับแต่งฟอนต์ไทยบน Ubuntu

คุณ tongdee ซึ่งเป็น Ubuntu User คนนึง ถามถึงเรื่องการปรับฟอนต์ไทยให้สวยงามบน Firefox บน Ubuntu พอดีพึ่งได้วิธีการที่ไปค้นพบเอาตอนไปทำ OLPC Localization ที่บอสตัน เลยเอามาบล็อกไว้ละกัน
ภาพการแสดงฟอนต์ไทยที่ดูแปลกๆ ไปจากปกติ

ภาพตัวอย่างที่คุณ tongdee ส่งมาให้ดู



บอกว่าพึ่งค้นพบ ฟังดูยิ่งใหญ่ แต่จริงๆ แล้วมันเป็นวิธีการที่มีอยู่แล้ว แต่ไม่เคยทำกับภาษาไทย เพราะตัว gnome เองก็คอนฟิกเรื่องฟอนต์ได้ระดับนึงอยู่แล้ว แต่พอไปคอนฟิกแล็ปท็อป OLPC ต้องทำในระดับล่างเอง คือเข้าไปคอนฟิกใน fontconfig เลย ก็เลยได้ศึกษาการคอนฟิกใน fontconfig ลึกลงอีกหน่อย ส่วนใหญ่ก็โดยการแกะของภาษาอื่นๆ ว่าเค้าทำกันอย่างไร

ขั้นตอนการปรับแต่ง

  1. ปรับแต่งฟอนต์โดย ดาวน์โหลดลิงก์นี้ ไปบันทึกเป็นแฟ้ม /etc/fonts/conf.d/66-ttf-thai.conf
    $ wget http://ftp.opentle.org/pub/olpc-thai/SRPMS/66-ttf-thai.conf
    $ sudo cp 66-ttf-thai.conf /etc/fonts/conf.d/
    password:
    $ sudo fc-cache
    $


  2. ปรับแต่งฟอนต์ของ gnome โดยเลือกเมนู "ระบบ" --> "ปรับแต่งพื้นโต๊ะ" --> "แบบอักษร" โดยผมตั้งฟอนต์แบบนี้ บนโน๊ตบุ๊คผมเลือก "จัดการพิกเซลย่อย (LCDs)" แทน จะได้ผลลัพธ์ที่ดีขึ้นอีกเล็กน้อย
    Gnome Font Configuration

  3. ปรับแต่ง Firefox เลือกเมนู "Edit" --> "Preferences" เลือก Contents
    firefox-preferences-content1.png
    ในกรอบ Fonts & Colors คลิกที่ปุ่ม Advanced... แล้วเลือก Western กำหนดค่าฟอนต์ดังนี้
    firefox-preferences-font-western.png
    จากนั้นก็เปลี่ยนเป็น Thai แล้วตั้งค่าแบบเดียวกัน
    firefox-preferences-font-thai.png
    สังเกตว่าในกรอบ "Character Encoding" กำหนดค่า "Default Character Encoding:" เป็น "Thai (ISO-8859-11)" เพื่อที่เวลาเปิดเว็บที่ไม่ได้กำหนด Encoding ไว้เลย จะใช้ Encoding ไทย ซึ่งถึงแม้จะเป็นเว็บภาษาอังกฤษก็ตาม ก็ยังแสดงภาษาอังกฤษได้สวยงาม

  4. เปลี่ยนไปเรนเดอร์ด้วย pango วิธีนี้ได้ข้อดีคือ 1) ฟอนต์ที่มี hinting จะแสดงผลได้สวยขึ้น เพราะสามารถใช้ full hint ได้ หรืออาจเพราะ pango ใช้ cairo ในการแสดงผลด้วย เลยทำให้แสดงได้สวยขึ้น 2) ภาษาไทยถูกจัดระดับวรรณยุกต์ได้สวยงาม แต่ก็ยังมีข้อเสียคือ บางเพจที่ใช้ css ในการจัดข้อความชิดซ้ายขวา (justify) จะแสดงผลไม่ถูกต้อง ซึ่งอาจจะโชคดีที่เพจแบบนี้มีไม่มากนัก วิธีทำ
    $ echo "MOZ_DISABLE_PANGO=0" >> ~/.mozilla/firefox/rc

    จากนั้นก็ปิดไฟร์ฟ็อกซ์ (ถ้าเปิดอยู่) แล้วเรียกใหม่



firefox1.png

ภาพตัวอย่างหลังจากปรับแต่งแล้ว


BUG: Firefox+pango justified text


ภาพตัวอย่างปัญหาเรื่อง text justify เมื่อใช้ pango


จะเห็นว่าเทคนิคนี้ใช้วิธีกำหนดค่าฟอนต์ปริยายของ sans, serif, และ monospace ให้ใช้ฟอนต์ไทยที่กำหนด ซึ่งในที่นี้คือ Loma และ TlwgTypewriter โดยกำหนดในระดับของ fontconfig ซึ่งมีผลทำให้แอพลิเคชันที่ใช้ fontconfig สามารถแสดงฟอนต์ไทยได้สวยงามได้ในทันที ส่วนใน Gnome และ Firefox ซึ่งนำมาแสดงเป็นตัวอย่าง ก็จะกำหนดเป็นฟอนต์ sans (หรือ san-serif), serif และ monospace ไปเลย ก็จะแสดงภาษาไทยได้ถูกต้อง ส่วนฟอนต์ภาษาอังกฤษก็จะใช้ฟอนต์ในตระกูล Dejavu ซึ่งแสดงผลได้สวยงามดีอยู่แล้ว โดยขนาดของ Dejavu และ Loma ก็เข้ากันได้ดี สิ่งที่ยังดูขัดกันบ้างคือ Loma จะไม่มี hinting เลยดูออกเทาๆ บ้าง ขณะที่ Dejavu ซึ่งจะแสดงในส่วนที่เป็นภาษาอังกฤษ จะดูคมเข้มกว่า

อีกประการคือการกำหนดขนาดฟอนต์ โดยส่วนตัวผมใช้จอ LCD ทั้งบน PC และ Laptop อยู่แล้ว เลยใช้ขนาด 8 point ร่วมกับการใช้ subpixel ก็แสดงได้ดี อ่านชัดเจนทุกตัวอักษร บางท่านอาจจะพอใจที่ 9 หรือ 10 point มากกว่า ก็แล้วแต่ความพึงพอใจครับ

เทคนิคนี้ใช้ได้กับทุกดิสทริบิวชันในปัจจุบันซึ่งส่วนใหญ่จะใช้ fontconfig อยู่แล้ว แต่อาจจะต้องติดตั้งฟอนต์ภาษาไทยด้วยตัวเอง ส่วน ubuntu นั้น จะติดตั้งไว้ให้อยู่แล้ว ซึ่งในที่นี้ทดสอบกับรุ่นล่าสุดคือ 6.10 นะครับ รุ่นอื่นๆ ถ้าพบว่าไม่มีฟอนต์ไทย ก็ให้ติดตั้ง ttf-thai-tlwg อาจจะด้วยคำสั่ง apt-get install ttf-thai-tlwg ครับ

updated! เพิ่มขั้นตอนที่ 4 เปิดใช้ pango และ capture หน้าจอใหม่

29 ความคิดเห็น :

  1. กำลังรำคาญเวลาวรรณยุกต์มันเลื่อนๆ ใน Firefox พอดีครับ ได้บทความนี้มาช่วย รอดไป



    สนใจจะเอาไปเผยแพร่ใน Blognone มั๊ยครับ...

    ตอบลบ
  2. อืมม สนใจครับ :-)

    เดี๋ยวสักครู่จะเอาไปโพส :-)

    ตอบลบ
  3. บทความนี้ยังไม่สมบูรณ์นะครับ พบบั๊กจำนวนนึง กำลังปรับปรุง อาจจะออกเวอร์ชัน 2 เร็วๆ นี้ แล้วเดี๋ยวเอาไปลง blognone ด้วย ^ ^

    ตอบลบ
  4. พี่ต้นครับ เดี๋ยวผมขอเอาไปลง ubuntuclub ด้วยนะครับ

    ตอบลบ
  5. อานนท์11/11/49 04:20

    ทำไม ของ ผม ไม่เห็น ต้อง ปรับแต่ง font ก็ ดู ดี อยู่ แล้ว อะ (ยกเว้นตัดคำ), บน ubuntu 4.10 ผสม 5.04

    ตอบลบ
  6. อานนท์,

    1. ผมจำไม่ได้ว่ารุ่นเก่ามีปัญหาอย่างที่มีคนถามมาหรือไม่ ซึ่งอาจจะไม่มีก็ได้ แต่รุ่น 6.10 ติดตั้งปุ๊บจะเจอแบบนี้แหละครับ วิธีการที่ผมแนะนำจะไม่ติดตั้งฟอนต์อื่นเลย นอกจากที่มีมาให้กับ Ubundu Edgy ซึ่งมีฟอนต์ไทยที่ใช้กับ UI ได้ดีๆ คือ Loma กับ Garuda และวิธีการที่ผมแนะนำ จะผสมฟอนต์ภาษาอังกฤษจาก Dejavu กับฟอนต์ไทยจาก Loma (หรือ Garuda หากต้องการ)



    2. Edgy ใช้ FreeType 2.2.1 ซึ่งมี engine ในการทำ AutoHint ตัวใหม่ ออกแบบมาให้ใช้กับ CJK ได้ดีขึ้น และทำให้ Hint อักษรไทยได้ดีเยี่ยมไปด้วย แต่ Firefox จะไม่ใช้ Hint ในตอนแรก เนื่องจากปิดการทำงานของ pango ไว้ ซึ่งผลก็คือ ฟอนต์จะไม่คมสวย และไม่จัดระดับวรรณยุกต์ ในที่นี้จึงต้องแนะนำวิธีการเปิดใช้ pango ใน Firefox สำหรับ Edgy ด้วย และพาเปิดใช้ AutoHint ซึ่งถ้าใช้กับ Ubuntu รุ่นเก่า ฟอนต์ไทยจะน่าเกลียดมาก



    FreeType 2.2.1 เท่าที่รู้ มีใช้บน Ubuntu 6.10 (Edgy) และ Fedora Core 6



    ยาวจัง สรุป ถ้าใช้ Edgy กับวิธีที่ผมแนะนำ จะสามารถใช้ฟอนต์ไทยได้สวยงามโดยไม่ต้องเอาฟอนต์จากวินโดวส์มาลง โดยฟอนต์จะมีความคมชัด ไม่เบลอ ไม่เบี้ยว แก้ปัญหาฟอนต์เบลอบน Firefox ด้วย (ภาษาอังกฤษก็เป็น)

    ตอบลบ
  7. ขอโทษครับผมทำตามทุกอย่างแล้วแต่ คราวนี้ linux ของผมไม่สามารถ boot เข้า desktop ได้ครับ โดยขึ้นว่า the display server has been shut down about 6 times in the last 90 seconds.It is likely that something bad is going on Waiting for 2 minutes before trying again on display.

    แล้วก็ไม่สามารถบูทเข้าได้เลยพอเข้ามาหน้า desktop ก็เด้งออกครับ ไม่ทราบว่าจะมีวิธีแก้ปัญหานี้หรือเปล่าครับ เอ่อ ผมลง beryl กับ emerald ลงไปด้วยไม่ทราบว่าจะมีผลกระทบกับเรื่องที่เราไป config font หรือเปล่าครับ

    ตอบลบ
  8. เป็นตอนจะเข้าหน้าล็อกอิน หรือหน้าเดสก์ท็อป (หลังล็อกอิน) ครับ?

    ถ้าเป็นตอนจะเข้าหน้าล็อกอิน แสดงว่ามีปัญหาที่ X Server ให้ตรวจสอบไฟล์ล็อก /var/log/Xorg.0.log ว่ามี error (EE) ที่ขั้นตอนไหน แล้วลองปรับที่ /etc/X11/xorg.conf



    ถ้าอย่างหลังคงเป็นที่ session มัน crash ด้วยสาเหตุบางอย่าง แต่ผมไม่คิดว่าฟอนต์จะเป็นปัญหานะครับ ยังไม่เคยเจอแบบนี้ แต่ผมก็ไม่ได้ใช้ beryl กับ emerald เลย ก็ไม่รู้ว่ามันจะเกี่ยวอะไรกับ 3D หรือเปล่า



    อ่อ มีล่าสุดที่ผมเจอคือ การ์ดผม ไม่สามารถใช้ composite พร้อมกับ GLX ได้ ต้องเลือกอันหนึ่ง ที่รู้เพราะมันบอกที่ไฟล์ล็อกนี่แหละครับ

    ตอบลบ
  9. หลัง login ครับเพราะผมตั้งให้เข้าไปเป็น auto login ครับ

    แล้วผมจะเข้าไปแก้ตรงไหนได้บ้างครับ หรือเข้าไปแก้ที่ session ใ้ห้ไม่ต้องรัน beryl and emerald ตอน start up ตรงไหนครับ

    คงจะเข้าได้แค่ recover เท่านั้นเองครับ เพราะทุกที่ที่ผมใช้งาน 3d ก็ไม่มีปัญหาน่ะครับ แต่พอลองปรับแต่ง fonts.conf แล้ว restart ดูก็ไม่สามารถเข้าไปใน ubuntu ได้เลยครับ ขอบคุณสำหรับคำตอบครับ

    ผมจะลองพยายามดูครับ linux จะมีแบบ window มั้ยครับ last known good config แบบนี้น่ะครับ พอดีผมเป็นมือใหม่ครับต้องขอโทษด้วยที่ถามอะไรเยอะเกินครับ

    ตอบลบ
  10. อ่อ งั้นก็ลองดูไฟล์ ~/.xsession-errors อาจจะพบข้อมูลที่มีประโยชน์ครับ หรือจะก็อปปี้มาแปะให้ดูก็ได้ครับ



    ส่วนเรื่องการปิด beryl กับ emerald ลองดูที่ ~/.gnome2/session นะครับ แต่ไม่แน่ใจนะ เพราะอย่างที่บอก ผมยังไม่เคยเล่น

    ตอบลบ
  11. กดเข้าไปที่ recoever แล้วก็พิมพ์ อะไรลงไปครับ พอเข้าไปที่ recover แล้วก็จะขึ้นเป็น command line น่ะครับ username@username แบบนี้อ่ะครับ

    ให้พิมพ์คำสั่ง อะไรลงไปครับมีพิมพ์คำสั่งให้ิปิด session บาง session หรือเปล่าครับ

    ตอบลบ
  12. เอ่อ.. ถ้าคิดว่าเป็นที่ .fonts.conf ลองไปแก้ตรงนั้นก่อนดีไหมล่ะ ไม่ก็ลบออกเลย



    ก็สั่งประมาณ

    <pre>$ rm .fonts.conf</pre>



    ส่วนเดสก์ท็อปถ้าอยาก reset มัน ก็ลอง

    <pre>$ rm -rf .gnome*</pre>

    ตอบลบ
  13. เอ่อ เมื่่อกี้ผมลอง remove ไฟล์ fonts.conf ออกไปแล้วก็สามารถ boot เข้้า ubuntu ได้ครับ ผมว่าผมคงต้องไปทำอะไรผิดพลาดกัีบไฟล์ fonts.conf แน่นอนเลยครับ เมื่อกี้ที่ผมทำก็ไป edit ไฟล์ fonts.conf เลยครับ copy โค๊ดที่พี่ให้ไว้น่ะครับ แล้วก็ใส่ไปแทนไฟล์ fonts.conf ตัวเดิมเลย หรือว่าต้องสร้างอีกตัวครับ ผมไม่เข้าใจพอทำเสร็จก็ลอง restart เครื่อง ก็เป็นปัญหาอย่างที่ถามพี่ไปน่ะครับ ขอบคุณที่ช่วยแก้ปัญหาให้ครับ

    จะพยามยามหันมาใช้ ubuntu น่ะครับ

    ตอบลบ
  14. So good solution.

    thank you.

    ตอบลบ
  15. [...] ระบบปฏิบัติการ: Ubuntu Edgy (6.10) ธีม: default ฟอนต์: Dejavu + Loma (ซึ่งปรับแต่งด้วยวิธีการใน การปรับแต่งฟอนต์ไทยบน Ubuntu และ ปรับแต่งฟอนต์ไทยบน Ubuntu Part II [...]

    ตอบลบ
  16. มีประโยชน์มากครับ :)

    ตอบลบ
  17. [...] จากตอนที่แล้ว ยังมีสิ่งที่อยากแก้ 2 อย่าง ได้แก่ [...]

    ตอบลบ
  18. ช่วยลงวิธี การนำภาษาไทยมาใช้ใน fedora core ด้วยครับ (เรื่องด่วนครับ)

    ตอบลบ
  19. ผมหันมาใช้ openoffice แทน แต่เกิดปัญหาเรื่องฟอนท์

    เวลาพิมพ์งานตัวอักษรไม่ครบครับ ไม่ทราบจะแก้ปัญหาไงดี

    ตอบลบ
  20. คือผมใช้ครั้งแรก งง มากครับ

    จะไปที่ sudo vi /etc/fonts/conf.d/65-thaifont.conf

    ได้ยังไงครับ?

    เปิดโปรแกรมอะไรเพื่อรันคำสั่งนี้ครับ?

    ตอบลบ
  21. เปิดโปรแกรมเทอร์มินัลครับ ในเมนู "อำนวยความสะดวก"

    ตอบลบ
  22. ผมได้คำตอบมาดังนี้อ่ะครับ



    bash: /etc/fonts/conf.d/66-ttf-thai.conf: No such file or directory



    คือพิมพ์ต่อจากของเดิมที่เป็นชื่อเครื่องเลยใช่มั้ยครับ?

    ตอบลบ
  23. ผมดอาโค๊ดดังกล่าวใส่เทคอีดิท

    แล้วเซฟตามชื่อไฟล์แล้วครับ

    66-ttf-thai.conf

    จากนั้นผมหาโฟลเดอร์ดังกล่าวเจอ แต่ไม่สามารถก็อปไปใส่ได้ครับ

    ตอบลบ
  24. มันขึ้นฟ้องว่า

    Error while copying to "/etc/fonts/conf.d".

    ขอคำชี้แนะด้วยคร๊าบ

    ตอบลบ
  25. ปัญหาล่าสุด ที่ตรงให้ใส่พาสเวิร์ดน่ะครับ

    ไม่สามารถพิมพ์ลงไปได้ ทำไงดีครับ?

    ตอบลบ
  26. ล่าสุดแล้ว

    ผมลองมั่วๆดูพอเข้าใจแระ ตอนนี้มีแค่พาสเวิร์ดน่ะครับ

    ผมไม่สามารถพิมพ์ตรงที่ให้พิมพ์พาสเวิร์ดได้

    ทำยังไงครับ???

    ตอบลบ
  27. แก้ได้แล้วจ้า

    ตอบลบ
  28. อ๋า ยินดีด้วยครับที่แก้ได้



    ยังไงถ้าอยากใช้ลินุกซ์จริงๆ แนะนำให้ใช้ ลินุกซ์ทะเล 8.0 นะครับ พัฒนาจาก Ubuntu 6.10 ซึ่งปรับแก้ปัญหาเกี่ยวกับภาษาไทยไปหมดแล้ว ติดตั้งแล้วใช้ได้เลย


    http://www.opentle.org/th/node/4767

    ตอบลบ
  29. ทำยังไงก็ไม่ได้ แต่ต้องพยายามต่อตอนนี้กำลังเป็นเด็กใหม่กับ ubuntu อยุ่ครับ

    ตอบลบ