Ocultar cursor de ponteiro individual (devido a flicker) no KDE na configuração de ponteiro duplo com tela sensível ao toque

2

Sob o Kubuntu 17.04, estou tentando obter uma configuração de ponteiro duplo, onde um é anexado ao meu mouse como de costume e o outro é anexado à tela sensível ao toque que funciona corretamente enquanto conectado ao ponteiro central ):

$ 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)]
...

Seguindo esta resposta , criei outro ponteiro e anexei a tela sensível ao toque:

$ 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)]

Isso também é funcional, incluindo gestos. O problema é o cursor conectado ao cursor da tela sensível ao toque piscar. Isso não acontece com o ponteiro do núcleo. O que é estranho é que a cintilação só acontece quando eu movo o ponteiro do mouse. Se eu não mover o mouse, o ponteiro da tela sensível ao toque ficará invisível quando a tela sensível ao toque não for usada, o que é muito próximo do que desejo. Idealmente, o ponteiro da tela sensível ao toque ficaria sempre oculto.

Solução 1 (não funciona):

Usando xicursorset como sugerido pela resposta acima . O código finalmente usa XIDefineCursor para definir a imagem do cursor para ponteiros individuais. Isso simplesmente não fez nada para mim no KDE, sem erros. Se funcionasse, eu colocaria o cursor em uma imagem vazia, o que não tenho certeza se resolveria o problema de cintilação.

Solução 2 (funciona apenas parcialmente):

Deixando a tela sensível ao toque flutuando por:

$ 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]

Nessa configuração, nenhuma janela do KDE reconhece a tela sensível ao toque, mas, surpreendentemente, o Chrome reconhece gestos como a rolagem com um dedo ou o zoom com dois dedos. Se eu conseguisse esse tipo de funcionalidade em todas as janelas, seria o suficiente para mim.

Solução 3 (funciona em teoria, não na prática devido a falha):

Para adicionar / remover o ponteiro dinamicamente. Em outras palavras, usando o seguinte script chamado ~/.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"])

assim:

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

A idéia é criar um novo ponteiro toda vez que a tela sensível ao toque for tocada e destruí-la quando o toque for liberado, ponto em que a tela sensível ao toque retornará a ser um escravo flutuante. Isso funciona muito brevemente até que a sessão X falhe, forçando-me a fazer o login novamente. Não é uma ideia inteligente criar dinamicamente e destruir os ponteiros de xinput, suponho.

Alguma idéia, soluções alternativas?

    
por Ayberk Özgür 16.07.2017 / 14:47

0 respostas