创建一个类似 Wacom 的 Linux uinput 设备,用于触摸屏和笔

GeR*_*ReV 6 linux input-devices gimp

这是一个相当广泛的问题,所以我会尽力集中精力。

我目前拥有一台安装了 Ubuntu 并具有触摸屏功能的联想笔记本电脑,还有一支压敏蓝牙笔,并一直在尝试让两者一起工作,作为一款廉价的类似 Cintiq 的平板电脑。

不幸的是,这款笔仅支持 iOS 手机和平板电脑的特定应用程序。
因此,经过大量研究,我成功地与笔连接并uinput为其创建了一个设备,这样我就可以记录笔上的按钮点击和压力变化,甚至可以在通过“输入控制器”菜单配置设备时看到它们路由到 GIMP 。

到目前为止,我拥有的该接口的代码可以在这里找到

当尝试用 GIMP 测试它时,麻烦就开始了。
据我所知,这是因为 GIMP 假设 Wacom 设备报告自己的位置,将触摸屏触摸视为鼠标移动,并且一次只允许来自单个设备的输入。

我的问题是,我该如何解决这个问题?

更具体地说,我如何创建一个uinput充当 Wacom 平板电脑并取代/阻止我描述的行为的设备?
或者是否有不同的解决方案,例如修补 GIMP 或为其编写插件。

更新 (2014-06-07)

上面提到的代码现在可以工作了。

我写了一篇关于让它发挥作用的过程的博客文章:http://gerev.github.io/laptop-cintiq

jde*_*esa 5

正如你所说,Gimp 希望你在驱动程序中提供 ABS_X 和 ABS_Y 以及 ABS_PRESSURE - 这并不奇怪,因为你使用虚拟设备作为输入,所以从一个中选择 ABS_X 和 ABS_Y 坐标没有多大意义设备和 ABS_PRESSURE 来自另一个(尽管在这种情况下它们始终相同)。也许您可以读取鼠标的当前坐标并将其复制为您自己的设备坐标。

例如,GfxTablet项目所做的事情与您正在尝试的类似,他们有一个适用于带笔的平板电脑的 Android 应用程序,并使用 uinput 创建虚拟设备,其工作方式类似于 Linux 上的压敏笔。我已经使用过它,它在我的笔记本电脑上的 Gimp 和 mypaint 中发挥着神奇的作用,而且我在使用 uinput 设备的同时激活鼠标(或触摸板)没有任何问题(我认为 Krita 添加了对通用的支持)最近的压力敏感设备)。您可以在这里查看驱动程序的源代码(公平地说,非常简单)。

请注意,这不是 Gimp 的错误行为,因为这是平板电脑类设备所期望的。看一下事件代码内核文档页面,在最后一节(指南)中,据说平板电脑必须报告ABS_X和ABS_Y。此外,他们应该使用 BTN_STYLUS 和 BTN_STYLUS2 来报告工具按钮,并使用一些 BTN_TOOL_* (例如 BTN_TOOL_PEN)来报告活动(您可以在input.h中找到所有可用的代码);然而,最后这些似乎并不那么重要,因为 GfxTablet 没有实现它们并且工作没有问题。