タッチスクリーンを使用したデュアルポインタ設定でKDEのシングルポインタカーソルを隠す(点滅による)

タッチスクリーンを使用したデュアルポインタ設定でKDEのシングルポインタカーソルを隠す(点滅による)

Kubuntu 17.04では、1つは通常どおりマウスに接続し、もう1つはタッチスクリーンに接続するデュアルポインタ設定を取得しようとしています。コアポインタに接続すると正常に動作します(ピンチ動作を含む)。

$ 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は1本の指スクロールや2本の指のピンチツーズームなどの動作を認識します。すべてのウィンドウでこの機能を使用できる場合は十分です。

解決策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ポインタを動的に生成して破壊することは、最終的に賢明なアイデアではないようです。

どんなアイデアや解決策がありますか?

関連情報