我有一台 Surface Pro,触摸屏有一半坏了。简而言之,有没有办法让我生成一个虚拟触摸板,就像虚拟键盘一样(onboard
),这样我就可以单独使用平板电脑了?
答案1
执行摘要
要回答“如果有办法”这个问题,我会说我的猜测是的,理论上是可行的。但具体怎么做,就得问比我更高级的用户了。我还猜测,这个解决方案不太实用(无论是在实施还是使用方面),而且修理/更换触摸屏会更有效率。
解释
话虽如此,这就是我说这是可能的原因。
该设备的属性之一是“坐标变换矩阵”,您可以使用 来查看和更改它xinput
。此矩阵将触摸屏的物理传感器映射到显示系统的屏幕位置。在正常操作中,该矩阵是单位矩阵,因此映射是一对一的(即,您触摸屏幕的位置就是显示屏上显示动作的位置)。例如,当您旋转屏幕时,会使用此矩阵:随着显示输出的旋转,矩阵会更改为适当的旋转矩阵,以便显示输出仍然与您物理触摸屏幕的位置相匹配。
这意味着您还应该能够定义一个更通用的变换矩阵,将物理屏幕上的一个小的矩形区域映射到整个显示屏。
因此,您应该可以在 GUI 中编写一个程序,弹出一个小的矩形窗口(该窗口始终位于顶部,因此当您单击其他位置时它不会消失),同时运行xinput
以相应地更新坐标变换矩阵,以便它将该矩形区域中的触摸屏传感器映射到整个显示输出。
需要明确的是,我之前描述的意思是它不会像触摸板那样工作。在触摸板上,如果你把手指放在底部并向上拖动,光标就会向上移动;如果你再次触摸底部并向上拖动,光标会从原来的位置继续向上移动(即,它相对于接触点移动)。在我描述的虚拟触摸板上,如果你触摸底部,光标会移动到显示屏底部的相应部分。更进一步,让它像触摸板一样工作,您可以让程序在每次触摸时即时更改矩阵,以便接触点与光标的当前位置相匹配。但我猜响应时间会让这个功能不太实用。
我不太了解 GUI 编程,所以这对我来说并不简单,但对你来说可能有所不同。另一部分是让你的程序计算正确的矩阵,这涉及一些基本的线性代数。因此,你可以判断实施解决方案的难易程度。
顺便说一句,我一直在谈论自己实施这个解决方案,因为你的问题太专业了,我无法想象有现成的工具;但我可能是错的!
更进一步说,即使你确实得到了我上面描述的东西,我也能看到两个实际问题:
- 虚拟触摸板会占用显示屏的很大一部分(但也许您可以将触摸板窗口的不透明度更改为半透明,以便能够使用其下方的显示区域)。
- 由于您要将较小的区域映射到较大的区域,根据传感器分辨率与显示分辨率,它可能无法为您提供足够的精度和精细控制以使其实用。
总之:修理/更换您的触摸屏!
答案2
似乎有一个GitLab 上非常好的解决方案。它模拟屏幕上的触摸板:
- 用手指拖动屏幕→移动光标
- 点击然后拖动 → 左键单击并拖动光标
- 按住一根手指,点击另一根手指 → 右键单击
- 音量调高按钮→触摸板鼠标模式
- 音量降低按钮→触摸屏模式,如果已经处于触摸屏模式:打开/关闭屏幕键盘
- 按住任一音量按钮 3 秒钟 → 关闭触摸板应用程序
笔记:
该触摸板目前仅针对 PinePhone 进行了优化,可能想要在编译之前更改源代码副本。触摸板应用程序的创建者在 README 中声明,他们希望迟早将其实现为配置文件,以便更容易在其他系统上使用它。