3. 操作方法:这个实验性解决方案是一个遗留问题 - 如果你使用较新的系统,请不要阅读它

在 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。

3.1. Xmodmap 理论和 Xmodmap 解决方案

如果你想编辑并制作你自己的 .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 ------------------------------------------------------------------------

3.2. 用于斯洛伐克语打字机布局的实验性 .Xmodmap 示例文件

你可以使用此文件作为示例来构建你自己的 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 键。