下一页 上一页 目录

2. 泰语输入和输出

2.1 Linux 控制台

泰语字符在 Linux 控制台中不能正确显示。如果您主要使用 X window,您可以跳过此部分。

泰语字体

您可以从 ZzzThai ftp 站点 获取由 Mr. Phaisarn Techajaruwong 创建的 Linux 泰语控制台字体

例如,有一个字体名为 "phaisarn.psf"。将其放入 /usr/lib/kbd/consolefonts/ 目录。然后,您可以使用以下命令从 Linux 控制台加载新字体

%setfont phaisarn.psf

键盘布局

您可以使用 loadkeys 命令根据您的喜好设置键盘行为。通常,您使用 loadkeys 加载位于 /usr/lib/kbd/keytables 中的文件。您可以创建一个美式/泰语键盘映射文件并将其保存在此目录中。这是一个示例。

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 = ""

假设您将此文件另存为 thai.map。从 Linux 控制台,使用命令 loadkeys 加载 thai.map

%loadkeys thai.map
您可以通过按右 Alt 键切换到泰语键盘。如果您想切换回原来的键盘,再次按右 Alt 键。

2.2 X Window 系统

泰语字体

您可以从互联网上获取 bdf 格式或 pcf 格式的泰语字体。您也可以使用可伸缩字体,例如 Type1 或 TrueType 字体。但我不会对此进行描述。

安装泰语字体

您必须以 root 用户身份登录。让我们将泰语字体放入 /usr/X11R6/lib/X11/fonts/misc/,这是一个默认字体路径。将目录更改为 /usr/X11R6/lib/X11/fonts/misc/ 并运行命令

%mkfontdir
%xset fp rehash
如果您将泰语字体放在不同的目录中,您必须使用 xset 添加新的字体路径。请参阅手册页以获取更多信息。您可以通过运行命令 xlsfonts 并查看是否有泰语字体来检查新字体。如果您无法从此命令中看到任何泰语字体,您可能需要重启 X window。

泰语键盘布局有两种在 X window 上映射泰语键盘的方法:使用 X KeyboardExtension (XKB) 和使用 xmodmap。请选择您映射泰语键盘的方式。我建议使用 XKB。

XKB 和泰语键盘布局。

从 XFree86 3.1.2D 开始,您可以使用新的 X11R6.1 XKEYBOARD 扩展来管理键盘布局。这非常有用。

在使用 xf86config 配置 X 服务器期间,系统会询问您是否要使用 XKB。如果您想为系统设置泰语键盘布局,请回答是。这里有一个预配置的键盘映射列表。选择标准 101 键,泰语编码。

XF86Setup 是 XFree86 X 服务器的图形化 X 服务器配置实用程序。它比传统的 xf86config 更容易使用。您可以使用此工具轻松选择键盘布局。

有很多键盘切换键可供选择。默认设置为 LeftAlt+RightShift 切换到泰语,LeftAlt+LeftShift 切换到美式英语。您可以在任何支持 ISO-8859-1 字符集的应用程序中输入泰语字符,但不要忘记在这些应用程序中使用泰语字体。

我发现 XFree86-3.2 附带的预配置键盘映射不正确。您可能无法输入位于 “5 键” 上的 THO THUNG。要解决此问题,您应该在文件 /usr/X11R6/lib/X11/xkb/symbols/th 中添加以下行,如示例所示。

    key <AE05> {     [], [   paragraph,      ocircumflex     ]       };
在文件 /usr/X11R6/lib/X11/xkb/symbols/th 中添加以下行,如示例所示。
.................
    key <AE03> {        [], [       minus,      ograve          ]       };
    key <AE04> {        [], [      Agrave,      oacute          ]       };
    key <AE05> {     [], [   paragraph,      ocircumflex     ]       };
    key <AE06> {        [], [    Ooblique,      Ugrave          ]       };
    key <AE07> {        [], [  Odiaeresis,      ssharp          ]       };
.................
您也无法输入 SORUSI。请将该行从
    key <AC08> {        [], [      Ograve,      eacute          ]       };
更改为
    key <AC08> {        [], [      Ograve,      Eacute          ]       };
请注意,eacute 等于 MAITHO,而 Eacute 等于 SORUSI。

还有一些 XKB 扩展实用程序,例如 setxkbmapxkbcomp 等。请参阅手册页以获取更多信息。我建议使用 xkbvled。当您使用泰语键盘时,指示灯将亮起,以便您了解键盘的状态。

以下是关于键盘部分的 XF86Config 文件的一部分。如果您想手动配置键盘,请更改 /usr/X11R6/lib/X11/XF86Config 的内容,如下例所示。此配置使用默认切换键。

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

如果您使用 XKB 扩展,则使用 xmodmap 进行泰语键盘映射可能不起作用。有关更多信息,请参阅 XF86Config 手册页。

使用 xmodmap 的泰语键盘布局

您可以使用实用程序 xmodmap 来映射泰语键盘。通常,xmodmap 用于加载键盘配置文件。对于大多数 Linux 发行版,当您使用 startx 启动 X window 时,X 服务器将首先在 /usr/X11R6/lib/X11/xinit/ 中查找 .Xmodmap。如果 .Xmodmap 不存在,X 服务器将在您的主目录中查找 .Xmodmap。请参阅 /usr/X11R6/lib/X11/xinit/xinitrc 的内容。

以下是泰语 Kedmanee 键盘布局的 .Xmodmap 示例。

!
! Linux/XFree86 Thai Kedmanee layout (based on US keyboard)
! 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
只需将 .Xmodmap 放在您的主目录中即可。当您启动 X window 时,X 服务器将加载此文件。

您也可以从命令行加载 .Xmodmap

%xmodmap ~/.Xmodmap

在上面的 .Xmodmap 文件中,美式英语/泰语切换键被分配给键码 0x4E (78),即 Scroll Lock 键,语句如下


keycode 0x4E =  Mode_switch     XF86ModeLock

XF86ModeLock 是 XFree86 X 服务器的特殊键符。如果您不添加此键符,您必须在键入泰语字符时按住 Scroll Lock 键。请注意,如果您使用商业 X 服务器,则某些键码会有所不同。您可能需要自行映射键盘。有关更多信息,请参阅 Xxev 的手册页。

注意: 如果您使用的是 XFree86 版本 3.1.2D 或更高版本,则需要在 XF86Config 文件的键盘部分中添加行 XkbDisable。您可以像以下示例一样配置键盘部分。

Section "Keyboard"
   Protocol        "Standard"
   AutoRepeat      500 5
   LeftAlt         Meta
   RightAlt        ModeShift
   ScrollLock      ModeLock
   RightCtl        Compose
   XkbDisable
EndSection


下一页 上一页 目录