5

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

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

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

到目前为止,该接口的代码可在此处获得

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

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

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

更新 (2014-06-07)

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

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

4

1 回答 1

4

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

例如,GfxTablet项目的功能与您正在尝试的类似,他们有一个带有笔的平板电脑的 Android 应用程序,并使用 uinput 创建像 Linux 上的压敏笔一样工作的虚拟设备。我已经使用过它,它在我的笔记本电脑上的 Gimp 和 mypaint 中就像一个魅力,我没有问题让鼠标(或触摸板)与 uinput 设备同时处于活动状态(我认为 Krita 添加了对通用的支持最近的压敏设备)。您可以在此处查看驱动程序的源代码(公平地说,非常简单)。

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

于 2014-04-26T13:58:44.837 回答