更改键盘映射
我的Thinkpad X20E的回车键坏掉了,但是手头很紧,不想换键盘,而且也不常用,干脆就把回车键映射到其它的键上吧。
考虑了一番,大写键(CapsLock)就是这次的牺牲品了。
当然,目前这台计算机运行的(还)是DragonFlyBSD 4.2。
下面要开始实施计划。当然,你还需要一个外接的键盘。
由于控制台(console)界面下和X(图形界面)下键映射的负责程序不同,需要分别来做。
1. 命令行下
根据网络搜索结果和命令手册,命令行下键的映射由kbdcontrol程序来控制。
首先,导出目前键盘映射表到一个文件(需要在控制台界面下操作,SSH不行(?)):
kbdcontrol -d > /root/no_enter.map
然后编辑此文件。我的键盘映射表中,大写键编码为058 (找文件的2-8列中clock对应的编码)。
然后将058那一行的第二列的clock改为cr(Carriage Return)。参看下面我修改过的文件。
第一个带有#的058的行是kbdcontrol命令导出的数据,被我注释掉了。
[acheng@violet ~]$ cat /root/no_enter.map # alt # scan cntrl alt alt cntrl lock # code base shift cntrl shift alt shift cntrl shift state # ------------------------------------------------------------------ 000 nop nop nop nop nop nop nop nop O 001 esc esc esc esc esc esc debug panic O 002 '1' '!' nop nop '1' '!' nop nop O 003 '2' '@' nul nul '2' '@' nul nul O 004 '3' '#' nop nop '3' '#' nop nop O 005 '4' '$' nop nop '4' '$' nop nop O 006 '5' '%' nop nop '5' '%' nop nop O 007 '6' '^' rs rs '6' '^' rs rs O 008 '7' '&' nop nop '7' '&' nop nop O 009 '8' '*' nop nop '8' '*' nop nop O 010 '9' '(' nop nop '9' '(' nop nop O 011 '0' ')' nop nop '0' ')' nop nop O 012 '-' '_' us us '-' '_' us us O 013 '=' '+' nop nop '=' '+' nop nop O 014 bs bs del del bs bs del del O 015 ht btab nop nop ht btab nop nop O 016 'q' 'Q' dc1 dc1 'q' 'Q' dc1 dc1 C 017 'w' 'W' etb etb 'w' 'W' etb etb C 018 'e' 'E' enq enq 'e' 'E' enq enq C 019 'r' 'R' dc2 dc2 'r' 'R' dc2 dc2 C 020 't' 'T' dc4 dc4 't' 'T' dc4 dc4 C 021 'y' 'Y' em em 'y' 'Y' em em C 022 'u' 'U' nak nak 'u' 'U' nak nak C 023 'i' 'I' ht ht 'i' 'I' ht ht C 024 'o' 'O' si si 'o' 'O' si si C 025 'p' 'P' dle dle 'p' 'P' dle dle C 026 '[' '{' esc esc '[' '{' esc esc O 027 ']' '}' gs gs ']' '}' gs gs O 028 cr cr nl nl cr cr nl nl O 029 lctrl lctrl lctrl lctrl lctrl lctrl lctrl lctrl O 030 'a' 'A' soh soh 'a' 'A' soh soh C 031 's' 'S' dc3 dc3 's' 'S' dc3 dc3 C 032 'd' 'D' eot eot 'd' 'D' eot eot C 033 'f' 'F' ack ack 'f' 'F' ack ack C 034 'g' 'G' bel bel 'g' 'G' bel bel C 035 'h' 'H' bs bs 'h' 'H' bs bs C 036 'j' 'J' nl nl 'j' 'J' nl nl C 037 'k' 'K' vt vt 'k' 'K' vt vt C 038 'l' 'L' ff ff 'l' 'L' ff ff C 039 ';' ':' nop nop ';' ':' nop nop O 040 ''' '"' nop nop ''' '"' nop nop O 041 '`' '~' nop nop '`' '~' nop nop O 042 lshift lshift lshift lshift lshift lshift lshift lshift O 043 '\' '|' fs fs '\' '|' fs fs O 044 'z' 'Z' sub sub 'z' 'Z' sub sub C 045 'x' 'X' can can 'x' 'X' can can C 046 'c' 'C' etx etx 'c' 'C' etx etx C 047 'v' 'V' syn syn 'v' 'V' syn syn C 048 'b' 'B' stx stx 'b' 'B' stx stx C 049 'n' 'N' so so 'n' 'N' so so C 050 'm' 'M' cr cr 'm' 'M' cr cr C 051 ',' '<' nop nop ',' '<' nop nop O 052 '.' '>' nop nop '.' '>' nop nop O 053 '/' '?' nop nop '/' '?' nop nop O 054 rshift rshift rshift rshift rshift rshift rshift rshift O 055 '*' '*' '*' '*' '*' '*' '*' '*' O 056 lalt lalt lalt lalt lalt lalt lalt lalt O 057 ' ' ' ' nul ' ' ' ' ' ' susp ' ' O #058 clock clock clock clock clock clock clock clock O 058 cr clock clock clock clock clock clock clock O 059 fkey01 fkey13 fkey25 fkey37 scr01 scr11 scr01 scr11 O 060 fkey02 fkey14 fkey26 fkey38 scr02 scr12 scr02 scr12 O 061 fkey03 fkey15 fkey27 fkey39 scr03 scr13 scr03 scr13 O 062 fkey04 fkey16 fkey28 fkey40 scr04 scr14 scr04 scr14 O 063 fkey05 fkey17 fkey29 fkey41 scr05 scr15 scr05 scr15 O 064 fkey06 fkey18 fkey30 fkey42 scr06 scr16 scr06 scr16 O 065 fkey07 fkey19 fkey31 fkey43 scr07 scr07 scr07 scr07 O 066 fkey08 fkey20 fkey32 fkey44 scr08 scr08 scr08 scr08 O 067 fkey09 fkey21 fkey33 fkey45 scr09 scr09 scr09 scr09 O 068 fkey10 fkey22 fkey34 fkey46 scr10 scr10 scr10 scr10 O 069 nlock nlock nlock nlock nlock nlock nlock nlock O 070 slock slock slock slock slock slock slock slock O 071 fkey49 '7' '7' '7' '7' '7' '7' '7' N 072 fkey50 '8' '8' '8' '8' '8' '8' '8' N 073 fkey51 '9' '9' '9' '9' '9' '9' '9' N 074 fkey52 '-' '-' '-' '-' '-' '-' '-' N 075 fkey53 '4' '4' '4' '4' '4' '4' '4' N 076 fkey54 '5' '5' '5' '5' '5' '5' '5' N 077 fkey55 '6' '6' '6' '6' '6' '6' '6' N 078 fkey56 '+' '+' '+' '+' '+' '+' '+' N 079 fkey57 '1' '1' '1' '1' '1' '1' '1' N 080 fkey58 '2' '2' '2' '2' '2' '2' '2' N 081 fkey59 '3' '3' '3' '3' '3' '3' '3' N 082 fkey60 '0' '0' '0' '0' '0' '0' '0' N 083 del '.' '.' '.' '.' '.' boot boot N 084 nop nop nop nop nop nop nop nop O 085 nop nop nop nop nop nop nop nop O 086 nop nop nop nop nop nop nop nop O 087 fkey11 fkey23 fkey35 fkey47 scr11 scr11 scr11 scr11 O 088 fkey12 fkey24 fkey36 fkey48 scr12 scr12 scr12 scr12 O 089 cr cr nl nl cr cr nl nl O 090 rctrl rctrl rctrl rctrl rctrl rctrl rctrl rctrl O 091 '/' '/' '/' '/' '/' '/' '/' '/' N 092 nscr nscr debug debug nop nop nop nop O 093 ralt ralt ralt ralt ralt ralt ralt ralt O 094 fkey49 fkey49 fkey49 fkey49 fkey49 fkey49 fkey49 fkey49 O 095 fkey50 fkey50 fkey50 fkey50 fkey50 fkey50 fkey50 fkey50 O 096 fkey51 fkey51 fkey51 fkey51 fkey51 fkey51 fkey51 fkey51 O 097 fkey53 fkey53 fkey53 fkey53 fkey53 fkey53 fkey53 fkey53 O 098 fkey55 fkey55 fkey55 fkey55 fkey55 fkey55 fkey55 fkey55 O 099 fkey57 fkey57 fkey57 fkey57 fkey57 fkey57 fkey57 fkey57 O 100 fkey58 fkey58 fkey58 fkey58 fkey58 fkey58 fkey58 fkey58 O 101 fkey59 fkey59 fkey59 fkey59 fkey59 fkey59 fkey59 fkey59 O 102 fkey60 fkey60 fkey60 fkey60 fkey60 fkey60 fkey60 fkey60 O 103 fkey61 fkey61 fkey61 fkey61 fkey61 fkey61 boot fkey61 O 104 slock saver slock saver susp nop susp nop O 105 fkey62 fkey62 fkey62 fkey62 fkey62 fkey62 fkey62 fkey62 O 106 fkey63 fkey63 fkey63 fkey63 fkey63 fkey63 fkey63 fkey63 O 107 fkey64 fkey64 fkey64 fkey64 fkey64 fkey64 fkey64 fkey64 O 108 nop nop nop nop nop nop nop nop O dgra '`' ( 'a' 224 ) ( 'A' 192 ) ( 'e' 232 ) ( 'E' 200 ) ( 'i' 236 ) ( 'I' 204 ) ( 'o' 242 ) ( 'O' 210 ) ( 'u' 249 ) ( 'U' 217 ) dacu 180 ( 'a' 225 ) ( 'A' 193 ) ( 'e' 233 ) ( 'E' 201 ) ( 'i' 237 ) ( 'I' 205 ) ( 'o' 243 ) ( 'O' 211 ) ( 'u' 250 ) ( 'U' 218 ) ( 'y' 253 ) ( 'Y' 221 ) dcir '^' ( 'a' 226 ) ( 'A' 194 ) ( 'e' 234 ) ( 'E' 202 ) ( 'i' 238 ) ( 'I' 206 ) ( 'o' 244 ) ( 'O' 212 ) ( 'u' 251 ) ( 'U' 219 ) dtil '~' ( 'a' 227 ) ( 'A' 195 ) ( 'n' 241 ) ( 'N' 209 ) ( 'o' 245 ) ( 'O' 213 ) duml 168 ( 'a' 228 ) ( 'A' 196 ) ( 'e' 235 ) ( 'E' 203 ) ( 'i' 239 ) ( 'I' 207 ) ( 'o' 246 ) ( 'O' 214 ) ( 'u' 252 ) ( 'U' 220 ) ( 'y' 255 ) drin 176 ( 'a' 229 ) ( 'A' 197 ) dced 184 ( 'c' 231 ) ( 'C' 199 )
有了这个文件之后,可以用kbdcontrol命令重新导入:
kbdcontrol -l /root/no_enter.map
现在可以试试大写键是否可以当回车来用了。
由于我需要开机后登录前就需要新的映射生效,因此在/etc/rc.conf文件中加入下面一行:
keymap=”/root/no_enter.map”
这样以后开机新映射就自动生效了。
2. X环境下的修改
X环境下键的映射可由xmodmap命令完成。可以将下面一行加入到自己的.profile文件中:
## to fix the broken Enter key :-( [[ -n $DISPLAY ]] && (xmodmap -e "remove Lock = Caps_Lock";xmodmap -e "keycode 66 = Return")
其中的”keycode 66″就是原来的大写键的代码。如果你不确定这个代码的话,可以运行xev命令来查看。
此命令对xterm有效(没测试过其它X下的程序)。