模拟触摸板

模拟触摸板

我有一台 Surface Pro,触摸屏有一半坏了。简而言之,有没有办法让我生成一个虚拟触摸板,就像虚拟键盘一样(onboard),这样我就可以单独使用平板电脑了?

答案1

执行摘要

要回答“如果有办法”这个问题,我会说我的猜测是的,理论上是可行的。但具体怎么做,就得问比我更高级的用户了。我还猜测,这个解决方案不太实用(无论是在实施还是使用方面),而且修理/更换触摸屏会更有效率。

解释

话虽如此,这就是我说这是可能的原因。

该设备的属性之一是“坐标变换矩阵”,您可以使用 来查看和更改它xinput。此矩阵将触摸屏的物理传感器映射到显示系统的屏幕位置。在正常操作中,该矩阵是单位矩阵,因此映射是一对一的(即,您触摸屏幕的位置就是显示屏上显示动作的位置)。例如,当您旋转屏幕时,会使用此矩阵:随着显示输出的旋转,矩阵会更改为适当的旋转矩阵,以便显示输出仍然与您物理触摸屏幕的位置相匹配。

这意味着您还应该能够定义一个更通用的变换矩阵,将物理屏幕上的一个小的矩形区域映射到整个显示屏。

因此,您应该可以在 GUI 中编写一个程序,弹出一个小的矩形窗口(该窗口始终位于顶部,因此当您单击其他位置时它不会消失),同时运行xinput以相应地更新坐标变换矩阵,以便它将该矩形区域中的触摸屏传感器映射到整个显示输出。

需要明确的是,我之前描述的意思是它不会像触摸板那样工作。在触摸板上,如果你把手指放在底部并向上拖动,光标就会向上移动;如果你再次触摸底部并向上拖动,光标会从原来的位置继续向上移动(即,它相对于接触点移动)。在我描述的虚拟触摸板上,如果你触摸底部,光标会移动到显示屏底部的相应部分。更进一步,让它像触摸板一样工作,您可以让程序在每次触摸时即时更改矩阵,以便接触点与光标的当前位置相匹配。但我猜响应时间会让这个功能不太实用。

我不太了解 GUI 编程,所以这对我来说并不简单,但对你来说可能有所不同。另一部分是让你的程序计算正确的矩阵,这涉及一些基本的线性代数。因此,你可以判断实施解决方案的难易程度。

顺便说一句,我一直在谈论自己实施这个解决方案,因为你的问题太专业了,我无法想象有现成的工具;但我可能是错的!

更进一步说,即使你确实得到了我上面描述的东西,我也能看到两个实际问题:

  • 虚拟触摸板会占用显示屏的很大一部分(但也许您可以将触摸板窗口的不透明度更改为半透明,以便能够使用其下方的显示区域)。
  • 由于您要将较小的区域映射到较大的区域,根据传感器分辨率与显示分辨率,它可能无法为您提供足够的精度和精细控制以使其实用。

总之:修理/更换您的触摸屏!

答案2

似乎有一个GitLab 上非常好的解决方案。它模拟屏幕上的触摸板:

  • 用手指拖动屏幕→移动光标
  • 点击然后拖动 → 左键单击并拖动光标
  • 按住一根手指,点击另一根手指 → 右键单击
  • 音量调高按钮→触摸板鼠标模式
  • 音量降低按钮→触摸屏模式,如果已经处于触摸屏模式:打开/关闭屏幕键盘
  • 按住任一音量按钮 3 秒钟 → 关闭触摸板应用程序
笔记:

该触摸板目前仅针对 PinePhone 进行了优化,可能想要在编译之前更改源代码副本。触摸板应用程序的创建者在 README 中声明,他们希望迟早将其实现为配置文件,以便更容易在其他系统上使用它。

相关内容