你可使用两个工具来设定你的键盘. 在纯 Linux 环境下, 你可以用loadkeys
, 而在 X11 下则用 xmodmap
.
欲使用 loadkeys
指令, 你可以执行:
loadkeys /usr/lib/kbd/keytables/dk.map或
loadkeys /usr/lib/kbd/keytables/dk-latin1.map
这两个键盘对应表 (keymap) 的差异在于, dk-latin1.map
可以使用死键, 而 dk.map
不行.
死键在
死键和重音字元 中会解释到.
loadkeys
和 keymap 都是 Linux 里通行的 kbd-0.??.tar.gz
( ?? 代表不同版本) 包裹中的一部份.
loadkeys
通常是在系统启动时, 从 /etc/rc.d/
目录下的某一个命令稿 (script) 执行的.
不同的系统和版本作法各不相同.
(注, 给非丹麦语读者: 其他语系的支持也是以类似方法设定的, 例如西班牙语键盘是用 es.map
.)
XFree86 从 3.1.2 以上的版本 (包括3.1.2) 通常都使用纯 Linux 环境下的 keymap, 但在 X11 下你可以用 xmodmap
来改变键盘设定.
如果在你的 home 目录下有一个叫 .Xmodmap
的文档, X11 就会在启动时自动替你执行这个指令.
若使用版本 3.2 以上的 XFree86, 在你的 /etc/XF86Config
(或 /etc/X11/XF86Config
) 文档中, 应有一个Keyboard
区块如下列
( 如果选择使用丹麦语的 keytable, 一个叫 XF86Setup
的程序应该会自动替你做好这件事) :
Section "Keyboard" Protocol "Standard" XkbRules "xfree86" XkbModel "pc101" XkbLayout "dk" XkbVariant "nodeadkeys" EndSection
目前只有"nodeadkeys"
是可用的键盘变数, 但你仍可以设定死键.
请参见
死键和重音字元 以得到更多信息.
若使用版本 3.1.2 以上的 XFree86 (包括 3.1.2), 你应该修改文档 /etc/XF86Config
(或 /etc/X11/XF86Config
) 并确定以下这行
RightAlt ModeShift
出现在 Keyboard
区块中.
通常, 你只需要在适当的地方移去注解符号即可.
在版本 3.1.2 的 XFree86 中, 你可用 AltGr
作为 RightAlt
的别键.
如果你有选择丹麦语的键盘支持, AltGr
键在版本 3.2 以上的 XFree86 应会如预期地发挥作用.
在 Metro-X 伺服器下, 你将无法输入 ``{'' (<AltGr><7>)
,
``['' (<AltGr><8>)
, ``]''
(<AltGr><9>)
和 ``}'' (<AltGr><0>)
等字元.
这个 bug 会在 3.1.5 和 3.1.8 的伺服器版本中出现.
要修正这个 bug, 你必须修改档名叫作 /usr/X11R6/lib/X11/xkb/symbols/dk
的文档并把以下句子:
key <AE07> { [ 7, slash ] }; key <AE08> { [ 8, parenleft ] }; key <AE09> { [ 9, parenright ] }; key <AE10> { [ 0, equal ] };改成
key <AE07> { [ 7, slash ], [ braceleft, NoSymbol ] }; key <AE08> { [ 8, parenleft ], [ bracketleft, NoSymbol ] }; key <AE09> { [ 9, parenright ], [ bracketright, NoSymbol ] }; key <AE10> { [ 0, equal ], [ braceright, NoSymbol ] };
所谓死键, 就是在按下之后, 还必须再按其他键才能够作用的键.
你如果是在纯 Linux 环境下使用 dk-latin1.map
keymap, 那颚化符号 (tilde, 译注: 例如西班牙语字母上的~) 和变音 (umlaut, 译注: 字母上加两点) 都是死键.
另外, 在微软视窗作业系统下, 键盘预设也是如此.
loadkeys dk.map
/etc/XF86Config
(或 /etc/X11/XF86Config
) 中, 在 Keyboard
区块中加入句子:
XkbVariant "nodeadkeys"
loadkeys dk-latin1.map
GNU emacs
v. 19.30 (或更高的版本) 是一个例子.
然而, 某些 X11 应用程序依然不支持这种输入法.
面对这个问题, 你可以选择修改你的程序, 或是寄一封修辞温和的 bug 报告给程序作者.
后者是比较有效的解决之道.
请参见
在 X11下编写程序的一些小技巧 以获得相关信息.
接下来, 你需要将一个键对应到 Multi_key
(Compose
.)
若你使用版本 3.1.2 的 XFree86, Scroll Lock
键很可能已经被对应了(你可以用 xev
这个程序修改设定).
如果要对应右边的 Control
键,
你只需要在 XFree86 的 configuration file (通常是 /etc/XF86Config
或 /etc/X11/XF86Config
) 中的 Keyboard
区块里去掉若干注解符号即可.
若你想使用其他的键, 或者你是用版本 3.1.2 以上的 XFree86 而且你想改变预设, 你可以在文档 ~/.Xmodmap
中加入:
keycode 78 = Multi_key上面这一行范例做的是定义
Scroll Lock
键为 Compose
键.
在版本 3.2 以上的 XFree86 中, 预设的 Compose
键是 <Shift><AltGr>
.
版本 3.2 以上的 XFree86 并不支持在标准丹麦键盘使用死键.
要启动死键, 在文档 /usr/X11R6/lib/X11/xkb/symbols/dk
的 xkb_symbols "basic"
区块中修改这几行:
key <AE12> { [ acute, grave ], [ bar, dead_ogonek ] }; key <AD12> { [ diaeresis, asciicircum ], [ asciitilde, dead_macron ] };把它改成
key <AE12> { [ dead_acute, dead_grave ], [ bar, dead_ogonek ] }; key <AD12> { [ dead_diaeresis, dead_circumflex ], [ dead_tilde, dead_macron ] };接下来, 移除文档
/etc/XF86Config
(或 /etc/X11/XF86Config
) 中 Keyboard
区块里的这一行:
XkbVariant "nodeadkeys"(注, 给非丹麦语读者: 在
/usr/X11R6/lib/X11/xkb/symbols
中有各种语系 keymap 的文档.)
可能的字元对应表列于文档 /usr/X11R6/lib/X11/locale/iso8859-1/Compose
中.
这个文档里有一些你或许会想修正的 bug:
<dead_tilde> <space> : "~" tilde应被改为
<dead_tilde> <space> : "~" asciitilde
asciicircum
被误拼为 asciicirum
丹麦 keymap 中有个 bug 会使钱符号的对应键组合为 <Shift><4>
, 而不是 <AltGr><4>
.
若你有这个问题, 请查看你在启动系统时载入的是哪个 keymap.
这项设定位于 /etc/rc.d/
目录下, 或者你也可以在启动系统时注意一下.
在我的电脑上, 我的 keymap 是叫 /usr/lib/kbd/keytables/dk-latin1.map
.
你可以改 keymap 文档中的
keycode 5 = four dollar dollar这一行改成
keycode 5 = four currency dollar然后如 载入 keytable 所述, (重新)载入 keytable.
货币符号 (dansk: ``soltegn'') 在丹麦键盘上的预设是 <Shift><4>
.
以上的方法在 X11 和 Linux 环境下应该都能通行.
在某些比较旧的系统里, ``ø'' and ``Ø'' 以分 (cent) 或圆 (yen)的形态出现. 在你的 keymap 文档中, 可以找到 keycode 40 的这一行句子:
keycode 40 = cent yen你可以把它改为
keycode 40 = +oslash +Ooblique
此 bug 已在 kbd-0.88.tar.gz
以上的版本中修正.
为了让 Caps Lock
正常运作, 那个 + 符号是必要的.
在 kbd-0.90.tar.gz
或更新的版本中, ``Oslash'' 常用来当作 ``Ooblique'' 的别名.
你可以在 这里得到更多信息.