Linux กับภาษาไทย (The Linux Thai HOWTO, Thai version) <author>พูลลาภ วีระธนาบุตร, <tt/<htmlurl url="mailto:poon-v@fedu.uec.ac.jp" name="poon-v@fedu.uec.ac.jp">/ <date>v1.0, 14 ตุลาคม พ.ศ.2541 <abstract> บทความนี้จะอธิบายการปรับเปลี่ยนระบบ Linux ภาษาอังกฤษเพื่อให้ใช้ภาษาไทยได้ ซึ่งจะรวมถึงการติดตั้งฟอนต์, คีย์บอร์ด และแนะนำโปรแกรมภาษาไทย. อนึ่ง, บทความนี้เขียนด้วย <tt/mule/ ในรูปแบบ sgml และใช้ SGML-tools แปลงเป็นเอกสารรูปแบบอื่นๆ </abstract> <toc> <sect>บทนำ <p> จุดประสงค์ในการเขียนเอกสารฉบับนี้เพื่อเป็นการส่งเสริมการใช้ภาษาไทยในระบบปฏิบัติการ Linux และอธิบายวิธีการใช้ภาษาไทยกับ Linux distribution ที่เป็นภาษาอังกฤษ. ในที่นี้จะใช้ Linux RedHat 5.0 เป็นตัวอย่างประกอบ เพราะฉะนั้นสำหรับผู้ที่ใช้ Linux distribution อื่นๆเช่น Slackware จึงมีความจำเป็นต้องเปลี่ยนไดเรกทอรี่ที่อธิบายในเอกสารฉบับนี้ให้เหมาะสมกับ distribution นั้นๆ ก่อนอื่นขออธิบายเกี่ยวกับรหัสอักษรภาษาไทยที่ใช้กับ Linux ก่อน. รหัสอักษรหรือ Charater set ที่ใช้ในที่นี้คือรหัส สมอ. หรือในภาษาอังกฤษเรียกว่า TIS-620. นอกจากนี้ยังมีรหัสอักษรมาตรฐานอื่นๆเช่น ISO-IR-166, CP874 ฯลฯ. ผู้อ่านสามารถอ่านรายละเอียดเกี่ยวกับมาตรฐานรหัสอักษรไทยได้ที่ <url url="http://www.inet.co.th/cyberclub/trin/thairef/" name="http://www.inet.co.th/cyberclub/trin/thairef/"> รหัสสมอ.เป็นรหัสอักษรแบบ 8 บิทเช่นเดียวกับรหัส ISO-8859-1 ซึ่งเป็นรหัสอักษรลาติน. เพราะฉะนั้นโปรแกรมที่สามารถใช้กับรหัสอักษร ISO-8859-1 จึงสามารถใช้ภาษาไทยได้ด้วย. ถึงแม้ว่าเราจะสามารถใช้ภาษาไทยได้กับโปรแกรมเหล่านั้น แต่ไม่ได้หมายความว่าโปรแกรมเหล่านั้นสร้างขึ้นสำหรับการใช้ภาษาไทย. ภาษาไทยมีเอกลักษณ์เฉพาะและแตกต่างจากภาษาอังกฤษหลายด้าน เช่น ตำแหน่งของตัวอักษรต่างๆ, ไม่มีการเว้นวรรคระหว่างคำ เป็นต้น. ซึ่งความแตกต่างเหล่านี้เป็นอุปสรรคในพัฒนาโปรแกรมภาษาไทย. ผู้อ่านสามารถอ่านเอกสาร Thai-HOWTO ฉบับล่าสุดได้ที่ <url url="http://www.fedu.uec.ac.jp/ZzzThai/Linux" name="http://www.fedu.uec.ac.jp/ZzzThai/Linux"> และสามารถติชมเอกสารนี้ได้ที่ผู้เขียนโดยตรง <sect>การพิมพ์ภาษาไทยผ่านคีย์บอร์ดและการแสดงผลภาษาไทยทางหน้าจอ <p> ในที่นี้จะแยกเป็นสองส่วนคือ Linux console และ X window. Linux console คือหน้าจอที่สามารถแสดงผลด้วยอักษรเท่านั้น ซึ่งวิธีการติดตั้งภาษาไทยใน Linux console จะแตกต่างกับ X window ในรายละเอียด แต่จะมีหลักการคล้ายกันคือ ถ้าต้องการแสดงผลภาษาไทยก็ให้ติดตั้งฟอนต์, ถ้าต้องการพิมพ์ภาษาไทยก็ให้เตรียมคีย์บอร์ดภาษาไทย. <sect1>Linux console<label id="console"> <p> การแสดงผลภาษาไทยใน Linux console ยังไม่ดีเท่าที่ควร เนื่องจากบน Linux console สามารถแสดงอักษรเป็น cell ได้เท่านั้น. ซึ่งหากต้องการใช้ภาษาไทยใน Linux console ต้องมีการพัฒนาในจุดนี้. อย่างไรก็ตามเพราะว่าเรามักจะใช้ X window ส่วนใหญ่ปัญหาจุดนี้อาจจะไม่สำคัญนัก. <sect2>การติดตั้งฟอนต์ภาษาไทย <p> ผู้อ่านสามารถ download ฟอนต์ภาษาไทยสำหรับ Linux console ซึ่งสร้างโดย<htmlurl url="mailto:phaisarn_te@hotmail.com" name="คุณไพศาล เตชะจารุวงศ์">ได้ที่ <url url="ftp://ftp.fedu.uec.ac.jp/pub/thai/UEC/ZzzThai/Sofware/Linux/fonts/console" name="ftp ของสื่อไทย">. สมมุติว่าผู้อ่านต้องการติดตั้งฟอนต์ที่ชื่อว่า "phaisan.psf". ให้เอาฟอนต์ที่ต้องการติดตั้งไปไว้ที่ไดเรกทอรี่ <tt>/usr/lib/kbd/consolefonts/</tt> แล้วเรียกคำสั่งใช้ฟอนต์ใหม่นี้ด้วยคำสั่ง <tscreen><verb> % setfont phaisarn.psf </verb></tscreen> คำสั่งนี้ต้องสั่งจาก Linux console เท่านั้น. <sect2>คีย์บอร์ดภาษาไทย <p> ผู้อ่านสามารถทำคีย์บอร์ดให้มีพฤติกรรมได้ตามที่ต้องการด้วยคำสั่ง <tt/loadkeys/. โดยปรกติแล้ว <tt/loadkeys/ จะเปลี่ยนพฤติกรรมคีย์บอร์ดตามรายละเอียดที่ระบุในไฟล์ที่อยู่ที่ <tt>/usr/lib/kbd/keytables</tt>. ผู้อ่านสามารถสร้างไฟล์ US/Thai keyboard-map และบันทึกไว้ในไดเรกทอรี่ดังกล่าวตามตัวอย่าง <tscreen><verb> # thai.map # This thai.map was modified by Poonlap Veeratanabutr (poon-v@fedu.uec.ac.jp) # from us.map. Map Thai Kedmanee keyboard to US keyboard. # 28 April 1997 # Thai/Us toggle key is AltGr(right alt). keycode 0 = keycode 1 = Escape Escape alt keycode 1 = Meta_Escape keycode 2 = +one exclam +0x0e5 plus alt keycode 2 = Meta_one alt shift keycode 2 = Meta_exclam keycode 3 = +two at +slash 0x0f1 control keycode 3 = nul control shift keycode 3 = nul alt keycode 3 = Meta_two alt shift keycode 3 = Meta_at keycode 4 = +three numbersign +underscore 0x0f2 control keycode 4 = Escape alt keycode 4 = Meta_three alt shift keycode 4 = Meta_numbersign keycode 5 = +four dollar +0x0c0 0x0f3 control keycode 5 = Control_backslash alt keycode 5 = Meta_four alt shift keycode 5 = Meta_dollar keycode 6 = +five percent +0x0b6 0x0f4 control keycode 6 = Control_bracketright alt keycode 6 = Meta_five alt shift keycode 6 = Meta_percent keycode 7 = +six asciicircum +0x0d8 0x0d9 control keycode 7 = Control_asciicircum alt keycode 7 = Meta_six alt shift keycode 7 = Meta_asciicircum keycode 8 = +seven ampersand +0x0d6 0x0df control keycode 8 = Control_underscore alt keycode 8 = Meta_seven keycode 9 = +eight asterisk +0x0a4 0x0f5 control keycode 9 = Delete alt keycode 9 = Meta_eight keycode 10 = +nine parenleft +0x0b5 0x0d6 alt keycode 10 = Meta_nine keycode 11 = +zero parenright +0x0a8 0x0f7 alt keycode 11 = Meta_zero keycode 12 = +minus underscore +0x0a2 0x0f8 control keycode 12 = Control_underscore control shift keycode 12 = Control_underscore alt keycode 12 = Meta_minus keycode 13 = +equal plus +0x0aa 0x0f9 alt keycode 13 = Meta_equal keycode 14 = Delete Delete Delete Delete alt keycode 14 = Meta_Delete keycode 15 = Tab Tab Tab Tab alt keycode 15 = Meta_Tab keycode 16 = +q Q +0x0e6 0x0f0 keycode 17 = +w W +0x0e4 quotedbl keycode 18 = +e E +0x0d3 0x0ae keycode 19 = +r R +0x0be 0x0b1 keycode 20 = +t T +0x0d0 0x0b8 keycode 21 = +y Y +0x0d1 0x0ed keycode 22 = +u U +0x0d5 0x0ea keycode 23 = +i I +0x0c3 0x0b3 keycode 24 = +o O +0x0b9 0x0cf keycode 25 = +p P +0x0c2 0x0ad keycode 26 = +bracketleft braceleft +0x0ba 0x0b0 control keycode 26 = Escape alt keycode 26 = Meta_bracketleft alt shift keycode 26 = Meta_braceleft keycode 27 = +bracketright braceright +0x0c5 comma control keycode 27 = Control_bracketright alt keycode 27 = Meta_bracketright alt shift keycode 27 = Meta_braceright keycode 28 = Return Return Return Return alt keycode 28 = 0x080d keycode 29 = Control Control Control Control keycode 30 = +a A +0x0bf 0x0c4 keycode 31 = +s S +0x0cb 0x0a6 keycode 32 = +d D +0x0a1 0x0af keycode 33 = +f F +0x0b4 0x0e2 keycode 34 = +g G +0x0e0 0x0ac keycode 35 = +h H +0x0e9 0x0e7 keycode 36 = +j J +0x0e8 0x0eb keycode 37 = +k K +0x0d2 0x0c9 keycode 38 = +l L +0x0ca 0x0c8 keycode 39 = +semicolon colon +0x0c7 0x0ab alt keycode 39 = Meta_semicolon keycode 40 = +apostrophe quotedbl +0x0a7 period control keycode 40 = Control_g alt keycode 40 = Meta_apostrophe keycode 41 = +grave asciitilde +minus percent control keycode 41 = nul alt keycode 41 = Meta_grave keycode 42 = Shift Shift Shift Shift keycode 43 = +backslash bar +0x0a3 0x0a5 control keycode 43 = Control_backslash alt keycode 43 = Meta_backslash alt shift keycode 43 = Meta_bar keycode 44 = +z Z +0x0bc parenleft keycode 45 = +x X +0x0bb parenright keycode 46 = +c C +0x0e1 0x0a9 keycode 47 = +v V +0x0cd 0x0ce keycode 48 = +b B +0x0d4 0x0da keycode 49 = +n N +0x0d7 0x0ec keycode 50 = +m M +0x0b7 question keycode 51 = +comma less +0x0c1 0x0b2 alt keycode 51 = Meta_comma alt shift keycode 51 = Meta_less keycode 52 = +period greater +0x0e3 0x0cc alt keycode 52 = Meta_period alt shift keycode 52 = Meta_greater keycode 53 = +slash question +0x0bd 0x0c6 control keycode 53 = Delete alt keycode 53 = Meta_slash keycode 54 = Shift Shift Shift Shift keycode 55 = KP_Multiply keycode 56 = Alt Alt Alt Alt keycode 57 = space space space space control keycode 57 = nul alt keycode 57 = Meta_space keycode 58 = Caps_Lock Caps_Lock Caps_Lock Caps_Lock keycode 59 = F1 F11 Console_13 control keycode 59 = F1 alt keycode 59 = Console_1 control alt keycode 59 = Console_1 keycode 60 = F2 F12 Console_14 control keycode 60 = F2 alt keycode 60 = Console_2 control alt keycode 60 = Console_2 keycode 61 = F3 F13 Console_15 control keycode 61 = F3 alt keycode 61 = Console_3 control alt keycode 61 = Console_3 keycode 62 = F4 F14 Console_16 control keycode 62 = F4 alt keycode 62 = Console_4 control alt keycode 62 = Console_4 keycode 63 = F5 F15 Console_17 control keycode 63 = F5 alt keycode 63 = Console_5 control alt keycode 63 = Console_5 keycode 64 = F6 F16 Console_18 control keycode 64 = F6 alt keycode 64 = Console_6 control alt keycode 64 = Console_6 keycode 65 = F7 F17 Console_19 control keycode 65 = F7 alt keycode 65 = Console_7 control alt keycode 65 = Console_7 keycode 66 = F8 F18 Console_20 control keycode 66 = F8 alt keycode 66 = Console_8 control alt keycode 66 = Console_8 keycode 67 = F9 F19 Console_21 control keycode 67 = F9 alt keycode 67 = Console_9 control alt keycode 67 = Console_9 keycode 68 = F10 F20 Console_22 control keycode 68 = F10 alt keycode 68 = Console_10 control alt keycode 68 = Console_10 keycode 69 = Num_Lock keycode 70 = Scroll_Lock Show_Memory Show_Registers control keycode 70 = Show_State alt keycode 70 = Scroll_Lock keycode 71 = KP_7 alt keycode 71 = Ascii_7 keycode 72 = KP_8 alt keycode 72 = Ascii_8 keycode 73 = KP_9 alt keycode 73 = Ascii_9 keycode 74 = KP_Subtract keycode 75 = KP_4 alt keycode 75 = Ascii_4 keycode 76 = KP_5 alt keycode 76 = Ascii_5 keycode 77 = KP_6 alt keycode 77 = Ascii_6 keycode 78 = KP_Add keycode 79 = KP_1 alt keycode 79 = Ascii_1 keycode 80 = KP_2 alt keycode 80 = Ascii_2 keycode 81 = KP_3 alt keycode 81 = Ascii_3 keycode 82 = KP_0 alt keycode 82 = Ascii_0 keycode 83 = KP_Period altgr control keycode 83 = Boot control alt keycode 83 = Boot keycode 84 = Last_Console keycode 85 = keycode 86 = less greater bar alt keycode 86 = Meta_less keycode 87 = F11 F11 Console_23 control keycode 87 = F11 alt keycode 87 = Console_11 control alt keycode 87 = Console_11 keycode 88 = F12 F12 Console_24 control keycode 88 = F12 alt keycode 88 = Console_12 control alt keycode 88 = Console_12 keycode 89 = keycode 90 = keycode 91 = keycode 92 = keycode 93 = keycode 94 = keycode 95 = keycode 96 = KP_Enter keycode 97 = Control keycode 98 = KP_Divide keycode 99 = Control_backslash control keycode 99 = Control_backslash alt keycode 99 = Control_backslash keycode 100 = AltGr_Lock keycode 101 = Break keycode 102 = Find keycode 103 = Up keycode 104 = Prior shift keycode 104 = Scroll_Backward keycode 105 = Left alt keycode 105 = Decr_Console keycode 106 = Right alt keycode 106 = Incr_Console keycode 107 = Select keycode 108 = Down keycode 109 = Next shift keycode 109 = Scroll_Forward keycode 110 = Insert keycode 111 = Remove altgr control keycode 111 = Boot control alt keycode 111 = Boot keycode 112 = keycode 113 = keycode 114 = keycode 115 = keycode 116 = keycode 117 = keycode 118 = keycode 119 = keycode 120 = keycode 121 = keycode 122 = keycode 123 = keycode 124 = keycode 125 = keycode 126 = keycode 127 = string F1 = "\033[[A" string F2 = "\033[[B" string F3 = "\033[[C" string F4 = "\033[[D" string F5 = "\033[[E" string F6 = "\033[17~" string F7 = "\033[18~" string F8 = "\033[19~" string F9 = "\033[20~" string F10 = "\033[21~" string F11 = "\033[23~" string F12 = "\033[24~" string F13 = "\033[25~" string F14 = "\033[26~" string F15 = "\033[28~" string F16 = "\033[29~" string F17 = "\033[31~" string F18 = "\033[32~" string F19 = "\033[33~" string F20 = "\033[34~" string Find = "\033[1~" string Insert = "\033[2~" string Remove = "\033[3~" string Select = "\033[4~" string Prior = "\033[5~" string Next = "\033[6~" string F21 = "" string F22 = "" string F23 = "" string F24 = "" string F25 = "" string F26 = "" </verb></tscreen> สมมติว่าผู้อ่านบันทึกไฟล์ตัวอย่างเป็นชื่อ <tt/thai.map/. จากนั้นสามารถเซ็ตคีย์บอร์ดภาษาไทยจาก Linux console ได้ด้วยคำสั่ง <tscreen><verb> % loadkeys thai.map </verb></tscreen> keycode คือตัวเลขที่ได้รับจากคีย์บอรด์เมื่อกดคีย์นั้นๆ. จากไฟล์ <tt/thai.map/ บรรทัดที่เขียนว่า <tscreen><verb> keycode 100 = AltGr_Lock </verb></tscreen> เป็นการกำหนดให้คีย์ที่เป็นตัวสลับคีย์บอร์ดระหว่างภาษาไทยกับภาษาอังกฤษคือ keycode 100 ซึ่งหมายถึง Alt คีย์ที่อยู่ทางขวาของคีย์บอร์ด(Right-Alt)นั่นเอง. เราลองมาดูส่วนอื่นๆของไฟล์นี้อีกเล็กน้อย, ตัวอย่าง <tscreen><verb> keycode 30 = +a A +0x0bf 0x0c4 </verb></tscreen> AltGr_Lock จะเกี่ยวข้องกับข้อความเหล่านี้คือ เวลากดคีย์ที่มีค่า keycode เป็น 30 ก็จะได้ผลลัพธ์เป็น &dquot;a&dquot;. ถ้ากดคีย์นี้พร้อมกับ Shift ก็จะได้ผลลัพธ์เป็น &dquot;A&dquot;. ถ้ากดคีย์ Right-Alt ก็จะเปลี่ยนมาใช้รหัสตัวที่สามคือ เมื่อกด &dquot;a&dquot; ผลลัพธ์ที่ได้จะเป็น &dquot;ฟ&dquot;(0x0bf) และถ้ากด &dquot;a&dquot; กับ Shift จะได้ผลลัพธ์เป็น &dquot;ฤ&dquot;(0x0c4). ถ้ากด Right-Alt อีกทีจะเป็นการเปลี่ยนมาใช้คีย์บอร์ดภาษาอังกฤษอย่างเดิม. <sect1>X Window system<label id="xwindow"> <p> <sect2>การติดตั้งฟอนต์ภาษาไทย<label id="install_fonts"> <p> ผู้อ่านสามารถ download ฟอนต์ภาษาไทยสำหรับ X window ซึ่งโดยทั่วๆไปจะอยู่ในรูปของ <tt/.bdf/ หรือ <tt/.pcf/ จากอินเทอร์เน็ต. ผู้อ่านยังสามารถใช้ฟอนต์แบบเปลี่ยนขนาดได้เช่น Type1 หรือ TrueType ซึ่งจะไม่อธิบายในที่นี้. ต่อไปนี้เป็นตัวอย่างการติดตั้งฟอนต์ในไดเรกทอรี่ <tt>/usr/X11R6/lib/X11/fonts/misc/</tt> ซึ่งเป็น default directory ของฟอนต์ใน X window. ผู้อ่านต้อง login เป็น root และนำฟอนต์ที่ download มาไปไว้ที่ <tt>/usr/X11R6/lib/X11/fonts/misc/</tt> หลังจากนั้นให้เปลี่ยนไดเรกทอรี่ไปที่ไดเรกทอรี่นั้นแล้วสั่งคำสั่ง <tscreen><verb> % mkfontdir % xset fp rehash </verb></tscreen> ถ้าผู้อ่านไม่ได้เอาฟอนต์ใหม่ไว้ที่ไดเรกทอรี่ดังกล่าว, ผู้อ่านต้องใช้คำสั่ง <tt/xset/ เพิ่มไดเรกทอรี่ใหม่นั้นใน font path. ในกรณีนี้กรุณาอ่าน man page ของ <tt/xset/ เพิ่มเติม. หลังจากที่ใส่ฟอนต์ใหม่แล้ว, สามารถเช็คว่าสามารถใช้ฟอนต์ใหม่ได้หรือไม่โดยสั่งคำสั่ง <tt/xlsfonts/ เพื่อแสดงชื่อฟอนต์ที่มีในระบบ. ถ้ายังใช้ไม่ได้, อาจต้อง start X window ใหม่อีกครั้ง. <sect2>คีย์บอร์ดภาษาไทย <p> การทำคีย์บอร์ดภาษาไทยสามารถทำได้ 2 วิธีคือ ใช้ X Keyboard Extension protocol (XKB) หรือ <tt/xmodmap/. ซึ่งผู้เขียนแนะนำให้ใช้ XKB เพราะสามารถเซ็ตได้ตอนที่ติดตั้ง X server. <sect3>การทำคีย์บอร์ดภาษาไทยด้วย XKB <p> <sect4>การเซ็ต XKB โดยผ่านโปรแกรมเซ็ต X server. <p> ในช่วงที่ติดตั้ง X server โดยใช้ <tt/xf86config/ หรือโปรแกรมติดตั้ง X server อื่นๆ โปรแกรมจะถามว่าจะใช้ XKB หรือไม่, ให้ตอบตกลงและเลือกคีย์บอร์ดภาษาไทยจากรายการที่มีให้. เมื่อ configure เสร็จแล้วสามารถใช้ภาษาไทยได้โดยกดคีย์ LeftAlt และ RightShift พร้อมๆกัน. จากนั้นผู้ใช้สามารถพิมพ์ภาษาไทยลงในโปรแกรมที่ใช้ฟอนต์ภาษาไทยได้ทันที. ถ้าต้องการใช้คีย์บอร์ดภาษาอังกฤษให้กด LeftAlt และ LeftShift เพื่อเปลี่ยนคีย์บอร์ดให้อยู่ในสภาพเดิม. คีย์ที่กดนี้เป็น default ของระบบซึ่งผู้ใช้สามารถเปลี่ยนเป็นการกดคีย์อื่นๆได้. <tt/XF86Setup/ เป็นโปรแกรมเซ็ต X server แบบ graphical user interface ที่มากับ Xfree86. ผู้อ่านสามารถเลือกคีย์ที่เปลี่ยนภาษาไทยได้จากโปรแกรมนี้. คีย์แมป(keymap) สำหรับภาษาไทยที่ใช้กับ Xfree86-3.2 มีที่ผิดอยู่คือไม่สามารถพิมพ์ตัว &dquot;ถ&dquot; และ &dquot;ศ&dquot;ได้. ถ้าผู้อ่านประสบปัญหาเช่นนี้สามารถแก้ไขได้โดย เพิ่มบรรทัดต่อไปนี้ <tscreen><verb> key <AE05> { [], [ paragraph, ocircumflex ] }; </verb></tscreen> ลงในไฟล์ <tt>/usr/X11R6/lib/X11/xkb/symbols/th</tt> ตามตัวอย่างข้างล่าง <tscreen><verb> ................. key <AE03> { [], [ minus, ograve ] }; key <AE04> { [], [ Agrave, oacute ] }; key <AE05> { [], [ paragraph, ocircumflex ] }; key <AE06> { [], [ Ooblique, Ugrave ] }; key <AE07> { [], [ Odiaeresis, ssharp ] }; ................. </verb></tscreen> และเปลี่ยนบรรทัด <tscreen><verb> key <AC08> { [], [ Ograve, eacute ] }; </verb></tscreen> ให้เป็น <tscreen><verb> key <AC08> { [], [ Ograve, Eacute ] }; </verb></tscreen> เพื่อเป็นการบอกสภาพคีย์บอร์ดว่าตอนนี้เป็นคีย์บอร์ดภาษาอะไรอยู่ ผู้อ่านสามารถใช้โปรแกรม <tt/xkbvled/ เป็นตัวบอกสถานะของคีย์บอร์ดได้. นอกจากนี้ยังมี XKB utilities อื่นๆอีกได้แก่ <tt/setxkbmap/, <tt/xkbcomp/ เป็นต้น. <sect4>การเซ็ต XKB โดยการแก้ไฟล์ <tt/XF86Config/. <p> อีกวิธีหนึ่งที่ใช้เซ็ต XKB คือการแก้ไฟล์ <tt/XF86Config/ โดยตรง. ต่อไปนี้เป็นตัวอย่างบางส่วนของไฟล์ <tt>/usr/X11R6/lib/X11/XF86Config</tt> ซึ่งเกี่ยวกับคีย์บอร์ด. ตามตัวอย่างบอกให้ X server ใช้ XKB และคีย์ที่เปลี่ยนภาษาไทยเป็นแบบ default. <tscreen><verb> Section "Keyboard" Protocol "Standard" AutoRepeat 500 5 LeftAlt Meta RightAlt Meta ScrollLock Compose RightCtl Control # XkbDisable XkbKeycodes "xfree86" XkbTypes "default" XkbCompat "default" XkbSymbols "us(pc101)" XkbGeometry "pc" XkbRules "xfree86" XkbModel "pc101" XkbLayout "th" EndSection </verb></tscreen> <sect3>การทำคีย์บอร์ดภาษาไทยโดยใช้ <tt/xmodmap/ <p> ผู้อ่านสามารถทำคีย์บอร์ดภาษาไทยได้อีกวิธีหนึ่งคือใช้ <tt/xmodmap/ แมปคีย์บอร์ดที่ใช้อยู่ให้เป็นภาษาไทย. โดยปรกติเมื่อใช้ X server ด้วยคำสั่ง <tt/startx/, X server จะเรียกคำสั่งที่เขียนไว้ใน <tt/.xinitrc/ ก่อน ซึ่งไฟล์นี้เป็นไฟล์ที่ผู้ใช้สร้างขึ้นเองในโฮมไดเรกทอรี่(home directory). ถ้าไม่มีไฟล์นี้ X server จะไปรันคำสั่งที่เขียนในไฟล์ <tt>/usr/X11R6/lib/X11/xinit/xinitrc</tt>. สำหรับผู้ใช้ที่ login จาก xdm (X Display Manager) ก็มีหลักการคล้ายกันคือ X server จะเรียกคำสั่งที่อยู่ในไฟล์ <tt/.xsession/, ถ้าไม่มีไฟล์นี้ก็จะไปหาไฟล์ของระบบ. เราเรียกไฟล์ <tt/.xinitrc/ และ <tt/.xsession/ ว่าเป็น initialization file. <tscreen><verb> #!/bin/sh # $XConsortium: xinitrc.cpp,v 1.4 91/08/22 11:41:34 rws Exp $ userresources=$HOME/.Xresources usermodmap=$HOME/.Xmodmap sysresources=/usr/X11R6/lib/X11/xinit/.Xresources sysmodmap=/usr/X11R6/lib/X11/xinit/.Xmodmap # merge in defaults and keymaps if [ -f $sysresources ]; then xrdb -merge $sysresources fi if [ -f $sysmodmap ]; then xmodmap $sysmodmap fi if [ -f $userresources ]; then xrdb -merge $userresources fi if [ -f $usermodmap ]; then xmodmap $usermodmap fi ... </verb></tscreen> ตัวอย่างไฟล์ข้างต้นคือไฟล์ <tt>/usr/X11R6/lib/X11/xinit/xinitrc</tt> จะเห็นได้ว่ามีการเรียกคำสั่ง <tt/xmodmap/ เพื่อเซ็ตคีย์บอร์ดทุกครั้งที่ใช้ X window. ในกรณีนี้ผู้อ่านสามารถเตรียมไฟล์ <tt/.Xmodmap/ สำหรับคีย์บอร์ดภาษาไทยได้ดังนี้ <tscreen><verb> ! ! Linux/XFree86 Thai Kedmanee layout (based on US keyboard) ! by poon-v@fedu.uec.ac.jp ! Use ScrollLock to switch to Thai keyboard. ! This file will work with XFree86 only. ! keycode 0x09 = Escape keycode 0x43 = F1 keycode 0x44 = F2 keycode 0x45 = F3 keycode 0x46 = F4 keycode 0x47 = F5 keycode 0x48 = F6 keycode 0x49 = F7 keycode 0x4A = F8 keycode 0x4B = F9 keycode 0x4C = F10 keycode 0x5F = F11 keycode 0x60 = F12 keycode 0x6F = Print keycode 0x4E = Mode_switch XF86ModeLock keycode 0x6E = Pause keycode 0x31 = grave asciitilde minus percent keycode 0x0A = 1 exclam 0x0e5 plus keycode 0x0B = 2 at slash 0x0f1 keycode 0x0C = 3 numbersign underscore 0x0f2 keycode 0x0D = 4 dollar 0x0c0 0x0f3 keycode 0x0E = 5 percent 0x0b6 0x0f4 keycode 0x0F = 6 asciicircum 0x0d8 0x0d9 keycode 0x10 = 7 ampersand 0x0d6 0x0df keycode 0x11 = 8 asterisk 0x0a4 0x0f5 keycode 0x12 = 9 parenleft 0x0b5 0x0f6 keycode 0x13 = 0 parenright 0x0a8 0x0f7 keycode 0x14 = minus underscore 0x0a2 0x0f8 keycode 0x15 = equal plus 0x0aa 0x0f9 keycode 0x33 = backslash bar 0x0a3 0x0a5 keycode 0x16 = BackSpace keycode 0x6A = Insert keycode 0x61 = Home keycode 0x63 = Prior keycode 0x4D = Num_Lock keycode 0x70 = KP_Divide keycode 0x3F = KP_Multiply keycode 0x52 = KP_Subtract keycode 0x17 = Tab keycode 0x18 = q Q 0x0e6 0x0f0 keycode 0x19 = w W 0x0e4 quotedbl keycode 0x1A = e E 0x0d3 0x0ae keycode 0x1B = r R 0x0be 0x0b1 keycode 0x1C = t T 0x0d0 0x0b8 keycode 0x1D = y Y 0x0d1 0x0ed keycode 0x1E = u U 0x0d5 0x0ea keycode 0x1F = i I 0x0c3 0x0b3 keycode 0x20 = o O 0x0b9 0x0cf keycode 0x21 = p P 0x0c2 0x0ad keycode 0x22 = bracketleft braceleft 0x0ba 0x0b0 keycode 0x23 = bracketright braceright 0x0c5 comma keycode 0x24 = Return keycode 0x6B = Delete keycode 0x67 = End keycode 0x69 = Next keycode 0x4F = KP_7 keycode 0x50 = KP_8 keycode 0x51 = KP_9 keycode 0x56 = KP_Add keycode 0x42 = Caps_Lock keycode 0x26 = a A 0x0bf 0x0c4 keycode 0x27 = s S 0x0cb 0c0a6 keycode 0x28 = d D 0x0a1 0x0af keycode 0x29 = f F 0x0b4 0x0e2 keycode 0x2A = g G 0x0e0 0x0ac keycode 0x2B = h H 0x0e9 0x0e7 keycode 0x2C = j J 0x0e8 0x0eb keycode 0x2D = k K 0x0d2 0x0c9 keycode 0x2E = l L 0x0ca 0x0c8 keycode 0x2F = semicolon colon 0x0c7 0x0ab keycode 0x30 = apostrophe quotedbl 0x0a7 period keycode 0x53 = KP_4 keycode 0x54 = KP_5 keycode 0x55 = KP_6 keycode 0x32 = Shift_L keycode 0x34 = z Z 0x0bc parenleft keycode 0x35 = x X 0x0bb parenright keycode 0x36 = c C 0x0e1 0x0a9 keycode 0x37 = v V 0x0cd 0x0ce keycode 0x38 = b B 0x0d4 0x0da keycode 0x39 = n N 0x0d7 0x0ec keycode 0x3A = m M 0x0b7 question keycode 0x3B = comma less 0x0c1 0x0b2 keycode 0x3C = period greater 0x0e3 0x0cc keycode 0x3D = slash question 0x0bd 0x0c6 keycode 0x3E = Shift_R keycode 0x62 = Up keycode 0x57 = KP_1 keycode 0x58 = KP_2 keycode 0x59 = KP_3 keycode 0x6C = KP_Enter keycode 0x25 = Control_L keycode 0x40 = Alt_L Meta_L keycode 0x41 = space keycode 0x71 = Alt_R Meta_R keycode 0x6D = Control_R keycode 0x64 = Left keycode 0x68 = Down keycode 0x66 = Right keycode 0x5A = KP_0 keycode 0x5B = KP_Decimal clear Shift clear Lock clear Control clear Mod1 clear Mod2 clear Mod3 clear Mod4 clear Mod5 add Shift = Shift_L Shift_R add Lock = Caps_Lock add Control = Control_L Control_R add Mod1 = Alt_L Alt_R add Mod2 = Mode_switch </verb></tscreen> ให้บันทึกตัวอย่างไฟล์นี้เป็นชื่อ <tt/.Xmodmap/ ในโฮมไดเรกทอรี่ ไฟล์นี้สามารใช้ได้จากไฟล์ <tt/xinitrc/ หรือเรียกคำสั่ง <tt/xmodmap/ โดยตรงดังนี้ <tscreen><verb> % xmodmap ~/.Xmodmap </verb></tscreen> จากตัวอย่างไฟล์ <tt/.Xmodmap/ ดังกล่าว, คีย์ที่ใช้สลับคีย์บอร์ดภาษาไทยกับอังกฤษคือ Scroll Lock (keycode 0x4E), <tscreen><verb> keycode 0x4E = Mode_switch XF86ModeLock </verb></tscreen> <tt/XF86ModeLock/ เป็น keysym พิเศษของ XFree86 X server ใช้สำหรับล็อกคีย์บอร์ดให้เป็นภาษาไทย. keycode ที่ใช้ในที่นี้เป็นตัวเลขเฉพาะของ XFree86 X server เพราะฉะนั้นถ้าใช้ commercial X server อื่นๆ ค่าของ keycode จะเปลี่ยนไปด้วย. ในกรณีที่ต้องการหาค่า keycode ของคีย์บอร์ดให้ใช้โปรแกรม <tt/xev/. ผู้อ่านสามารถอ่านข้อมูลเพิ่มเติมได้จาก man page ของ <tt/X/, <tt/xev/ และ <tt/xmodmap/. <bf/หมายเหตุ:/ ถ้าผู้อ่านใช้ XFree86 เวอร์ชั่น 3.1.2D เป็นต้นไป ต้องใส่คำสั่ง <tt/XkbDisable/ ในไฟล์ <tt/XF86Config/ เพื่อให้สามารถใช้ <tt/xmodmap/ ได้ตามตัวอย่าง <tscreen><verb> ..... Section "Keyboard" Protocol "Standard" AutoRepeat 500 5 LeftAlt Meta RightAlt ModeShift ScrollLock ModeLock RightCtl Compose XkbDisable EndSection ..... </verb></tscreen> <sect>การใช้ภาษาไทยกับโปรแกรมต่างๆ <p> โปรแกรมส่วนใหญ่บน Linux ที่สนับสนุนรหัสอักษร ISO-8859-1 สามารถใช้ภาษาไทยได้ แต่ไม่ได้หมายความว่าโปรแกรมเหล่านั้นสนับสนุนการใช้ภาษาไทย. การใช้ภาษาไทยกับโปรแกรมที่มีอยู่แล้วไม่ถูกหลักการ และต้องการผู้พัฒนาโปรแกรมปรับปรุงโปรแกรมเหล่านั้นให้เหมาะกับภาษาไทยต่อไป. เราสามารถใช้โปรแกรม <tt/xedit/ ซึ่งเป็น editor ได้โดยใช้ฟอนต์ภาษาไทยในการแสดงผล และพิมพ์ภาษาไทยจากแป้นพิมพ์ที่เซ็ตไว้ล่วงหน้า. การใช้ option <tt/-fn/ เป็นการบอกให้โปรแกรมที่เขียนด้วย X Toolkit Intrinsics รู้ว่าเราต้องการใช้ฟอนต์ที่ระบุ ตัวอย่างเช่น <tscreen><verb> % xedit -fn thai8x16 </verb></tscreen> จากตัวอย่างดังกล่าว <tt/thai8x16/ เป็นชื่อฟอนต์ภาษาไทยอันหนึ่งเท่านั้น, ผู้ใช้เลือกใช้ฟอนต์อื่นๆได้โดยดูชื่อฟอนต์ด้วยคำสั่ง <tt/xlsfonts/ หรือ <tt/xfontsel/. ถ้าผู้อ่านต้องการให้ใช้ฟอนต์ภาษาไทยที่กำหนดโดยไม่ต้องใส่ option ให้แก้ไฟล์ <tt>$HOME/.Xdefaults</tt> ตามตัวอย่าง เช่น <tscreen><verb> Xedit*font: thai8x16 </verb></tscreen> <sect1>ตัวอย่างการใช้ภาษาไทยกับโปรแกรมต่างๆ <p> <sect2>txterm <p> โดยปรกติฟอนต์ที่แสดงใน <tt/xterm/ จะมีขนาดความกว้างเท่ากันหมด เวลาพิมพ์ตัวอักษรทุกครั้ง cursor จะเลื่อนไปทางขวาเรื่อยๆ ซึ่งทำให้การพิมพ์ภาษาไทยใน <tt/xterm/ ไม่ดีเท่าที่ควร. <tt/txterm/ เป็น terminal emulator ภาษาไทยที่ดัดแปลงมาจาก <tt/xterm/ โดยคุณวุฒิชัย อัมพรอร่ามเวทย์, สามารถพิมพ์ภาษาไทยได้และเลื่อน cursor ได้ถูกต้องดูสวยงาม. <tt/txterm/ สามารถพิมพ์ภาษาไทยได้ในตัวโดยไม่ต้องเซ็ตคีย์บอร์ดล่วงหน้า, ให้ใช้คีย์ &dquot;F1&dquot; เป็นตัวสลับคีย์บอร์ดระหว่างภาษาไทยกับอังกฤษที่ <tt/txterm/ เตรียมไว้. เราสามารถใช้โปรแกรมอื่นๆผ่าน <tt/txterm/ ได้เช่น <tt/vi, pine, less/ เป็นต้น. ผู้อ่านสามารถ download <tt/txterm/ ได้จาก <url url="http://thaigate.nacsis.ac.jp/ftp/thaisoft/titech-aima/" name="Thaigate softwares"> หรือ <url url="ftp://ftp.fedu.uec.ac.jp/pub/thai/UEC/ZzzThai/Software/Linux" name="สื่อไทย ftp">. ปัญหาการใช้ <tt/txterm/ ที่ควรปรับปรุงในอนาคต เช่น cut and paste ยังทำได้ไม่สะดวก, <tt/txterm/ ที่ใช้ขณะนี้ไม่สามารถแสดงสีได้ เป็นต้น. <descrip> <tag/<tt>bash shell</tt> :/ โดยปรกติแล้ว shell จะรับสามารถรับอักษร 7 บิตเท่านั้น. ในกรณีที่ต้องการพิมพ์ภาษาไทยใน shell prompt ต้องเซ็ตให้ shell ยอมรับอักษรแบบ 8 บิตก่อนจึงจะพิมพ์ภาษาไทยได้. วิธีง่ายที่สุดที่คือการตั้งตัวแปรทั่วไป(environment variable) <tt/LC_CTYPE/ ให้เป็น <tt/iso_8859_1/. ผู้เขียนไม่แนะนำให้เซ็ตตัวแปรทั่วไปตัวนี้เนื่องจาก <tt/iso_8859_1/ ไม่ใช้ค่าที่แสดงถึง locale ภาษาไทย และค่านี้อาจส่งผลกระทบกับโปรแกรมอื่นๆได้ด้วย. ถ้าพิมพ์ภาษาไทยใน shell prompt ได้ก็หมายความว่าเราสามารถตั้งชื่อไฟล์เป็นภาษาไทยได้. <tag/<tt>ls</tt> :/ ถ้าผู้อ่านตั้งชื่อไฟล์เป็นภาษาไทย, เวลาจะลิส(list) ชื่อไฟล์เหล่านั้นต้องใช้คำสั่งตามตัวอย่าง <tscreen><verb> ls -N </verb></tscreen> ถ้าไม่ต้องการพิมพ์ option ตลอดเวลา, สามารถสร้าง alias ไว้ใน <tt/.bashrc/(สำหรับผู้ใช้ bash shell) ก็ได้. ถ้าใช้ <tt/ls/ โดยไม่มี option <tt/-N/ จะเห็นชื่อไฟล์ภาษาไทยเป็น ?????. </descrip> <sect2>Emacs, Mule <p> Mule ย่อมาจาก &dquot;Multilingual Enhancement to GNU Emacs&dquot;. Mule พัฒนามาจาก Emacs(Editor Macro) ให้สามารถพิมพ์ภาษาต่างๆที่ไม่ใช่ภาษาอังกฤษเช่น ภาษาญี่ปุ่น, จีน, ไทย, อาหรับ ฯลฯ ได้พร้อมกัน และสามารถทำทุกอย่างที่ <tt/emacs/ ทำได้. ผู้ที่ใช้ <tt/emacs/ หรือ <tt/mule/ ครั้งแรกจะไม่ชอบมันอย่างแน่นอน(ผู้เขียนก็เช่นกัน แต่ตอนนี้ <tt/mule/ เป็น editor ที่ผู้เขียนใช้บ่อยที่สุดและขาดไม่ได้) แต่ <tt/mule/ เป็น editor ที่เขียนด้วยภาษา emacs lisp ส่วนใหญ่ทำให้มันพิเศษกว่า editor อื่นๆ และใช้งานได้ไม่จำกัด. ความเห็นส่วนตัวแล้ว, <tt/mule/ เป็นโปรแกรมที่สนับสนุนภาษาไทยมากที่สุดในขณะนี้ ที่น่าแปลกใจและน่าอายคือผู้ที่ทำให้ <tt/mule/ ใช้ภาษาไทยได้คือคนญี่ปุ่นไม่ใช่คนไทย. ผู้ใช้ต้องเพิ่มคำสั่ง(emacs lisp)ต่อไปนี้ในไฟล์ <tt>$HOME/.emacs</tt> ก่อนจะใช้ภาษาไทย <tscreen><verb> ;; ;; Thai system initailization for mule ;; (set-primary-environment 'thai) </verb></tscreen> เป็นการสั่งให้ <tt/mule/ สนับสนุนการใช้ภาษาไทย. ผู้ใช้สามารถพิมพ์ภาษาไทยโดยกดคีย์ &dquot;Ctrl+]&dquot; เพื่อเปลี่ยนเป็นคีย์บอร์ดภาษาไทย. ผู้อ่านต้องการฟอนต์พิเศษที่ใช้กับ <tt/mule/ คือ <tscreen><verb> -etl-fixed-medium-r-normal--14-140-72-72-m-70-tis620.2529-1 -etl-fixed-medium-r-normal--16-160-72-72-m-80-tis620.2529-1 -etl-fixed-medium-r-normal--24-170-100-100-m-120-tis620.2529-1 </verb></tscreen> ฟอนต์ใดฟอนต์หนึ่งใน 3 ฟอนต์นี้หรือทั้งหมด. สามารถ download ได้จาก <url url="ftp://ftp.fedu.uec.ac.jp/pub/thai/UEC/ZzzThai/Software/Linux/fonts/" name="สื่อไทย"> หรือ <url url="ftp://etlport.etl.go.jp/pub/mule/fonts/ETL/" name="Etl site">. ฟอนต์เหล่านี้เป็นฟอนต์ที่มีขนาดความกว้างเท่ากันทุกตัวอักษร. ผู้อ่านสามารถ download <tt/mule/ ได้จาก <url url="ftp://etlport.etl.go.jp/pub/mule/" name="ElectroTechnical Laboratory(ETL), Japan"> <sect2>pine <p> ในช่วงที่ e-mail ยังไม่แพร่หลายมากนัก, การส่งข้อความทาง e-mail สามารถทำได้เฉพาะอักษรรหัส 7 บิตพวก ASCII เท่านั้น. นับวัน e-mail เป็นที่ใช้กันอย่างแพร่หลายมากขึ้น, การส่งข้อมูลที่เป็น binary หรืออักษรรหัส 8 บิตจึงเป็นความจำเป็นที่หลีกเลี่ยงไม่ได้. Mail Transfer Agent(MTA) รุ่นเก่าไม่สามารถส่งข้อมูลแบบ 8 บิตได้จึงเกิดมาตรฐาน MIME (Multipurpose Internet Mail Extensions) ขึ้น. Mail User Agent(MUA), โปรแกรมรับส่ง e-mail ที่สนับสนุน MIME สามารถส่งข้อความที่ใช้รหัส 8 บิตเช่นภาษาไทยได้ โดยการ encode เป็นรหัส 7 บิตก่อนแล้วจึงส่ง. เมื่อ MUA อีกฝ่ายได้รับ e-mail นั้น, ต้อง decode กลับให้เป็นรหัส 8 บิตเพื่อแสดงผลให้เหมือนเดิม. ปัจจุบัน MTA สามารถส่งข้อความแบบ 8 บิตได้โดยตรงแล้ว แต่การ encode ให้เป็นรหัส 7 บิตยังคงต้องการอยู่เนื่องจาก MTA ทุกที่ไม่ได้สนับสนุนการส่งข้อความแบบ 8 บิตโดยตรง. วิธีการ encode ที่ใช้ส่งข้อความภาษาไทยกันอยู่ขณะนี้คือ &dquot;Quoted Printable&dquot;. โปรแกรมรับส่ง e-mail ที่สนับสนุน MIME ได้แก่ <tt/pine/, <tt/elm/, Netscape mail เป็นต้น. ในที่นี้จะกล่าวถึง <tt/pine/ กับการใช้ภาษาไทยเพราะเป็นโปรแกรมที่ได้รับความนิยมสูงและสะดวกในการใช้. การใช้ <tt/pine/ ให้ใช้จาก <tt/txterm/. ให้ใส่บรรทัดต่อไปนี้ลงในไฟล์ <tt>~/.pinerc</tt> <tscreen><verb> character-set=TIS-620 </verb></tscreen> หรือผู้ใช้เซ็ต character-set จากเมนู Setup ทางหน้าจอ <tt/pine/ ก็ได้. <sect2>Netscape <p> ผู้ใช้ netscape สามารถเซ็ตฟอนต์ภาษาไทยผ่านทาง Preference ได้. เนื่องจาก netscape ขณะนี้ยังไม่สนับสนุนภาษาไทยจึงควรที่จะเซ็ตฟอนต์ให้อยู่ในกลุ่มของ User-defined. เมื่อเซ็ตฟอนต์เสร็จแล้ว, ผู้ใช้สามารถอ่าน homepage ภาษาไทยได้, เขียน e-mail ภาษาไทย(MIME) หรือเขียนไฟล์แบบ HTML ด้วย composer ก็ได้. ผู้อ่านสามารถอ่านรายละเอียดเพิ่มเติมได้ที่ <url url="http://www.fedu.uec.ac.jp/ZzzThai/unix" name="ภาษาไทยบนระบบปฏิบัติการ UNIX"> <sect3>การส่ง e-mail <p> ผู้ใช้ต้องเซ็ต netscape ให้ส่ง e-mail ที่มีอักษรรหัส 8 บิทในรูปของ quoted printable ก่อน โดยเลือกตัวเลือกจาก Preferences | Messages | More Options | Send messages that use 8-bit characters. หลังจากนั้นสามารถเขียน e-mail ได้โดยเลือกฟอนต์ภาษาไทยจาก View | Encoding | User-defined และพิมพ์ภาษาไทยจากคีย์บอร์ดภาษาไทย. <sect3>การเขียนไฟล์แบบ HTML ด้วย composer <p> หลักการเช่นเดียวกับการเขียน e-mail คือเลือกฟอนต์ก่อนแล้วพิมพ์ภาษาไทย. ไฟล์ที่สร้างโดย netscape composer บริเวณ <HEAD> จะมีลักษณะดังนี้คือ <tscreen><verb> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-user-defined"> <META NAME="GENERATOR" CONTENT="Mozilla/4.06 [en] (X11; I; Linux 2.0.32 i586) [Netscape]"> &etago;HEAD> </verb></tscreen> ผู้ใช้ควรแก้ &dquot;charset=x-user-defined&dquot; ให้เป็น &dquot;charset=tis-620&dquot; ตามตัวอย่างต่อไปนี้ เพื่อเป็นการระบุรหัสอักษรที่ใช้ให้ถูกต้องตามมาตรฐานภาษาไทย. <tscreen><verb> ... <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=tis-620"> ... </verb></tscreen> <sect3>Thai Mozilla project <p> Thai Mozilla project เป็นความพยายามที่จะทำให้ netscape สนับสนุนภาษาไทยอย่างเต็มที่ไม่ว่าจะเป็น การตัดคำระหว่างบรรทัด หรือการใช้รหัสอักษรที่ถูกต้องตามมาตรฐาน. โปรเจคนี้เป็นโปรเจคมาจากการที่ netscape เปิดโอกาสให้ผู้พัฒนามาพัฒนาโปรแกรมแบบ open source ซึ่ง Thai Mozilla project นำโดยคุณสัมพันธ์. ผู้อ่านสามารถติดตามรายละเอียดได้ที่ <url url="http://members.xoom.com/inThai/mozthai.html" name="http://members.xoom.com/inThai/mozthai.html">. <sect2>cttex <p> <tt/cttex/ พัฒนาโดยคุณวุฒิชัย อัมพรอร่ามเวทย์ เพื่อใช้ภาษาไทยกับ LaTeX. นอกจากนั้นยังสามารถใช้ในการใส่ <WBR> ในไฟล์แบบ HTML เพื่อให้ netscape ตัดคำให้สวยขึ้น. <sect2>Ss, Simple thai word Separator <p> <tt/ss/ เป็นโปรแกรมตัดคำโดยอาศัยคำในพจนานุกรมเป็นตัวเปรียบเทียบ ซึ่งโปรแกรมนี้ปรับปรุงมาจาก <tt/cttex/ อีกทีหนึ่ง. โปรแกรมนี้สามารถแทรกคำที่ต้องการระหว่างคำได้ สามารถประยุกต์ใช้ได้เช่น การใส่ <WBR> ในไฟล์แบบ HTML เพื่อให้ netscape ตัดคำให้สวยขึ้น. โปรแกรมนี้พัฒนาโดย Mr.Teera Kittichareonpot. <sect2>Xzthai, X keyboard configurator + simple editor <p> <tt/Xzthai/, เป็นโปรแกรมที่ใช้ Tcl/Tk ในการเขียน, มีจุดประสงค์เพื่อใช้ <tt/xmodmap/ แมปคีย์บอร์ดภาษาไทยได้ง่ายขึ้นบนคอมพิวเตอร์ที่ใช้ X window (ไม่จำเป็นต้องเป็น Linux). นอกจากนี้ยังมี editor ง่ายๆสำหรับเขียนข้อความภาษาไทยหรือส่ง e-mail ด้วย. <sect1>การพิมพ์เอกสารภาษาไทย <p> <tt/Thai2ps/ เป็นโปรแกรมที่แปลงไฟล์ภาษาไทย (plain text) ให้เป็นไฟล์แบบ Postscript และใช้พิมพ์ออกทางเครื่องพิมพ์ด้วย <tt/gs/ หรือ เครื่องพิมพ์แบบ Postscript. ถ้าต้องการพิมพ์เอกสารที่มีคุณภาพกว่านี้ผู้อ่านควรใช้ LaTeX. <sect2>การใช้ภาษาไทยกับ LaTeX <p> ผู้อ่านสามารถอ่านเอกสารที่เกี่ยวกับภาษาไทยกับ LaTeX โดยละเอียดได้ที่ &dquot;<url url="http://www.fedu.uec.ac.jp/ZzzThai/Linux/thailatex" name="การใช้ภาษาไทยกับ LaTeX">&dquot;. ในที่นี้จะกล่าวถึงการติดตั้งอย่างง่ายและวิธีใช้ทั่วๆไปเท่านั้น. <sect2>Configuration ของภาษาไทยกับ LaTeX <p> ก่อนอื่นต้องมีชุดโปรแกรม LaTeX install อยู่ก่อนแล้ว ถ้ายังไม่มีให้ install ให้เรียบร้อย. ขั้นแรกให้ download ไฟล์ต่างที่จำเป็นตามรายการต่อไปนี้จาก <url url="ftp://ftp.fedu.uec.ac.jp/pub/thai/uec/zzzthai/software/Linux/thai_latex/" name="สื่อไทย ftp"> <tscreen><verb> tfm fonts: dbtt.tfm dbttb.tfm dbttbi.tfm dbtti.tfm postscript fonts: dbtt.pfa dbttb.pfa dbttbi.pfa dbtti.pfa style files: thai.sty Thai Latex filter: cttex Sample Latex file (optional): ttex.ttex test.ttex </verb></tscreen> จะมีไดเรกทอรี่หลักที่เก็บไฟล์ต่างๆที่ LaTeX ใช้ ชื่อ <tt/texmf/ อยู่ที่ <tt>/usr/lib/texmf/texmf/</tt> (RedHat 5.0). ให้เพิ่มบรรทัดต่อไปนี้ในไฟล์ <tt>/usr/lib/texmf/texmf/texmf/dvips/misc/psfonts.map</tt> <tscreen><verb> dbtt DBThaiText <dbtt.pfa dbttb DBThaiTextBold <dbttb.pfa dbttbi DBThaiTextBoldItalic <dbttbi.pfa dbtti DBThaiTextItalic <dbtti.pfa </verb></tscreen> สร้างไดเรกทอรี่และก็อปปี้ไฟล์ต่างๆตามตัวอย่าง <tscreen><verb> % mkdir /usr/lib/texmf/texmf/fonts/tfm/public/thai % mkdir /usr/lib/texmf/texmf/fonts/type1/public/thai % mkdir /usr/lib/texmf/texmf/tex/generic/thai % cp *.tfm /usr/lib/texmf/texmf/fonts/tfm/public/thai % cp *.pfa /usr/lib/texmf/texmf/fonts/type1/public/thai % cp *.sty /usr/lib/texmf/texmf/tex/generic/thai </verb></tscreen> สั่งคำสั่ง <tt/texhash/ หรือ <tt/MakeTeXls-R/(บางเครื่องอาจไม่มี <tt/texthash/) เพื่อ update ฐานข้อมูลของ <tt/Tex/. <tscreen><verb> %/usr/bin/texhash texhash: updating /usr/lib/texmf/texmf/ls-R ... texhash: Done. </verb></tscreen> <sect2>การใช้ <tt/LaTeX/ filter <p> ใช้ <tt/cttex/ ตามตัวอย่าง, <tscreen><verb> % cttex < ttex.ttex > ttex.tex C-TTeX $Revivsion: 1.15 $ Usage : cttex [cutcode] < infile > outfile Usage : cutcode=0 forces operation in HTML mode. Build-in dictionary size: 9945 words 343 Done % latex ttex.tex ... % xdvi ttex.dvi </verb></tscreen> ผู้ใช้สามารถแปลงไฟล์แบบ dvi ให้เป็น Postscript ได้ด้วยคำสั่ง <tt/dvips/ <tscreen><verb> % dvips -o ttex.ps ttex.dvi </verb></tscreen> <p> จากนั้นผู้ใช้สามารถพิมพ์ออกทางเครื่องพิมพ์ด้วยคำสั่ง <tt/lpr/ ซึ่งในที่นี้จะไม่กล่าวถึงการเซ็ตเครื่องพิมพ์. ผู้อ่านสามารถเซ็ตเครื่องพิมพ์เองได้โดยอ่านเอกสาร HOWTO เกี่ยวกับการพิมพ์ หรือใช้ print-tools (RedHat5.0). ขั้นตอนและวิธีการเขียนเอกสาร LaTeX โดยละเอียดสามารถอ่านได้จากเอกสาร &dquot;<url url="http://www.fedu.uec.ac.jp/ZzzThai/Linux/thailatex" name="การใช้ภาษาไทยกับ LaTeX">&dquot;. <sect1>X Application Resources <p> เนื่องจากโปรแกรมที่เขียนตาม X Toolkit Intrinsics สามารถ configure รูปแบบได้ด้วย resource file เช่น <tt/.Xdefaults/. ตัวอย่างต่อไปนี้เป็นการทำให้ <tt/xman/ แสดงตัวอักษร(label) เป็นภาษาไทย. <tscreen> <tt/....../<p><p> <tt/!! Xman section/<p> <tt/Xman*Font: thai8x16/<p> <tt/Xman*helpButton.Label:/ ช่วย<p> <tt/Xman*quitButton.Label:/ ออก<p> <tt/Xman*manpageButton.Label:/ คู่มือการใช้<p> <tt/....../ </tscreen> <p> ให้เขียนคำสั่งเหล่านี้ในไฟล์ <tt/.Xdefaults/ และสั่งคำสั่ง <tt/xrdb/ เพื่อ update ข้อมูลก่อนใช้ <tt/xman/ ดังนี้ <tscreen><verb> % xrdb -merge $HOME/.Xdefaults </verb></tscreen> ผู้อ่านสามารถใช้หลักการเดียวกันนี้ เปลี่ยนฟอนต์และ label ต่างๆของ window manager ให้เป็นภาษาไทยได้เช่นกัน <sect1> Thai locale(th_TH) <p> Locale เป็นกลุ่ม environment variable ที่บอกลักษณะภาษาที่ใช้อยู่. ถ้าเซ็ต locale ให้เป็นภาษาญี่ปุ่นเวลาสั่งคำสั่งและเกิด error ก็จะมี error message เป็นภาษาไทยญี่ปุ่น, ถ้าใช้โปรแกรมบน X window เมนูที่แสดงในภาษานั้นๆก็จะแสดงตามภาษาที่ locale ตั้งค่าไว้, เปลี่ยนระบบวันที่ให้อยู่ในรูปแบบไทยเป็นต้น. เมื่อมี locale definition สำหรับภาษาไทยแล้ว เราสามารถใช้งานกับโปรแกรมที่สนับสนุน locale ได้และใช้งานได้ในสภาพแวดล้อมแบบไทยๆ. เมื่อมี locale หลายภาษาในเครื่องเดียว, หมายถึงเราสามารถแสดงผลเป็นหลายภาษาในหน้าจอเดียว เช่นเราอาจจะใช้โปรแกรม <tt/xman/ สองโปรแกรมโดยที่ <tt/man/ อันหนึ่งมีเมนูเป็นภาษาไทย แต่อีกอันหนึ่งเป็นภาษาไทยฝรั่งเศสเป็นต้น. ขณะนี้ locale สำหรับภาษาไทยอยู่ระหว่างการพัฒนา ผู้อ่านที่สนใจดูรายละเอียดได้ที่ <url url="http://software.thai.net/locale/" name="Thai locale"> <sect1> Thai Extension for Linux (TE) <p> TE เป็น installation package ที่รวบรวมโปรแกรมภาษาไทยต่างๆ, ฟอนต์ และ configure ระบบให้โดยอัตโนมัติ. หลังจากที่ install และ reboot เครื่อง, สามารถใช้ภาษาไทยได้ทันที. download TE(preview version) ได้ที่ <url url="ftp://fedu.uec.ac.jp/pub/thai/UEC/ZzzThai/Software/Linux/" name="สื่อไทย ftp"> <sect>อ้างอิงและแหล่งข้อมูลเพิ่มเติม <p> <sect1>เอกสารที่เกี่ยวข้อง<label id="docs"> <p> <itemize> <item>เอกสาร HOWTO ภาษาอังกฤษหาได้จาก <tt/sunsite.unc.edu/. <item>The Linux Danish/International HOWTO by Niels Kristian Bech Jensen <item>The Linux Cyrillic HOWTO by Alexander L. Belikoff <item>The Keystroke mini-HOWTO by Zenon Fortuna. <item>The Locales mini-HOWTO by Peeter Joot. (This one is mainly for developers.) <item>The ISO-8859-1 FAQ and Programming for Internationalization FAQ (plus much more) by Michael Gschwind is available from <url url="http://www.vlsivie.tuwien.ac.at/mike/i18n.html" name="his homepage">. <item>The Linux Thai HOWTO by Poonlap Veeratanabutr. <item>เอกสาร <url url="http://www.fedu.uec.ac.jp/ZzzThai/Linux/thailatex/" name="&dquot;การใช้ภาษาไทยกับ LaTeX&dquot;"> โดยพูลลาภ วีระธนาบุตร <item>เอกสาร <url url="http://www.fedu.uec.ac.jp/ZzzThai/Linux/sgmltools.html" name="&dquot;การใช้ SGML-tools กับภาษาไทย&dquot;"> โดยพูลลาภ วีระธนาบุตร </itemize> <sect1> แหล่งข้อมูลสารสนเทศที่เกี่ยวข้องกับภาษาไทย<label id="thstuffs"> <p> <url url="http://thaigate.nacsis.ac.jp" name="&dquot;Thai project, Thaigate&dquot;"> <itemize> <item> ข้อมูลเกี่ยวกับ Thai computing. <item> Discussion groups ภาษาไทยเช่น thai-l (Thai Mailing list), Thai news, etc. <item> เอกสารอ้างอิงและซอฟต์แวร์ภาษาไทย. <item> Thai Latex filter, <tt/cttex/. </itemize> <url url="http://www.ctrl.titech.ac.jp:80/~vuthi/" name="&dquot;Vuthichai's Page&dquot;"> <itemize> <item>ข้อมูลเกี่ยวกับ Thai computing โดยคุณ วุฒิชัย อัมพรอร่ามเวทย์. </itemize> <url url="http://www.fedu.uec.ac.jp/ZzzThai/" name="&dquot;สื่อไทยโปรเจค&dquot;"> <itemize> <item> ซอฟท์แวร์ส่วนใหญ่ที่แนะนำ สามารถ download ได้ที่นี่. <item> อธิบายการใช้ภาษาไทยกับคอมพิวเตอร์ platform หลักได้แก่ UNIX like, Windows และ Mac. <item> <url url="http://www.fedu.uec.ac.jp/ZzzThai/Linux" name="แหล่งข้อมูล Linux">, TE, การใช้ภาษาไทยกับ LaTeX , etc. <item> โดยกลุ่มนักเรียนไทยจาก The University of Electro-Communications, Tokyo. </itemize> <url url="http://www.inet.co.th/cyberclub/trin/thairef/" name="&dquot;An annotated reference to the Thai implementations&dquot;"> <itemize> <item> ข้อมูลเกี่ยวกับมาตรฐานรหัสอักษรไทย. <item> โดย Mr.Trin Tantsetthi. </itemize> <url url="http://linux.thai.net" name="&dquot;Thai Linux Working Group&dquot;"> <itemize> <item> ความเคลื่อนไหวการสร้าง Linux distribution ภาษาไทย. </itemize> <url url="http://software.thai.net" name="&dquot;เครือข่ายซอฟท์แวร์ไท&dquot;"> <itemize> <item> ข้อมูลการพัฒนาซอฟท์แวร์ไทยแบบไทๆ </itemize> <url url="http://www.nectec.or.th/it-standards/" name="&dquot;มาตรฐานเทคโนโลยีสารสนเทศของไทย&dquot;"> <itemize> <item>เอกสารมาตรฐานอุตสาหกรรมไทยต่างๆที่เกี่ยวกับเทคโนโลยีสารสนเทศ. </itemize> <url url="http://www.school.net.th/linux-sis/" name="&dquot;SchoolNet Internet Sever&dquot;"> <itemize> <item> การใช้ Linux เป็น server ของโรงเรียน <item> โดย <url url="http://www.nectec.or.th" name="NECTEC"> (National Electronics and Computer Technology Center). </itemize> <url url="http://members.xoom.com/inThai" name="&dquot;Thai Open Source Development&dquot;"> <itemize> <item> Mozilla ภาษาไทย. <item> Libinthai library สำหรับทำงานกับภาษาไทยเช่น การตัดคำ. <item> โดยคุณ สัมพันธ์ ระรื่นรมย์ </itemize> <url url="http://www.geocities.com/SiliconValley/8302" name="&dquot;Linux Thai Project&dquot;"> <itemize> <item> ข้อมูลการพัฒนา Linux ให้เป็นภาษาไทยและเอกสารภาษาไทยอื่นๆ. <item> By Kaiwal Development Team. </itemize> <url url="http://lulu.mptc.eng.cmu.ac.th/HyperNews/get/ThaiLinux.html" name="&dquot;ThaiLinux unofficial Webboard&dquot;"> <itemize> <item> บอร์ดอิเล็กทรอนิกส์แลกเปลี่ยนความคิดเห็น, ถามตอบเกี่ยวกับ Linux. <item> โดยคุณ พฤฒ บุญมา </itemize> <url url="http://www.geocities.com/Tokyo/Bay/4521/" name="&dquot;Thai Linux installation project&dquot;"> <itemize> <item> วิธีการ install Linux เป็นภาษาไทย. </itemize> <url url="http://members.xoom.com/cwg/x11th/" name="&dquot;X window and Thai language&dquot;"> <itemize> <item> โดย Mr.Rawat S.Pirom </itemize> <url url="http://seasrc.th.net/main/main.htm" name="&dquot;SouthEast Asian Computing and Lingistics&dquot;"> <itemize> <item>เอกสารการวิจัยภาษาไทยในแง่มุมของคอมพิวเตอร์. </itemize> <sect1>FTP และ Web sites<label id="ftp"> <p> ซอฟท์แวร์ที่แนะนำในบทความนี้ สามารถ download ได้จาก <itemize> <item> <url url="ftp://ftp.fedu.uec.ac.jp/pub/thai/UEC/ZzzThai/Software/Linux" name="ftp://ftp.fedu.uec.ac.jp/pub/thai/UEC/ZzzThai/Software/Linux"> <item> <url url="http://thaigate.nacsis.ac.jp/files/index.html" name="http://thaigate.nacsis.ac.jp/files/index.html"> <item> <url url="http://www.nectec.or.th/pub/software/i18n/thai" name="http://www.nectec.or.th/pub/software/i18n/thai" > </itemize> <tt/Mule/ <itemize> <item><url url="ftp://etlport.etl.go.jp/pub/mule" name="ftp://etlport.etl.go.jp/pub/mule"> </itemize> <tt/Ss/ <itemize> <item> <url url="http://members.xoom.com/theera/ss/" name="http://members.xoom.com/theera/ss/"> </itemize> <sect>Acknowledgments and Copyright <p> เอกสารฉบับนี้แปลมาจาก The Linux Thai HOWTO ซึ่งเขียนโดยผู้เขียนคนเดียวกันและเพิ่มเติมบางส่วน. เดิมเอกสาร The Linux Thai HOWTO เขียนโดยมี The Linux Danish/International HOWTO by Thomas Petersen, <tt/petersen@post1.tele.dk/ (the original author) and Niels Kristian Bech Jensen, <tt/nkbj@image.dk/เป็นตัวอย่างบางส่วน. ขอขอบคุณ, คุณวุฒิชัย อัมพรอร่ามเวทย์(พี่ฮุ้ย), คุณไพศาล เตชะจารุวงศ์, นักเรียนไทยในมหาวิทยาลัย The University of Electro-Communiations, เพื่อนนักเรียนไทยในญี่ปุ่นทุกคน และบุคคลที่อยู่ใน mailing list linux-sis@nectec.or.th และ tis620-cp@thai.com ทุกท่าน. ผู้เขียนอนุญาติให้นำส่วนใดส่วนหนึ่งหรือทั้งหมดในเอกสารเผยแพร่, แก้ไขได้โดยอิสระ แต่จะต้องระบุแหล่งที่มาของข้อมูลและอ้างอิงถึงผู้เขียนเอกสารฉบับนี้ด้วย หากมีข้อติชมประการใดสามารถส่ง e-mail ได้ที่ <tt/poon-v@fedu.uec.ac.jp/ </article> <!-- $Id: Thai-HOWTO-th.sgml,v 1.1 1998/10/15 07:15:36 poon-v Exp $ -->