太长不看
脚本可以从AutoDisableTouchscreen下载,分别填入自己的触摸屏及电磁屏设备名称后运行即可使用。
起因
前段时间在海鲜市场上收了一块酷比魔方i7手写板。根据它的名字就可以看出,这部平板最明显的特征就是支持Wacom的手写笔,也正是这一点吸引了我购入。然而实际体验一言难尽,在此就不展开说了。
言归正传,Windows有个很人性化的功能,可以在电磁笔靠近屏幕时自动关闭触摸输入,方便用户将手放在屏幕上书写,避免了悬空操作的窘态。然而Linux上似乎没有这样的工具,只得尝试自己写一个。
历程
查阅manpage后得知,xinput list
可以列出所有的输入设备。
$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ……
⎜ ↳ Wacom HID 104 Pen stylus id=10 [slave pointer (2)]
⎜ ↳ Wacom HID 104 Pen eraser id=14 [slave pointer (2)]
⎜ ……
⎜ ↳ FTSC1000:00 2808:5012 id=11 [slave pointer (2)]
……
我们可以从中找到数位屏和触摸屏对应的设备,此处是10
和11
。由于我的手写笔不带橡皮功能,就不考虑另一端的情况了。
xinput query-state
可以获取指定输入设备的状态信息,我们先运行一下。
xinput query-state 'Wacom HID 104 Pen stylus'
......
ValuatorClass Mode=Absolute Proximity=In
......
xinput query-state 'Wacom HID 104 Pen stylus'
......
ValuatorClass Mode=Absolute Proximity=Out
......
经过尝试后发现Proximity
反映了电磁笔是否接近屏幕。
而xinput enable
和xinput disable
又分别可以启用和禁用输入设备。至此我们就知道该怎么做了。
这是一段伪代码:
while True:
if Proximity == In:
disable touchscreen
elif Proximity == Out:
enable touchscreen
结尾
这样虽然解决了问题,但实在算不得优雅。由于不断循环命令性能开销太大,我在结尾加上了sleep 0.5
使得脚本每500ms执行一次。如果想要使响应更加快速,可以尝试将这个值调小一些。
本文由 徐艺扬 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Sep 25,2021