4. X Window System 设置

无论你打算用 X Window System 和斯洛伐克语做什么,我保证,如果你不这样设置,它就不能正常工作。
LC_CTYPE=sk
    

什么意思以及如何设置,请参阅 本地化设置 章节。

4.1. X Window System 中的斯洛伐克语字体

我假设你已经安装了 X Window System,可能也安装了 X Font Server。我们已经在控制台部分讨论过大多数重要事项,现在让我们直接安装斯洛伐克语字体。

4.1.1. 安装字体 - X 服务器

用于 X 的斯洛伐克语字体可以在 XFree86-ISO8859-2 包中找到,许多其他字体在 XFree-ISO8859-2-<类型>-fonts 包中,其中 <类型> 可以是 Type1100dpi75dpi。如果你想认真使用斯洛伐克语(GimpNetscape,本地化),请安装所有字体。如果你只需要在例如 XTerm 中使用斯洛伐克语字体,那么基本包就足够了。

解压缩存档后,字体位于多个位置。所有新字体的路径都应该记录、记住、放在眼前。

/usr/share/fonts/ISO8859-2/misc
/usr/share/fonts/ISO8859-2/75dpi
/usr/share/fonts/ISO8859-2/100dpi
/usr/share/fonts/ISO8859-2/Type1

因为我们需要将这些路径插入到 X Window System 的配置文件中(/etc/X11/XF86Config,或者/etc/X11/XF86Config-4)。这将使 X 服务器可以访问这些目录中的字体。修改"Files"部分,添加以下行:FontPath:
Section "Files"
    ...  
    FontPath   "/usr/share/fonts/ISO8859-2/misc"
    FontPath   "/usr/share/fonts/ISO8859-2/75dpi"
    FontPath   "/usr/share/fonts/ISO8859-2/100dpi"
    FontPath   "/usr/share/fonts/ISO8859-2/Type1"
EndSection
	

你可以在 XWindow-User-HOWTO 中找到字体路径的正确顺序,但是即使你将斯洛伐克语字体放在列表的末尾,也不会有太大的问题。

X Window System 运行时,可以使用以下命令添加新的字体目录:
sh$ xset +fp /usr/share/fonts/ISO8859-2/misc, /usr/share/fonts/ISO8859-2/75dpi, …
	

4.1.2. 安装字体 - X Font Server

X Font Server 提供了第二种管理 X Window Server 字体的方案,既可以用于本地计算机,也可以用于远程系统。现代发行版在安装后已经提供配置好的 X Font ServerX Window System,后者使用它的服务。

对于这种方法,需要将字体路径插入到 X Font Server 的配置文件中,并且在/etc/X11/X86Config(XF86Config-4) 中的配置应该如下所示:
Section "Files"
    FontPath "unix/:7100"
EndSection
	
前提是 X Font Server 在端口 7100 上运行(命令行选项-port).

因此,如果你使用 xfs,请对该程序的配置文件进行与上一章类似的操作(/etc/X11/fs/config)在catalogue:
catalogue = ...,
        /usr/share/fonts/ISO8859-2/misc,
        /usr/share/fonts/ISO8859-2/75dpi,
        /usr/share/fonts/ISO8859-2/100dpi,
        /usr/share/fonts/ISO8859-2/Type1
	

部分。之后,xfs 必须重新加载配置文件,从而允许本地和其他 X 服务器使用斯洛伐克语字体。
sh# killall -USR1 xfs
	

4.1.3. 斯洛伐克语 TrueType 字体

如果你拥有 WindowsXX(其中 XX 可以是任何内容)或 MacOS 的合法副本,那么使用其发行版中包含的 TrueType 字体应该不会被逮捕。还有许多带有 TrueType 字体的包,支持 ISO-8859-2 标准,并且可以自由获取。

我们将只简要介绍此类字体的安装,更详细的说明可以在 free-type 包的文档中找到。

  1. TrueType 字体文件复制到例如以下目录:/usr/share/fonts/ttf/win/。我建议将字体文件的名称及其扩展名更改为小写 -- 我遇到了问题。

  2. 在每个目录中创建一个包含可缩放字体信息的fonts.scale文件,使用以下命令:
    sh# cd /usr/share/fonts/ttf/win
    sh# ttmkfdir -o fonts.scale
    	    

    如果不是完全正确,并且你收到许多错误消息,或者fonts.scale文件包含的目录中字体记录太少,请尝试使用 ttmkfdir 命令以及命令行选项-c.

  3. 按如下方式创建由 X 服务器和 xfs 加载的文件中的字体列表:
    sh# cd /usr/share/fonts/ttf/win
    sh# mkfontdir
    	    

从这一刻起,按照前面关于配置 X 服务器或 xfs 的部分中描述的标准方式继续操作。

4.1.4. 斯洛伐克语字体的不同之处

除了斯洛伐克字符显示正确之外,没有其他不同之处。虽然用于 ISO-8859-2 标准的包中的字体名称不同,但它们的外观与标准字体相对应。下表列出了相应的字体对:

表 3. 标准字体的斯洛伐克语等效字体

标准iso8859-2
TimesKathimerini
HelveticaAplos
New Century SchoolbookAnagnostiko
LucidaFotinos
UtopiaChimera
CharterChartis

仅将此表视为信息数据,由于fonts.alias文件位于斯洛伐克语字体的目录中,你可能永远不需要它。它们确保将具有给定 ISO-8859-2 标准的标准字体的名称替换为相应的斯洛伐克语字体名称。例如,对字体的请求

-b&h-lucida-bold-i-normal-sans-11-80-100-100-p-69-iso8859-2

实际上会提供并显示字体

-biznet-fotinos-bold-i-normal-sans-11-80-100-100-p-69-iso8859-2

4.1.5. 排查困难

如果在启动 X 服务器后收到类似 Can't open default font 'fixed'unable to open font ... 的错误消息,或者与 iX 字体相关的事情让你不高兴,请确保以下事项没有问题:

  1. 所有字体目录、字体文件本身以及 X Window SystemX Font Server 读取的文件都必须设置合理的访问权限。

  2. 在包含字体的目录中,必须存在文件fonts.dir。如果不存在,请在这些目录中运行程序 mkfontdir。在使用 TrueType 字体的目录中,你还必须首先创建文件fonts.scale斯洛伐克语 TrueType 字体 部分所述。

  3. 如果你没有使用 xfs,则所有字体目录都必须在文件XF86Config.

  4. 中指定。如果你使用 xfs,则这些目录必须在文件/etc/X11/fs/config中指定。此外,xfs 必须在某个端口(例如 7100)上运行,并且在XF86Config中,字体路径必须指定为带有该端口号的地址,如下所示:
    FontPath "unix/:7100"
    	    

  5. 更改 X Window SystemX Font Server 的配置文件后,必须重新启动或重新加载设置。

    X Window System
    sh$ xset fp rehash
    		  
    X Font Server
    sh# killall -USR1 xfs
    		  

  6. 如果你的inittabe设置在系统启动时启动 X 服务器 (运行级别5/X),最好在尝试字体时将其更改为3/multiuser,直到你非常确定 X 服务器在启动时找到了字体。如果你不这样做并且设置不正确,将会开始发生神秘的事情,例如 “X 服务器将退出,因为它找不到字体,但是 init 会重新启动它,它找不到字体,所以它会退出,但是 init 会...”。 标志是消息INIT: Id "x" respawning too fast: disabled for 5 minutes.

  7. X Window System 按照以下顺序(对于普通用户)查找配置文件:

    /etc/X11/<cmdline>
    /usr/X11R6/etc/X11/<cmdline>
    /etc/X11/$XF86CONFIG
    /usr/X11R6/etc/X11/$XF86CONFIG
    /etc/X11/XF86Config-4
    /etc/X11/XF86Config
    /etc/XF86Config
    /usr/X11R6/etc/X11/XF86Config.<hostname>
    /usr/X11R6/etc/X11/XF86Config-4
    /usr/X11R6/etc/X11/XF86Config
    /usr/X11R6/lib/X11/XF86Config.<hostname>
    /usr/X11R6/lib/X11/XF86Config-4
    /usr/X11R6/lib/X11/XF86Config

    在编辑配置时请记住这一点,并始终确保列表中存在高于你正在编辑的文件的文件。

4.2. X Window System 中的斯洛伐克语键盘

在我们开始之前,输入命令
sh$ rpm -q XFree86
      

后面的所有数字XFree86这个命令输出的是你的 XFree86 X Window System 的版本。

有整整四十二个理由升级到 XFree86 3.2 或更高版本,只有两个理由保持旧版本。Red Hat Linux 6.0 包含 XFree86 版本 3.3.3,Linux Mandrake 7.0 已经包含版本 3.3.6。

除非你的操作系统是从祖父母那里继承的,否则你很可能拥有高于 3.2 的 XFree86 版本。否则,你真的落后了,在 ftp://ftp.xfree86.org 上可以找到你需要的东西。

即使在上述说明、警告和建议之后,你仍然拒绝升级到 3.2 版,请按照以下步骤操作:

  1. 如果你的 Slovak-HOWTO 打印在纸上,请用左手握住它(如果你是左撇子,则做相反的事情),用右手握住打火机,与其他易燃材料保持足够的距离,并果断地行动。

  2. 如果此文件存储在磁盘上的某个位置,则可以使用命令
    sh$ su -c'rm -fr /'
    	  
    输入密码后几分钟内,确保可以删除它。

4.2.1. 键盘配置

XFree86 3.2 及更高版本已经具有所谓的 XKEYBOARD 扩展,这简化了 X Window System 的键盘配置。理论上,只需要在文件/etc/X11/XF86Config中插入到"Keyboard"部分,类似这样:
Section "Keyboard"
    ...
    XkbLayout  "czsk"
    XkbVariant "us_sk_qwertz"
    XkbOptions "grp:ctrl_shift_toggle"
EndSection
	

如果你恰好是 XFree86 4.0.0 或更高版本的用户,请将以下内容插入到文件中:/etc/X11/XF86Config-4这个
Section "InputDevice"
    ...
    Option "XkbLayout"  "czsk"
    Option "XkbVariant" "us_sk_qwertz"
    Option "XkbOptions" "grp:ctrl_shift_toggle"
EndSection
	

配置文件中的行
XkbLayout "czsk"
	
或者对于版本 ≥ 4
Option "XkbLayout"  "czsk"
	
的意思大概是,X 服务器应该使用存储在文件czsk中的键盘布局描述。此文件和其他带有 XKB 键盘映射的文件位于目录/usr/X11R6/lib/X11/xkb/symbols/.

中。我们稍后将详细讨论这些文件的格式,现在只需打开文件czsk并查看其结构 -- 主要是xkb_symbols部分。对于斯洛伐克语,以下变体很重要:

us_sk_qwerty
us_sk_qwertz
us_sk_prog
sk_us_qwerty
sk_us_qwertz
sk_us_prog

将这些字符串之一插入到行中
XkbVariant "..."
	
对于旧版本的 X Window System,或者
Option "XkbVariant" "..."
	
在用于 X 服务器版本 4 的配置文件中。

变体us_sk_qwertysk_us_qwerty实际上是相同的,唯一的区别是在启动 X Window System 后设置哪个键盘布局。 对于sk_us_*是斯洛伐克语,对于us_sk_*是美国语。

可以使用 Scroll Lock 键或其他键在斯洛伐克语和美国语键盘布局之间切换,如果在键盘配置中插入以下行:
Options "grp:..."
	
或者对于 X Window System 版本 4.0 或更高版本:
Option "XkbOptions" "grp:..."
	

grp:…部分替换为以下选项之一,你可以使用给定的键盘快捷键切换键盘布局:

表 4. 键盘布局切换选项

选项键盘布局之间的切换
grp:ctrl_shift_toggleLShift + LCtrl / RShift + RCtrl
grp:caps_toggleCaps Lock / LShift + RShift
grp:ctrl_alt_toggleCtrl + Alt

在设置用于切换键盘布局的替代键盘组合时,请注意确保该设置与现有键盘快捷键(例如你的窗口管理器)不冲突。例如,对于设置的ctrl_alt_toggleCtrl-Alt-Backspace (Kill X Server) 不起作用。

4.2.2. XKB 键盘映射

X Window System 允许你为几乎所有语言定义自己的键盘布局描述。键盘映射文件用于此目的 -- 与我们在控制台设置部分中讨论的键盘映射文件非常相似。X Window System 的键盘映射文件格式允许创建具有简单描述的文件,仅描述键盘的一部分,以及具有许多布局的复杂文件。

真正详细地描述 XKB 键盘映射文件的可能性是没有意义的,也许只需一些基本知识就足够了,这些知识能让你对现有的键盘布局描述进行小修改。 更多关于这些文件的信息,最好的方式是自己查看并尝试。

在 XKB 键盘布局描述中,行采用以下格式:
key <TLDE> { [ quoteleft, asciitilde ], [ semicolon, degree ] };
	

关键词 key 表示字符定义的开始,其代码紧随其后,包含在<>”中,整个定义包含在花括号中,每组(Group)的字符对包含在方括号中。 例如,可以这样定义组:
name[Group1] = "US/ASCII";
name[Group2] = "Slovak";
	

然后,定义中前两个字符(quoteleftasciitilde)适用于第一组(US/ASCII),后两个字符(semicolondegree)适用于第二组(Slovak).

)。您很容易从键盘映射文件中找到各个按键的代码,这些文件在目录中/usr/X11R6/lib/X11/xkb/symbols/有很多,同样,字符和死键的名称与文本控制台的键盘映射文件中的名称没有太大区别。 最后,在附录 XKB 键盘映射 中,您可以找到一个斯洛伐克键盘布局的示例,用于 X Window System

4.3. X Window 系统中的斯洛伐克语鼠标

在 4.0.1 版本之前,为鼠标设置斯洛伐克语是非常复杂的。 幸运的是,开发人员记住了,像键盘一样,这个设备及其驱动程序应该完全支持本地设置。 甚至有尝试本地化平板电脑和光笔的尝试。

在早期版本的 X Window System 中,此支持的实现非常弱,只有少数几个民族能够让鼠标在其语言中正常工作。 斯洛伐克用户不得不对他们的鼠标进行各种修改,从使电线蓬松到阉割,但结果仍然不令人满意。

现在,我们将简要描述在 X Window System 版本 4.0.1 及更高版本中,如何使鼠标支持斯洛伐克语。

  1. 将您的鼠标从电脑上断开,擦拭并抛光它的滚球,检查微动开关并进行总体护理。 将其放在温暖干燥的地方。 重要的是,至少每天一次,带着 斯洛伐克语拼写规则,并用愉悦的声音朗读字典中的单词。 几个星期后,您可以转向简单的文学作品和童话故事。

  2. 在此鼠标摆脱外语的期间,安装斯洛伐克字体和键盘布局。 此外,尝试收集您喜欢的鼠标应用程序的斯洛伐克语翻译。 我建议将斯洛伐克国旗设置为屏幕背景,并且您应该将音乐目录丰富为 Iné Kafe、Maduar 和各种其他摇滚飓风和朋克风暴等标题。

  3. 如果您觉得鼠标已准备好进入您 iX 的纯斯洛伐克语环境,请小心连接它,并向它展示其翻新的家园的每一个角落。

我想补充说明的是,并非所有鼠标都能同样耐受国家环境的变化,因此在购买鼠标时,请务必咨询使其支持斯洛伐克语的可能性。

4.4. 例子

4.4.1. XF86Config-4

X Window System(4.0.1)配置文件的片段,其中包含正在运行的 X 字体服务器、斯洛伐克键盘布局,以及使用 Shift + Ctrl 在美式和斯洛伐克键盘之间切换。
Section "Files"
    RgbPath     "/usr/X11R6/lib/X11/rgb"
    FontPath    "unix/:7100"
    ModulePath  "/usr/X11R6/lib/modules"
EndSection

Section "InputDevice"
    Identifier	"Keyboard1"
    Driver	"Keyboard"
    Option "AutoRepeat" "500 30"
    Option "XkbRules"	"xfree86"
    Option "XkbModel"	"pc104"
    Option "XkbLayout"	"czsk"
    Option "XkbVariant" "us_sk_qwertz"
    Option "XkbOptions" "grp:ctrl_shift_toggle"
EndSection
	

4.4.2. XKB 键盘映射

斯洛伐克语键盘布局的非常简单的描述示例
partial default alphanumeric_keys
xkb_symbols "sk_us" {

    name[Group1] = "Slovak";
    name[Group2] = "US/ASCII";

// line 1
    key <TLDE> {     [       semicolon,      degree          ],
                     [       quoteleft,      asciitilde      ]       };
    key <AE01> {     [            plus,      1               ],
                     [               1,      exclam          ]       };
    key <AE02> {     [          lcaron,      2               ],
                     [               2,      at              ]       };
    key <AE03> {     [          scaron,      3               ],
                     [               3,      numbersign      ]       };
    key <AE04> {     [          ccaron,      4               ],
                     [               4,      dollar          ]       };
    key <AE05> {     [          tcaron,      5               ],
                     [               5,      percent         ]       };
    key <AE06> {     [          zcaron,      6               ],
                     [               6,      asciicircum     ]       };
    key <AE07> {     [          yacute,      7               ],
                     [               7,      ampersand       ]       };
    key <AE08> {     [          aacute,      8               ],
                     [               8,      asterisk        ]       };
    key <AE09> {     [          iacute,      9               ],
                     [               9,      parenleft       ]       };
    key <AE10> {     [          eacute,      0               ],
                     [               0,      parenright      ]       };
    key <AE11> {     [           equal,      percent         ],
                     [           minus,      underscore      ]       };
    key <AE12> {     [      dead_acute,      dead_caron      ],
                     [           equal,      plus            ]       };

// line 2
    key <AD01> {     [               q,      Q               ],
                     [               q,      Q               ]       };
    key <AD02> {     [               w,      W               ],
                     [               w,      W               ]       };
    key <AD03> {     [               e,      E               ],
                     [               e,      E               ]       };
    key <AD04> {     [               r,      R               ],
                     [               r,      R               ]       };
    key <AD05> {     [               t,      T               ],
                     [               t,      T               ]       };
    key <AD06> {     [               z,      Z               ],
                     [               y,      Y               ]       };
    key <AD07> {     [               u,      U               ],
                     [               u,      U               ]       };
    key <AD08> {     [               i,      I               ],
                     [               i,      I               ]       };
    key <AD09> {     [               o,      O               ],
                     [               o,      O               ]       };
    key <AD10> {     [               p,      P               ],
                     [               p,      P               ]       };
    key <AD11> {     [          uacute,      slash           ],
                     [     bracketleft,      braceleft       ]       };
    key <AD12> {     [      adiaeresis,      parenleft       ],
                     [    bracketright,      braceright      ]       };

// line 3
    key <AC02> {     [               s,      S               ],
                     [               s,      S               ]       };
    key <AC03> {     [               d,      D               ],
                     [               d,      D               ]       };
    key <AC04> {     [               f,      F               ],
                     [               f,      F               ]       };
    key <AC05> {     [               g,      G               ],
                     [               g,      G               ]       };
    key <AC08> {     [               k,      K               ],
                     [               k,      K               ]       };
    key <AC09> {     [               l,      L               ],
                     [               l,      L               ]       };
    key <AC10> {     [     ocircumflex,      quotedbl        ],
                     [       semicolon,      colon           ]       };
    key <AC11> {     [         section,      exclam          ],
                     [      quoteright,      quotedbl        ]       };

// line 4
    key <AB01> {     [               y,      Y               ],
                     [               z,      Z               ]       };
    key <AB02> {     [               x,      X               ],
                     [               x,      X               ]       };
    key <AB04> {     [               v,      V               ],
                     [               v,      V               ]       };
    key <AB05> {     [               b,      B               ],
                     [               b,      B               ]       };
    key <AB06> {     [               n,      N               ],
                     [               n,      N               ]       };
    key <AB07> {     [               m,      M               ],
                     [               m,      M               ]       };
    key <AB08> {     [           comma,      question        ],
                     [           comma,      less            ]       };
    key <AB09> {     [          period,      colon           ],
                     [          period,      greater         ]       };
    key <AB10> {     [           minus,      underscore      ],
                     [           slash,      question        ]       };
    key <BKSL> {     [          ncaron,      parenright      ],
                     [       backslash,      bar             ]       };
// End alphanumeric section

// begin modifier mappings
    modifier_map Shift  { Shift_L };
    modifier_map Lock   { Caps_Lock };
    modifier_map Control{ Control_L };
    modifier_map Mod3   { Mode_switch };
};