我想要完成的短版本:我有一个脚踏板(INFINITY-IN-USB-1,如果有兴趣),它是作为通用HID设备实现的,我希望它在linux上表现为控件和alt键。我正在寻找X级别的东西,即不仅仅是单个程序。
更长的版本:我通过调用dll RegisterRawInputDevices和GetRawInputData并在隐藏的窗口中监听输入,在Windows XP中使用此设置。所有这些都是通过一个相当简单的Autohotkey脚本完成的(如果有人有兴趣可以发布在这里)。关键是,不需要任何额外的驱动程序等;只需要本机Windows dll。
我希望这个设置适用于linux(更具体地说是Ubuntu下的Gnome,但我偶尔也会使用其他发行版/窗口管理器,因此感谢X级别的解决方案)。这个脚踏板不会将自己注册为键盘甚至操纵杆,而是作为具有UsagePage 12,用法3的HID设备。我注意到最新的Ubuntu可以检测并使用Microsoft Natural Keyboard上的收藏夹键,它也可以注册为HID设备*。我使用与使用脚踏板相同的方法在Windows上使用这些键(即没有捆绑软件)。所以我认为这个踏板的东西也适用于linux,但问题是如何?
[我是Linux上较低级别的新手,所以请慷慨地提供介绍或教程的链接。)
*对于那些不知情的人,Microsoft Natural Keyboard会同时注册为常规键盘和通用HID设备。如果没有某些应用程序(例如捆绑的应用程序)知道如何解释HID输入,常规键将起作用,但是最喜欢的键和特殊功能键是无用的。 子>
为了澄清,linux并没有将踏板按下作为输入。它确实识别USB设备,但xev没有为踏板按下输出。我已经看到有人在WINE下成功使用踏板进行转录软件的报道,但这必须以Windows的方式工作,并没有给出我想要的东西(这使得踏板看起来像所有原生linux应用程序的键盘)。我不知道是否有一些低级linux键盘驱动程序 需要吗?
以下是更多信息:如果我在终端
中发出此信息cat /dev/usb/hiddev0
(dev/usb/hiddev0
是我的踏板),我得到与我的踏板按下相对应的原始代码。那是一个开始。我知道那些原始代码意味着什么:二进制,0001,0010,0100分别对应每个踏板,踏板按压的组合发送那些二进制数的组合,并释放任何踏板仍然被按下的踏板触发输入(如果全部踏板向上,0000被发送。)
如何让X听取dev/usb/hiddev0
并将原始代码转换为特殊的密钥代码,以便我可以用xmodmap或其他东西映射它们?
答案 0 :(得分:19)
你需要uinput
。您将收听/ dev / usb / hiddev0,然后创建您将在/dev/input/uinput
上发送的新活动。
这解释了它,并提供了一些教程: Using uinput driver in Linux- 2.6.x to send user input {这是EInfochips的“信息中心”出版物问题2007年1月“{3}}归档页面}上提到的”月度提示“文章。
答案 1 :(得分:4)
设备是否显示在/ dev / input中?如果是,请使用“evdev”X驱动程序将其连接起来,就像使用键盘或鼠标一样。
答案 2 :(得分:2)
你应该调查lircd。它解释来自遥控器的输入。一些支持的遥控器显然是通用的隐藏设备,所以你可以让你的设备与lircd交谈。
答案 3 :(得分:2)
此处存在同样的问题,但无线键盘上有特殊键。我感觉到你的痛苦。
无论如何,试图让这个工作,继承我的方法:
sleep 10; killall cat
然后快速在另一个终端:cat /dev/usb/hiddevice0 > key1.usbdump
并按/使用该设备。这将转储该密钥的hiddevice的二进制输出。所以这是一项正在进行中的工作(仅适用于第一次按下),但也许这样的事情对您有用:
sf1 = open("test.usbdump").read() # read the earlier usb dump from hiddevice
kb = open("/dev/usb/hiddev0")
while 1:
# Prints true if the specific key has been read.
print (kb.read(len(sf1)) == sf1)
# Basically all that has to be done is if ^ is true, then fire off the event you want.
如果有人可以帮我解决我的计划,或者我做错了,请告诉我。 ;)
我意识到在hiddevice的初始转储中包含了一些头文件。使用一些bless十六进制编辑和位差分,您可以找到哪些值很重要,并在python中检查它们。 (例如,十六进制数字“B0”表示我的键盘上已按下一个特殊功能键,稍后会有更多关于按下哪个键的信息等。)
我的最终结果是:hiddevice0似乎挂起并停止提供数据一段时间后,不知道为什么,但相反,我使用/ dev / input / event *(它也可能适合你),这似乎工作得更好。同样,相同的hexediting和低级解析会导致成功。在此过程中,我发现sudo cat /dev/input/event3 | hexdump
对确定哪些字节对您很重要非常有帮助。
所以,如果你有一个Sk-8812 IBM键盘,并想使用特殊键,你可以跟我说说我得到的脚本。
答案 4 :(得分:1)
我写了关于如何让我的Infinity IN-USB-1(又名“ VEC USB Footpedal”)在我的Weblog上的X下发送任意键盘的符号:
Use VEC/Infinity USB Foot Pedal as a Keyboard Under Linux
(它也应该适用于IN-USB-2以及也许由VEC和P.I. Engineering及其克隆销售的其他一些USB脚控制器型号。)
以下是较短的版本:
踏板是符合HID的USB设备,内核可以轻松发现它并通过/dev/input/eventX
节点将其事件提供给用户空间。要查看可以运行evtest
程序(在Debian上:sudo apt install evtest
)。因此,您不需要进入HID级别即可使用脚踏板。
问题是udev不会将其标记为键盘或鼠标,因此X会忽略它。可以使用单行udev规则文件解决此问题(感谢Parlatype开发人员Gabor Karsay在Parlatype Issue 28中提供了此解决方案):
ACTION=="add|change", KERNEL=="event[0-9]*", ATTRS{idVendor}=="05f3", ATTRS{idProduct}=="00ff", ENV{ID_INPUT_KEYBOARD}="1"
将该行放入名为/etc/udev/rules.d/10-vec-usb-footpedal.rules
的文件中。无需重新启动任何东西,udev应该会自动检测该文件。
现在,当您拔出并重新插入USB踏板时,它应该被X识别(并发送鼠标按钮事件)。要进行验证,请运行xev
。
拥有只发送鼠标点击的踏板可能不是您想要的。踏板开关发送的这些键代码可以与udev hwdb文件重新映射。
在/etc/udev/hwdb.d/
下创建一个文件(我在/etc/udev/hwdb.d/60-usb-footpedal.hwdb
中放了我的文件),其中包含以下几行:
/etc/udev/hwdb.d/60-usb-footpedal.hwdb
evdev:input:b*v05F3p00FF*
KEYBOARD_KEY_90001=f14
KEYBOARD_KEY_90002=f15
KEYBOARD_KEY_90003=f16
这一次我们需要通知系统更新二进制hwdb文件:
$ sudo systemd-hwdb update
然后拔下设备并重新调整设备。
hwdb文件的第一行与我们的设备(供应商05F3
,产品00FF
)匹配,随后的几行将扫描码(十六进制)映射到键码。我选择了F14,F15和F16功能键,但是在/usr/include/linux/input-event-codes.h中定义了可用键代码的列表。要将该文件中定义的名称#hwdb用作键码,只需将其转换为小写并删除key_
前缀即可。
计算机上的默认(pc + us)xkb键盘布局将F14
,F15
和F16
映射到XF86Launch5
,XF86Launch6
和分别使用XF86Launch7
个键盘符号。如果现在打开xev
并踩下踏板,您应该会看到发出的那些按键音。使用这些按键,可以将每个踏板开关映射为桌面或窗口管理器中的热键。
您还可以使用xmodmap之类的方法将XF86*
键符号重新映射到其他键。有关更多详细信息,包括使密钥在vim中可映射,更多文档链接,根据需要直接读取HID设备的指针以及Mac OS X的解决方案,请参阅我的weblog post
我要提到的最后一件事是一个名为footcontroller的python程序,该程序从evdev设备(/ dev / input / eventX)读取事件,并且可以配置为发出按键(通过xdotool)或在其中运行脚本对踩踏板的反应。它可以代替xmodmap来使您的踏板发送您想要的任何击键。
答案 5 :(得分:0)
我用我的绑定/ shorcuts compiz,easystroke和xmacro的组合。
根据您的需要,我认为缺少的部分是xbindkeys。我找到了这个链接,可能有助于你设置它:
http://linux-trackball.dreamhosters.com/
我想知道是否有办法区分几种鼠标设备。