Next Previous Contents

5. XFree

5.1 简介

几年前, “xmodmap” 用于更改 XFree 下的键盘表,这是一个通常名为 /usr/X11/lib/X11/xinit/.Xmodmap 的配置文件,通过您的 .xinitrc/etc/X11/xinit/xinitrc 得到支持

为了转换正确的控制台表,我们使用 “mk_modmap”,它与 kbd 存档一起提供,通常安装在 /usr/lib/kbd/keytables 中

希望自定义其 xmodmap 表的用户使用 “xkeycaps” 程序。

然后 XFree 2.1 及更高版本识别了由 “loadkeys” 管理的键盘布局,理论上 xmodmap 变得不必要了。

但是 XFree 3.1 提供的 “COMPOSE” 键管理有点令人失望,从 “loadkeys” 继承的表几乎没有用处。

因此,有必要继续使用 xmodmap,这是标准的实用程序软件,允许强制 X 服务器将鼠标/键盘事件与字符关联。

在 XFree 3.2 及更高版本下,“xkb” 使 xmodmap 彻底过时。

但是,关于即将到来的 XFree 版本将不再支持死键的传言得到了证实!!!

在 X 联盟的 X11 发行版中,也就是直接来源于它的 XFree86 中,不再存在通用的死键管理机制,或者近似的解决方案,这些方案迫使人们也删除 xkb 或修改程序库!

5.2 不良编程

每个程序都应该很好地管理死键,而不是信任 X 来完成这项任务。

实际上,管理死键并不复杂,只需在 Motif 程序中使用正确的函数 XmbLookupString(),而不是 XLookupString()。

5.3 实践中的键盘

多么复杂的故事!

因此,它们仅对 “国际化” 的 X 客户端有效,也就是说,这些客户端自行管理与不同国家语言的数据输入方法相关的问题。

当人们想要输入包含重音字母的文本,而使用的客户端没有国际化时,这非常令人困扰!

a) 使用 xmodmap 的解决方案

输入

        cp fr-latin9.xmod /usr/X11R6/lib/X11/xinit/Xmodmap
        cp fr-latin9.xmod ~/.Xmodmap

b) 使用 xkb 的解决方案(推荐)

输入

        cp fr-latin9 /usr/X11R6/lib/X11/xkb/symbols

然后编辑您的 XF86Config,以便在 “Keyboard” 部分中添加相应的 xkb 行

Section "Keyboard"
Protocol        "Standard"
AutoRepeat      500 30
LeftAlt         Meta
RightAlt        ModeShift               # Important pour Alt-gr, mais dans les
                                        # versions récentes de XFree, AltGr et
                                        # RightAlt sont synonymes.

ScrollLock      Compose                 # Pour faire des caractères spéciaux.
                                        # Utiliser sinon une des 3 touches des
                                        # nouveaux claviers 105 touches...

RightCtl        Control                 # Garder la touche normale

XkbKeycodes     "xfree86"
XkbRules        "xfree86"
XkbTypes        "default"
XkbCompat       "default"
XkbSymbols      "fr-latin9(pc105)"
XkbGeometry     "pc(pc105)"
XkbModel        "pc105"

EndSection

对于这个 Xkb 部分,有些人更喜欢

        XkbKeymap       "xfree86(fr-latin9)"
        XkbKeycodes     "xfree86"
        XkbSymbols      "en_US(pc101)+fr-latin9"
        XkbGeometry     "pc(pc101)"

当然,根据您的键盘,将 “fr” 替换为 “cn”、“be”、“ch” 或 “usx”……

c) 组合键解决方案

获得 8 位字符的另一种方法

/usr/X11R6/lib/X11/locale/iso8859-1/Compose 中,可以找到两个字符和一个结果之间的 “对应” 表;这两个字符在按下组合键时被 “混合”:例如;

        COMPOSE suivi de � e � puis � ^ �

很有可能给您 ê,包括相反的顺序(“^” 然后 “e”)

但是要使用组合键,您必须将其分配给一个键!

建议的参数设置在 XF86Config 中,使其对应于在 X 下无用的 “滚动锁定” 键,通过命令

        ScrollLock       Compose

在 Keyboard 部分中。

注意,在 Linux 控制台模式下,此键很有用(用于临时阻止虚拟控制台),而 “打印屏幕” 或 “Print Screen” 键没有任何用处,因此被分配给 “Compose”。

d) 修改 libX11 的解决方案

Thomas Quinot <Thomas.Quinot(à)cuivre.fdn.fr> 因此向您提供了他修改后的 libX11,它以对所有客户端透明的方式管理死键。

它还允许将未知的组合序列视为字符对来处理,例如

        ~ + / = ~/

要使用它

e) 这有必要吗?

就我个人而言,我建议您不要修改 libX11,忘记 xmodmap 和 xkb + latin9 文件的替代方案,等待 X 联盟对死键政策的另一次更改(或者将国际化选项添加到您的程序的源代码中。)

目前,如果您没有 /usr/X11R6/lib/X11/xkb/symbols/ 目录,则表示您没有使用 xkb:因此请获取更新版本的 X window!

如果没有 xkb,XFree 将默认回退到您为 Linux 使用 loadkeys 的键盘配置。

但是,转换并不完美,我建议您最好避免使用此选项,以及旧的键盘管理器 Xmodmap

也可能在没有任何 xkb 命令的情况下,XFree 会将您视为 7 位键盘的用户!

因此,应该使用适合 xkb 的表。

5.4 “latin9” 还是 “latin1”?

我建议您选择我维护更新的 latin9 表,它比 latin1 版本更新,允许使用多种改进,这些改进在 linux-console 下的键盘部分中详细介绍,以便尽可能舒适并更适用,因为它们由法语使用者维护。

它们受益的众多改进弥补了许多程序的缺陷。

例如,某些 Motif 程序(如 Netscape (tm))还不知道如何管理死键……因此无法在比利时和法国键盘上键入 ê 或 î,因为死键 “抑音符” 是获得这些字符的唯一方法!

“fr-latin9” 通过提供替代解决方案来解决此问题:AltGr (元音) 允许获得带有抑音符的元音,AltGr+Shift (元音) 允许获得带有分音符的元音!

5.5 对应表

例如

此技巧也适用于 cedilla c

因此,即使在最坏的情况下,如果没有死键起作用,我们仍然可以访问所有带重音的元音,大写和小写!

您还将在其中找到法式引号(“« »”),物理学中使用的符号(ß、å、delta、phi …)、货币符号(日元、美分)或版权符号(tm、©)以及其他语言的字母(Ø、Æ …)。

所有这些符号都可以通过 AltGr (字母) 获得,例如 AltGr (b) 给出 ß,AltGr (r) 给出 tm,AltGr (y) 给出日元……

为了简单地记住这一切,例如输入

        more /usr/lib/kbd/keytables/i386/azerty/fr-latin9.map

至于 latin1 和 latin9 之间的选择……由您决定!

一个建议:如果您有时间,请尝试一个,然后再尝试另一个。

5.6 X 下的 ISO 8859-15 latin 9 字体

拥有与 latin 9 兼容的键盘表很好,但是如果没有合适的字体,您将永远看不到此标准中添加的字符。

因此,有必要使用转换实用程序 “bdftopcf”,它在某种程度上允许编译提供的字符字体。

将自己放置在您检索到的存档的目录中,然后在 root 下,例如为 Xlat9-10x20.bdf 或另一个 bdf 输入

        bdftopcf Xlat9-10x20.bdf > Xlat9-10x20-lat9.pcf
        gzip Xlat9-10x20-lat9.pcf
        mv Xlat9-10x20-lat9.pcf.gz /usr/X11R6/lib/X11/fonts/misc
        mkfontdir /usr/X11R6/lib/X11/fonts/misc

这会创建一个文件 “Xlat9-10x20-lat9.pcf”,必须使用 gzip 对其进行压缩,然后我们获得文件 “Xlat9-10x20-lat9.pcf.gz”,该文件必须放置在适当的目录中,为此,字符字体的索引将被更新。

然后,将 latin9 组合表添加到 X 的默认组合中,特定于 iso 8859-1

        cat XCompose-lat9 >> /usr/X11R6/lib/X11/locale/iso8859-1/Compose

我们对 ISO 8859-1 执行 cat 操作,因为 X 无法识别 ISO 8859-15 latin9。

从那里,重新启动 X 或在其普通用户帐户下输入

        xset +fp /usr/X11R6/lib/X11/fonts/misc

如果您使用 xmodmap,请启动

        xmodmap ~/.Xmodmap

要选择 latin9 字体,请启动 xfontsel 并查找 iso8859-15 编码。

或更简单地说,输入

        grep Xlat9-10x20.pcf /usr/X11R6/lib/X11/fonts/misc/*

然后将第二个参数用作字体名称,例如使用 rxvt、xiterm、aterm 或 wterm

        aterm -fn -misc-fixed-medium-r-normal--20-200-75-75-c-100-iso8859-15

这将启动一个使用 latin9 字体之一的 X 终端。


Next Previous Contents