当前位置: 首页>>技术教程>>正文


如何让 Microsoft Natural Ergonomic Keyboard 4000 的缩放滑块(和其他按钮)工作?

问题描述

我在 Ubuntu 10.10 上使用 Microsoft Natural Ergonomic Keyboard 4000。多媒体键(音量、播放/暂停)、邮件和计算器按钮也有效。

现在我很想使用缩放滑块,如果可能的话,我想使用页面滚动。有什么方法可以实现吗?

最佳办法

使用以下内容创建文件 /etc/udev/rules.d/98-ms-ergo.rules

ACTION=="remove", GOTO="keyboard_end"
KERNEL!="event*", GOTO="keyboard_end"
ENV{ID_INPUT_KEY}=="", GOTO="keyboard_end"
SUBSYSTEMS!="usb", GOTO="keyboard_end"

SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id"

ENV{ID_VENDOR}=="Microsoft", ENV{ID_MODEL_ID}=="00db", RUN+="keymap $name 0xc022d pageup 0xc022e pagedown"

GOTO="keyboard_end"

这会将缩放键映射到 page-up/page-down 而不会更改 /lib/udev 中已安装的文件。

添加后,您只需拔下并重新插入键盘即可开始工作。

次佳办法

在 Xubuntu 13.10 上(也许在 Ubuntu 13.10 上也是如此)可以按如下方式执行相同的操作:

编辑 /lib/udev/hwdb.d/60-keyboard.hwdb 中的键映射:

###########################################################
# Microsoft
###########################################################

# Microsoft Natural Ergonomic Keyboard 4000
keyboard:usb:v045Ep00DB*
 KEYBOARD_KEY_c022d=pageup
 KEYBOARD_KEY_c022e=pagedown

运行 sudo udevadm hwdb --update

重启。

第三种办法

为了配置 Microsoft 人体工学键盘 4000,我们必须创建一个配置文件,其中包含键盘声明和映射键的记录。

为此,我们需要确定三种类型的信息:

  • 键盘类型

  • scancode 是键盘上的实际键

  • name 将所需功能分配给所选键

首先找到键盘类型:

在终端中运行以下命令:

lsusb 

输出确定键盘类型:

...
Bus 004 Device 022: ID 045e:00db Microsoft Corp. Natural Ergonomic Keyboard 4000 V1.0
...    

它出现在 ID 之后。在这种情况下,它是 045e:00db

其次找到扫描码和密钥的名称。

为了确定它们,我们使用 evtest 程序在终端上注销特定设备的事件信息:

evtest

如果您没有该程序,请运行以下命令来安装它:

sudo apt-get install evtest

通过运行 evtest 程序,我们得到以下输出:

No device specified, trying to scan all of /dev/input/event* Available devices: 
/dev/input/event0:    Power Button     
/dev/input/event1:    Power Button     
/dev/input/event2:    PixArt USB Optical Mouse   
/dev/input/event3:    Microsoft Natural® Ergonomic Keyboard 4000   
/dev/input/event4:    Microsoft Natural® Ergonomic Keyboard 4000   
/dev/input/event5:    HDA Intel Front Headphone     
/dev/input/event6:    HDA Intel Line Out     
/dev/input/event7:    HDA Intel Line   
/dev/input/event8:    HDA Intel Rear Mic     
/dev/input/event9:    HDA Intel Front Mic     
/dev/input/event10:   HDA ATI HDMI HDMI/DP,pcm=3
Select the device event number [0-10]:

输出几乎是不言自明的,为键盘插入适当的数字,这里是数字 3 然后回车:

这样做会在终端上输出大量信息,并以以下几行结尾:

... 

Testing ... (interrupt to exit)
Event: time 1472203902.240594, type 17 (EV_LED), code 0 (LED_NUML), value 0
Event: time 1472203902.240594, -------------- SYN_REPORT ------------
Event: time 1472203902.281456, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70058
Event: time 1472203902.281456, type 1 (EV_KEY), code 96 (KEY_KPENTER), value 0
Event: time 1472203902.281456, -------------- SYN_REPORT ------------

现在,键盘上的每个 key-press 都会转储出关键信息。例如,右 Shift 旁边的斜杠键显示:

Event: time 1472205062.294078, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70038
Event: time 1472205062.294078, type 1 (EV_KEY), code 12 (KEY_SLASH), value 0
Event: time 1472205062.294078, -------------- SYN_REPORT ------------

日志的第一行包含有关键盘上实际键的信息,例如值之后的 scancode。在这种情况下,它是 70038

第二行包含分配的功能信息,例如键名。在这种情况下,它是 SLASH。检查其他键以找到它们的适当名称。

简而言之:

  • 我们的键盘类型是:045e:00db

  • Slash 键的扫描码是:70038

  • 分配的键名是 SLASH

收集必要信息后,我们创建配置文件:

sudoedit /etc/udev/hwdb.d/61-keyboard-local.hwdb

点击 i 激活插入模式并输入以下内容:

keyboard:usb:v045Ep00DB*
 KEYBOARD_KEY_70038=minus      

escape 保存并退出,然后键入 :wq 并回车。

然后运行以下两条命令使配置生效:

sudo udevadm hwdb --update
sudo udevadm control --reload

最后拔下键盘并将 re-plug 插入。

关于配置文件的一些注意事项:

  • 文件的格式应该完全如图所示,映射记录前的空间很关键。

  • 您可以使用任何其他文本编辑器代替 sudoedit,只要记住按照上面解释的文件的确切格式。

  • 键盘类型中添加了两个字符:vp,分别代表供应商和产品。它们也很重要。

  • 键盘类型在配置文件中是大写的。我们的键盘类型是 045e:00db 但在配置中我们插入 v045Ep00DB*

  • 密钥的扫描码紧跟在 KEYBOARD_KEY_ 之后

  • 键名在配置文件中以小写形式出现

  • 按照本教程,您几乎可以自定义键盘上的每个键。

第四种办法

problemevdev driver ignores keycodes > 255 。解决方案,感谢 Marco Chiappero

1) you have to define all the remappings that you need (in the form of 
"scancode keycode" list) and place them in a file under "/lib/udev/keymaps/" 
(for example I created logitech-lx710-cordless there). You can find the 
scancodes using evtest ("sudo evtest /dev/input/eventX", where X is your 
keyboard device. Be careful, sometimes these extra keys are exposed through 
a different device or your mouse interface: eg. event3 --> kbd, event4 --> 
mouse & extra keys). Here some sample output:

Event: time 1294153475.909379, type 4 (Misc), code 4 (ScanCode), value c1028
"c1028" is the scancode value you're going to place in your keymap file, then 
pick up a number from input.h as described earlier and convert it to 
hexadecimal. Then write the remap pair in your file, maybe with a descriptive 
comment, like this:

0xC1028 0x9a # rotate button

Iterate for every key > 255.

2) you have to tell udev to apply this remapping file everytime it encounters 
your keyboard, so edit the "/lib/udev/rules.d/95-keymap.rules" file adding 
the udev rule that matches your HW. Please don't ask me to define a rule for 
you. 
NOTE: you can immediately apply your keymap file by yourself typing 
"sudo /lib/udev/keymap /dev/input/eventX /lib/udev/keymaps/$YOUR_FILE" and 
verify it with evtest once again.

Now, you can use the Gnome shortcuts editor to see that the keys are now 
usable inside X and create new shortcuts. However it might happen that no 
keysym is assigned to that keycode (so you'll see 0xXY instead of XF86Foo). 
You can see current mappings through xmodmap -pke, save the output into a 
file and edit it if you need (a full keysym code list is available in
"/usr/lib/X11/XKeysymDB").
Once you added the keysyms to those keys you remapped, you can save this file
as ~/.Xmodmap (or as /etc/X11/Xmodmap if you wish to apply to every user).

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12497.html,未经允许,请勿转载。