博文

目前显示的是 十一月, 2019的博文

inux折腾笔记3:用另一把键盘做快捷键:python脚本

简述问题 拿第二个键盘当全部作快捷键,实现各种功能。 解决过程 无论是win还是linux,解读键盘的指令只会看scancode,就是键盘发送的键位的代码,这个代码显然是各个键盘共用的。现在的问题就是,怎么让系统区分两个键盘? 思路大概有一下集中: 组合按键,比如把不在键盘上的按键虚拟成一个trigger,任何在这个trigger被按下之后的按键都会被重新解读成一个新的组合键。然后再把这些新的组合键交给autoHotkey来实现各种功能。 交给专用的软件。 用脚本监听特定的设备,这里是键盘,然后用脚本来做。 1方案是一个 youtube小哥 用的,平台是win,结果bug满天飞(主要是用的程序限定了能接的键盘数量,不过现代的键盘一般都会在系统里虚拟出几个键盘来保证稳定。导致经常插usb的话会随机弹飞键盘,只能重启解决。) 2方案有一个 lua写的程序 ,也是面向win的。因为我不会lua所以没有尝试。 总之我在win上的尝试都失败了。然后在搜索的时候偶然看到 一篇博文 ,提到py有在linux下能单独监听一个键盘的库 evdev 。找来试试果然可以。不过这个库虽然可以模拟按键,用模拟按键的方式输出字符串也太麻烦了。于是搜了搜,有一个叫 keyboar d的库可以直接输出字符串,以及其他的一些功能(顺带一提这个库是有监听键盘的函数的,不过里面是空的还不能用,不知道这个库的作者还打算做么。) (再顺带一提这些库的文档真的是简洁,反正我是看不懂。) win上的话有 这篇文章 ,详述了怎么在win里面监听键盘的raw输入。不过我不会C++,所以折腾不来。 结果 总之上代码。 from evdev import InputDevice, categorize, ecodes,list_devices devices = [InputDevice(path) for path in list_devices()] for device in devices: if device.name=="你的设备的名字." and device.phys[-1] == "0": path = device.path dev = InputDevice(path) dev.