쿠분투 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 포인터를 동적으로 생성하고 파괴하는 것은 결국 현명한 아이디어가 아닌 것 같습니다.
어떤 아이디어나 해결책이 있나요?