在带有触摸屏的双指针设置中隐藏 KDE 中的单个指针光标(因为闪烁)

在带有触摸屏的双指针设置中隐藏 KDE 中的单个指针光标(因为闪烁)

在 Kubuntu 17.04 下,我试图获得双指针设置,其中一个像往常一样连接到我的鼠标,另一个连接到触摸屏,否则在连接到核心指针时可以正常工作(包括类似捏合的手势):

$ xinput
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ My touchscreen                            id=11   [slave  pointer  (2)]
⎜   ↳ My mouse                                  id=18   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=15   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
...

下列的这个答案,我创建了另一个指针并将触摸屏连接到它:

$ xinput create-master Touchscreen
$ xinput reattach 11 "Touchscreen pointer"
$ xinput
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ My mouse                                  id=18   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=15   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
...
⎡ Touchscreen pointer                           id=21   [master pointer  (22)]
⎜   ↳ My touchscreen                            id=11   [slave  pointer  (21)]
⎜   ↳ Touchscreen XTEST pointer                 id=23   [slave  pointer  (21)]
⎣ Touchscreen keyboard                          id=22   [master keyboard (21)]
    ↳ Touchscreen XTEST keyboard                id=24   [slave  keyboard (22)]

这也是功能性的,包括手势。问题是连接到触摸屏的光标指针闪烁。核心指针不会发生这种情况。奇怪的是,只有当我移动鼠标指针时才会发生闪烁。如果我不移动鼠标,则在不使用触摸屏时触摸屏指针保持不可见,这非常接近我想要的。理想情况下,触摸屏指针应始终隐藏。

解决方案1(不起作用):

xicursorset按照建议使用以上答案。该代码最终用于XIDefineCursor为各个指针设置光标图像。这对我在 KDE 下没有任何作用,没有错误。如果它有效,我会将光标设置为空图像,我不确定这是否可以解决闪烁问题。

解决方案2(仅部分有效):

通过以下方式使触摸屏保持浮动:

$ xinput float 11
$ xinput
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ My mouse                                  id=18   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=15   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
...
∼ My touchscreen                                id=11   [floating slave]

在此配置中,没有 KDE 窗口可以识别触摸屏,但令人惊讶的是,Chrome 可以识别单指滚动或两指捏合缩放等手势。如果我能在每个窗口中获得这种功能,对我来说就足够了。

解决方案 3(理论上有效,但由于崩溃而在实践中无效):

动态添加/删除指针。换句话说,使用以下脚本~/.local/bin/watch-touchscreen.py

#!/usr/bin/python
import sys;
from subprocess import call;
while True:
    line = sys.stdin.readline()
    if line.startswith("button press"):
        call(["xinput", "create-master", "Touchscreen"])
        call(["xinput", "reattach", "11", "Touchscreen pointer"])
    elif line.startswith("button release"):
        call(["xinput", "remove-master", "Touchscreen pointer"])

像这样:

$ xinput test 11 | ~/.local/bin/watch-touchscreen.py

这个想法是在每次触摸触摸屏时创建一个新指针,并在释放触摸时销毁它,此时触摸屏将恢复为浮动从属设备。这个过程非常短暂,直到 X 会话立即崩溃,迫使我再次登录。我想,动态创建和销毁 xinput 指针毕竟不是一个聪明的主意。

有什么想法、解决方法吗?

相关内容