你可使用两个工具来设定你的键盘. 在纯 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'' 的别名.
你可以在 这里得到更多资讯.