这是一个相当宽泛的问题,所以我会尽量集中注意力。
我目前拥有一台安装了Ubuntu并具有触摸屏功能的联想笔记本电脑,还有一支压敏蓝牙笔,我一直在努力将两者作为一款类似Cintiq的廉价平板电脑协同工作。
不幸的是,该笔只支持iOS手机和平板电脑的特定应用程序
因此,经过大量研究,我已经设法与笔接口,并为其创建了一个uinput
设备,这样我就可以在笔上注册按钮点击和压力变化,甚至在通过输入控制器菜单配置设备时,可以看到它们被路由到GIMP。
到目前为止,我为该接口编写的代码在这里可用。
当试图用GIMP测试它时,问题就开始了
据我所知,这是因为GIMP假设Wacom设备报告自己的位置,将触摸屏触摸视为鼠标移动,并且一次只允许来自单个设备的输入。
我的问题是,我该如何解决这个问题?
更具体地说,我如何创建一个uinput
设备,使其表现得像Wacom平板电脑,并取代/阻止我描述的行为
或者,如果有不同的解决方案,比如修补GIMP或为其编写插件。
更新(2014-06-07)
上面提到的代码现在可以工作了。
我写了一篇关于实现这一目标的过程的博客文章:http://gerev.github.io/laptop-cintiq
正如您所说,Gimp希望您在驱动程序中提供ABS_X和ABS_Y以及ABS_PRESSURE,这并不奇怪,因为您使用虚拟设备作为输入,因此从一个设备中选择ABS_X、ABS_Y坐标,从另一个设备选择ABS_PRESURE坐标没有多大意义(尽管在这种情况下它们总是相同的)。也许你可以读取鼠标的当前坐标,并将其复制为你自己的设备坐标。
例如,GfxTablet项目做了一些类似于你正在尝试的事情,他们有一个Android应用程序,用于带笔的平板电脑,并使用uinput创建虚拟设备,其工作原理类似于Linux上的压敏笔。我用过它,它在我的笔记本电脑上的Gimp和mypaint中很有魅力,我对鼠标(或触摸板)与uinput设备同时激活没有问题(我认为Krita最近增加了对通用压敏设备的支持)。您可以在这里查看驱动程序的源代码(公平地说,非常简单)。
请注意,这不是Gimp的错误行为,因为这是类似平板电脑的设备所期望的。查看事件代码内核文档页面,在最后一节(指南)中,据说平板电脑必须报告ABS_X和ABS_Y。此外,他们应该使用BTN_STYLUS和BTN_STYLES2来报告工具按钮,并使用一些BTN_tool_*(例如BTN_tool_PEN)来报告活动(您可以在input.h中找到所有可用的代码);然而,最后这些似乎并不那么重要,因为GfxTablet没有实现它们,并且工作起来没有问题。