在 2000 年之前,我使用以下方法在某些 Unix 系统上的 X Window 系统中自定义键盘。将以下内容放入你的 .bash_profile 文件中
export LANG=language
或者
或者对于 csh shell
setenv LANG=langauge
并将 Xmodmap 文件放在你的主目录中。如果你问我从哪里可以获得这样的 Xmodmap 文件,一些在这个 HOWTO 中,或者去 GNOME ../share 目录。文件 /usr/X11R6/lib/X11/locale/locale.alias 包含语言的别名,所以查看那里以找出什么是 ca_ES 或 br_FR(你使用的语言的确切语法 - 你不能写 "croatia" 但你必须写 "croatian",而不是 "Croatian";这非常重要,因为 Unix 是区分大小写的)。
现在你必须安装相关的语言字体,并将这些字体的路径放入 XF86Config 文件中。如果你想国际化你的键盘,首先使用标准的 Xmodmap 定义,并使用右 Alt 键在键盘之间切换(如果你使用 GNOME Xmodmap 文件)。如果它不起作用,请执行以下操作
a) 从 /usr/X11R6/lib/X11/locale/iso8859-2 复制 "Compose" 文件到:/usr/X11R6/lib/X11/locale/iso8859-1 目录(是的,是 iso8859-1,不是 iso8859-2)。如果需要,备份原始的 "Compose" 文件
b) 将包含的 .Xmodmap 文件放到你的根目录(斯洛伐克语,或者制作你自己的 .Xmodmap 文件,或者从这里列出的文件中选择)。
c) 安装 ISO8859-2 字体(或其他相关的字体)。
你可以尝试发出命令
xset q
来查看你的路径中有哪些字体。
如果你想从 X Window 系统添加字体到你的路径中,发出命令
xset fp+ /usr/fonts_path
xset fp rehash
d) 禁用你的 XF86Config 中每个未注释的 "Scroll Lock" 行,因为我们的斯洛伐克语 .Xmodmap 文件使用 Scroll Lock 来切换键盘。
e) 如果必要,将新安装的字体的适当字体路径放入 XF86Config 文件中(Mandrake 7.2 和其他操作系统可能不需要这样做)。Xmodmap 解决方案可以应用于你选择的所有 X 键盘。
首先,我必须说在我的解决方案中(在较旧的 XFree86 版本中),如果使用不同的映射,它似乎适用于某些 ISO8859-2 键码实体的 Xmodmap 键码。像 lcaron, zcaron 这样的 ISO8859-2 定义(键码实体)实际上不起作用。这意味着必须使用 ISO8859-1 定义来代替,它们要么给你它们所说的(aacute [o?=, eacute [o?=, 等等),要么不给你它们所说的(使用 ISO8859-2 字体,在你的 .Xmodmap 文件中放入 "threequarters" 不会给你 "3/4" 而是带有抑扬符的 "z",上面有一个反向的 ^ )。例如,"mu" 会给出 lcaron,"oslash" rcaron,等等。
然而,其他键定义,例如,adieresis(上面有两个点的 a),uacute(上面有斜线的 u),以及 dead_diaeresis 不需要替换其他定义,并且工作得很好,因为它们在各处都有定义(死键是你按下并按住的键,但什么都不会发生,但在按下另一个键后,你会得到一个特殊字符)。
在一些较旧的 XFree86 发行版中,../iso8859-1 目录中的原始 "Compose" 文件可以完全用于英语、斯洛伐克语或捷克语键盘布局(波兰语、匈牙利语、斯洛文尼亚语、克罗地亚语),但只有一个问题 - 死键不起作用。这就是为什么你必须将 "Compose" 文件从 iso8859-2 目录复制到 iso8859-1 目录,或者,你可以编辑 iso8859-1 目录中的 "Compose" 文件。
你可以保持 XF86Config 文件中 Keyboard 部分不变。将以下内容(如果尚不存在)放入 "Keyboard" 部分
Section "Keyboard"
Protocol "Standard"
XkbRules "xfree86"
XkbModel "pc101"
XkbLayout "us"
通过发出命令 "xmodmap �/.Xmodmap" 强制系统读取 xmodmap 映射。或者,你可以有 60 个 .Xmodmap 文件,如 .Xmo1, .Xmo2, .Xmo3, .Xmo4 等,你可以强制系统读取它们 (xmodmap �/.Xmo1)。点表示它是一个隐藏文件,这不是必要的。你也可以有 xmo1, xmo2, 或 xmo3 Xmodmap 文件。
注意:如果你正在使用一些旧程序,如 StarOffice 5.2,它们有自己的字体,因此 Xmodmap 解决方案在旧系统上不会立即对这些应用程序起作用。StarOffice 6.0 很好地处理了到 win1250 和反之的转换,因此你可以将文档传输到 M$ 平台。在我的 Mandrake 8.0 中,StarOffice 6.0 在使用我的标准 Xmodmap 解决方案后立即国际化了。所有字体都工作了。但是,StarOffice 5.2 情况并非如此。在 StarOffice 5.2 中,你必须将 X 字体添加到 StarOffice 的字体目录中。这是一个脚本,可以为你做到这一点。剪切它,命名为 "so52",使其可执行 (chmod +x so52),将其复制到 StarOffice5.2/share/xp3 目录并在那里执行它。
-------------------------------cut_here-----------------------------------
#!/bin/sh
# 在这里放置你的 StarOffice 路径
STAR_OFFICE_ROOT=/mnt/StarOffice5.2
FONTS_DIR=/usr/X11R6/lib/X11/fonts/ISO8859-2/Type1
# -----------------------------------------------------------------------
# 不要在这里编辑脚本
# -----------------------------------------------------------------------
XP3_DIR=$STAR_OFFICE_ROOT/share/xp3
if [ -e $XP3_DIR/psstd.fonts.il2 ]; then
echo "更改已完成!"
echo "如果出现问题,请删除文件"
echo " $XP3_DIR/psstd.fonts.il2"
exit 1
fi
if [ -e $FONTS_DIR/afm ]; then
AFM_DIR=$FONTS_DIR/afm
else
AFM_DIR=$FONTS_DIR
fi
# 链接 AFM 文件。
ln -sf $AFM_DIR/*.[aA][fF][mM] $XP3_DIR/fontmetrics/afm
# 链接 PFB 文件。
ln -sf $FONTS_DIR/*.[pP][fF][bB] $XP3_DIR/pssoftfonts
grep "\.pf" $FONTS_DIR/fonts.dir \
| sed -e 's/\.pfb /, /g' -e 's/-0-0-0-0-/-%d-%d-%d-%d-/g' \
> $XP3_DIR/psstd.fonts.il2
cat $XP3_DIR/psstd.fonts.il2 >> $XP3_DIR/psstd.fonts
------------------------------------cut_here-----------------------------
StarOffice 5.2 完全识别 Word97 文档,即使是用其他语言编写的,但为了将 ISO8859-2 文档传输到 M$ 平台,需要一个从 iso8859-2 到 win1250 编码的转换器。对于 html 文档,这不是必要的。
因此,专业翻译人员可以使用 StarOffice 5.2。
如果你想编辑并制作你自己的 .Xmodmap 键盘布局定义,我将解释 .Xmodmap 文件中的一行,以明确你应该做什么。
这个例子可以用于所有键码。例如,这一行
keycode 0x11 = 8 asterisk aacute 8
(注意:键码 0x11 源自 "xkeycaps" 实用程序;你也可以使用 X Window "xev" 实用程序来探索键盘难题。)
表示第一对,默认的一对,(数字 "8" 和 "asterisk")将在你按下键码 0x11 ("8") 时显示数字 "8",在按下 "shift" 键时显示 asterisk。在按下 Scroll Lock 后,还有另一个定义:ISO_NEXT_GROUP,这意味着当你按下默认的 "8" 键时,不会显示 "8",而是 aacute (�);当你按下 "shift" 键时,将显示数字 "8"。因此,如果你更改 "aacute" 和 "8",你放在 "aacute" 和 "8" 位置上的任何内容都将被显示,例如
keycode 0x11 = 8 asterisk semicolon colon
将在按下 Scroll Lock 后,在你的 0x11 键码中给出 "semicolon" 和 "colon"。
ISO_NEXT_GROUP 由另一行定义。如果未定义此行,你将只能使用两个定义("8" 和 "asterisk") - 查看我的 .Xmodmap 文件。如果你删除 ISO_NEXT_GROUP(右侧的下一对定义),你将只有一个键盘定义组("8" 和 "asterisk")。编辑 .Xmodmap 文件时要小心。除非你知道自己在做什么(或者你通过右 Alt 键映射第二个键盘),否则你不能删除启用 Scroll Lock 利用率的定义。这些行例如
keycode 0x4e = ISO_Next_Group
add mod5 = ISO_Next_Group,
等等。你还必须记住 Unix 是区分大小写的。如果你想了解更多关于键码的信息,请安装 "xkeycaps" 软件包或使用 "xev"。
你右边的以下符号是我通过我的研究发现的。这只是一个例子。当你在 Xmodmap 文件中使用 "Pound" 定义时,X Window 系统将显示 Lslash 代替(当然,与使用 iso8859-2 字体有关)。当你选择一些简单的 KDE 文本编辑器时,从字体菜单中选择 iso8859-2 字体字符集。注意:元音 *acute (uacute, eacute, 等等) 符号不需要替换,因此我在这里省略了 iacute, aacute, 等等。
ISO8859-1 实体将给你:ISO8859-2 实体
在我们非标准或实验性的 Xmodmap 键码定义中
egrave ccaron
ugrave uring
agrave racute
ecircumflex "c" with something at the bottom of it
ucircumflex Lslash "Pound" in Xmodmap gives you Lslash.
Lcaron Writing "yen" will give us Lcaron
Scaron copyright (will give us Scaron)
Tcaron guillemotleft (will give us Tcaron)
Zcaron registered
lcaron mu
scaron onesuperior
tcaron guillemotright
zcaron threequarters
Cacute AE
Eogonek find out yourself
Edieresis Edieresis
ecaron igrave
onequarter zacute
questiondown z with a ring above it
Dcaron find out yourself
Ooblique Rcaron
thorn t with something at the bottom of it
Sterling Lstroke
yen Lcaron
copyright Scaron
brokenbar Sacute
macron Z with something above it
paragraph sacute
periodcentered caron
masculine s with something at the bottom of it
onequarter zacute
ecircumflex d with a line above it
ETH Dstroke
Ntilde Nacute
Otilde O with two dots above it
registered Zcaron
Nacute Ograve
nacute ograve
Ocircumflex Ocircumflex
ccaron egrave
nacute ntilde ------------------------------------------------------------------------
你可以使用此文件作为示例来构建你自己的 xmodmap 键盘布局。 _______________________cut_here_________________________
keycode 0x09 = Escape
keycode 0x43 = F1 F11 F1 Multi_key
keycode 0x44 = F2 F12 F2 F12
keycode 0x45 = F3 F13 F3 F13 idiaeresis
keycode 0x46 = F4 F14 F4 F14 mu yen
keycode 0x47 = F5 F15 F5 F15 guillemotright guillemotleft
keycode 0x48 = F6 F16 F6 F16 ograve
keycode 0x49 = F7 F17 F7 dead_abovedot oacute
keycode 0x4A = F8 F18 F8 dead_breve acute
keycode 0x4B = F9 F19 F9 dead_cedilla ugrave
keycode 0x4C = F10 F20 F10 dead_ogonek
keycode 0x5F = F11 F21 dead_acute dead_caron
keycode 0x60 = F12 F22 dead_abovering dead_diaeresis
keycode 0x6F = Print Execute dead_iota
keycode 0x4E = ISO_Next_Group
keycode 0x6E = Pause
keycode 0x31 = grave asciitilde semicolon dead_diaeresis
keycode 0x0A = 1 exclam plus 1
keycode 0x0B = 2 at mu 2
keycode 0x0C = 3 numbersign onesuperior 3
keycode 0x0D = 4 dollar egrave 4
keycode 0x0E = 5 percent 0x0bb 5
keycode 0x0F = 6 asciicircum threequarters 6
keycode 0x10 = 7 ampersand yacute 7
keycode 0x11 = 8 asterisk aacute 8
keycode 0x12 = 9 parenleft iacute 9
keycode 0x13 = 0 parenright eacute 0
keycode 0x14 = minus underscore equal percent
keycode 0x15 = equal plus dead_acute dead_caron
keycode 0x33 = backslash bar ograve parenright
keycode 0x16 = BackSpace
keycode 0x6A = Insert
keycode 0x61 = Home
keycode 0x63 = Prior
keycode 0x4D = Num_Lock Pointer_EnableKeys
keycode 0x70 = KP_Divide slash
keycode 0x3F = KP_Multiply asterisk
keycode 0x52 = KP_Subtract minus
keycode 0x17 = Tab ISO_Left_Tab
keycode 0x18 = q Q
keycode 0x19 = w W
keycode 0x1A = e E
keycode 0x1B = r R
keycode 0x1C = t T
keycode 0x1D = y Y z Z
keycode 0x1E = u U
keycode 0x1F = i I
keycode 0x20 = o O
keycode 0x21 = p P
keycode 0x22 = bracketleft braceleft uacute slash
keycode 0x23 = bracketright braceright adiaeresis parenleft
keycode 0x24 = Return
keycode 0x6B = Delete
keycode 0x67 = End
keycode 0x69 = Next
keycode 0x4F = KP_Home 7 KP_Home
keycode 0x50 = KP_Up 8
keycode 0x51 = KP_Prior 9
keycode 0x56 = KP_Add plus
keycode 0x42 = Caps_Lock
keycode 0x26 = a A
keycode 0x27 = s S
keycode 0x28 = d D
keycode 0x29 = f F
keycode 0x2A = g G
keycode 0x2B = h H
keycode 0x2C = j J
keycode 0x2D = k K
keycode 0x2E = l L
keycode 0x2F = semicolon colon ocircumflex quotedbl
keycode 0x30 = apostrophe quotedbl section exclam
keycode 0x53 = KP_Left 4
keycode 0x54 = KP_Begin 5
keycode 0x55 = KP_Right 6
keycode 0x32 = Shift_L ISO_Next_Group
keycode 0x34 = z Z y Y
keycode 0x35 = x X
keycode 0x36 = c C
keycode 0x37 = v V
keycode 0x38 = b B
keycode 0x39 = n N
keycode 0x3A = m M
keycode 0x3B = comma less comma question
keycode 0x3C = period greater period colon
keycode 0x3D = slash question minus underscore
keycode 0x3E = Shift_R
keycode 0x62 = Up
keycode 0x57 = KP_End 1
keycode 0x58 = KP_Down 2
keycode 0x59 = KP_Next 3
keycode 0x6C = KP_Enter Return
keycode 0x25 = Control_L ISO_Next_Group
!keycode 0x40 = Alt_L Meta_L
keycode 0x40 = Meta_L Alt_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_Insert 0
keycode 0x5B = KP_Delete period
!keysym Alt_L = Meta_L
!keysym F12 = Multi_key
clear Shift
!clear Lock
clear Control
clear Mod1
clear Mod2
clear Mod3
clear Mod4
clear Mod5
add Shift = Shift_L Shift_R
add Control = Control_L Control_R
!add Mod1 = Alt_L Alt_R
add Mod1 = Meta_L Alt_R
add Mod2 = Num_Lock
add Mod5 = ISO_Next_Group
!add Mod1 =
!add Mod2 = Alt_R Alt_L Mode_switch
keycode 0x73 = ISO_Next_Group
keycode 0x74 = dead_acute dead_diaeresis
keycode 0x75 = dead_caron dead_abovering
_____________________________cut_here_____________________________
你几乎可以在 (SuSE) /opt/gnome/share/xmodmap 中的 GNOME 目录中找到任何 xmodmap 文件(带有标准 ISO8859-1,2 和其他定义)。要切换键盘,请使用右 Alt 键。