前面这段闲扯淡,列位看官可以略过,直接奔干货
键盘部分按键失灵怎么办?当然是换了。
当然,如果是普通键盘,换一个无非几十块钱。
但是,如果是笔记本呢?甚至如果是机械键盘呢?前者得上百,后者得上几千了吧。当然,如果您是壕,请随意,当我没说。
比如,如果我一个机械键盘(假装我有)的一个重要的按键坏了,其它键都能用,难道我就要重买一个吗?我买这个时就咬着后槽牙呢好不好!
(重要按键举例:Fn, Ctrl, Home, End, PgUp, PgDn, Delete, Backspace......)
尤其是像我这样“扣门儿”的,我是抱着把牢底坐穿的精神去省钱,坚持以葛朗台老头儿为榜样,争取把他从坟墓里气活过来!
可是,最近我那“老破小”的笔记本几个按键失效了:方向键(尤其是上下键),Home, End。这几个键为什么重要?身为“脚本小子”的我们应该都理解吧。换一个得100多,没舍得。但是,我有“更改键盘映射”大法啊!
--------------------------------------------我是分割线------------------------------------------------
下面上干货。我的环境:
操作系统:Ubuntu18.04LTS
失灵的键:Up, Down, Home, End
我想用以下键代替它们:PgUp, PgDn, Menu, Control_R(右Ctrl键)
- 第一个问题,如果我不知道键盘码(Keycode)是多少怎么办?
键盘映射文件中,这些Keycode一般可以望文生义,实在不行你还可以查看:
#我的办法是:
xev > ~/keycode.txt #我把结果保存到我的家目录下的keycode.txt文件,以利查看
#然后,会弹出来一个对话框,记录你的键盘事件和鼠标事件
# 这时,依次按下:PgUp, PgDn, Menu, Control_R(也就是我想用以替换的键), 然后,关闭测试窗口
- 打开结果文件:keycode.txt, 查看。类似下面这样:
KeyPress event, serial 34, synthetic NO, window 0x4600001,
root 0x517, subw 0x0, time 1758003, (82,107), root:(713,492),
state 0x0, keycode 112 (keysym 0xff55, Prior), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x4600001,
root 0x517, subw 0x0, time 1758114, (82,107), root:(713,492),
state 0x0, keycode 112 (keysym 0xff55, Prior), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
上面,
Prior
就是PgUp
键的动作。
下面,更改键盘映射:
cd /usr/share/X11/symbols/
#先备份一下吧,否则你会很麻烦,别问我是怎么知道的。
sudo cp ./pc ./pc_Your_backup
#为什么加上你自己的用户名:是为了好让你一眼看出来是你自己备份的。
sudo vim ./pc
这个文件像这样:
key { [ BackSpace, BackSpace ] };
key { [ Tab, ISO_Left_Tab ] };
key { [ Return ] };
key { [ Caps_Lock ] };
key { [ Num_Lock ] };
key { [ Shift_L ] };
依次查找并替换的条目(这是我自己的):
原 -- 新
Control_R -- End //把右Ctrl键改为End
Home -- Menu
Menu -- Home //把Menu键改为Home
Prior -- Up //把PgUp键改为Up
End -- Control_R
Next -- Down
Up -- Prior
Down -- Next
- 如果未生效就重启系统。
- 如果我改错了,电脑无法启动了怎么办?
这是我踩过的一个坑
我第一次修改过后,电脑可以启动,但是键盘不能用了。就好像治聋倒治哑了一样!别急,请拿出你的LiveCD,并启动,进入无法启动的系统的目录( /usr/share/X11/symbols/):
sudo cp ./pc_Your_backup ./pc #覆盖掉原来的文件
#ps:
#说一下失败的可能原因:
#可能是因为[ ] { } 各自应该对齐。
现在,重新启动吧。
Cheers!