在 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 指针毕竟不是一个聪明的主意。
有什么想法、解决方法吗?