一台supermicro的主板,带IPMI口,重新编译了一次内核后,竟然发现外置的USB键盘无法使用了,通电指示正常,但是按任何键都没有反应。
在启动时会提示检测到一个usb的键盘和一个usb的鼠标,即使什么不插的时候也会这么显示。再插入USB键盘的时候,会把键盘认成kbd1,而在/dev目录下,会发现多达四个键盘:
# ls /dev/kbd*
/dev/kbd0 /dev/kbd1 /dev/kbd2 /dev/kbd3
找了很长时间,终于发出一原因,因为在kernel配置文件中,习惯性地把kbdmux给禁用了:
device kbdmux # keyboard multiplexer
启用后重新编译内核,就发现外置的USB键盘可以使用了。
另外提示一下:键盘不能用怎么编译内核?如果网络通的话,可以走网络;网络不通还可以用老内核,就是开机出现选单的时候按一次5,就会切换到kernel.old,回车就行了;如果一不小心把old内核也给覆盖了,那就用启动U盘进入live模式,把默认的GENRIC内核复制到硬盘上吧。
那么这个kbdmux是干嘛的呢?看字面意思,就是一个键盘分配器,man里面说它相当于一个“键盘交换机”,一个kbdmux设备相当于一个超级的键盘,每个“分”键盘都连接到这台超级键盘上面,这些“分”键盘所有的输入,都会输入到这个超级键盘上,再由这个超级键盘统一发送到内核中去。所以这些“分”键盘有着共享着相同的状态,比如大写键之类的。
手册上还说可以通过kbdcontrol来确定哪些使用键盘,但是我测试了一下,都提示“设备正忙”,以后再找原因吧。