Ocultar el cursor del mouse dinámicamente cuando se usa la pantalla táctil

21

Tengo una computadora portátil con pantalla táctil y quiero ocultar el puntero cada vez que toco la pantalla. Soy consciente de soluciones como unclutter y startx -nocursorpero quiero que el puntero para ocultar / mostrar dinámicamente, escondite si uso de la pantalla táctil y que muestra cuando se utiliza un ratón de hardware.

Pensé en hacer dos punteros separados y aplicar una de las dos soluciones anteriores al puntero de la pantalla táctil, pero ninguna de esas soluciones menciona cómo apuntar a un solo puntero, y tener múltiples punteros hace que las cosas actúen de manera extraña, y eso no ocultaría el hardware cursor del ratón.

Me imagino que puedo hacer esto de manera más razonable haciendo algo como esto , haciendo un seguimiento del mecanismo de entrada actual y ejecutándolo xinput -cursor [transparent cursor]cada vez que se usa la pantalla táctil y xinput -cursor [normal cursor]cada vez que se usa un mouse normal.

Sin embargo, miré a xinput y parece que tanto el mouse de hardware como la pantalla táctil están esclavos en el mismo puntero, ambos registran los mismos eventos en xev, así que no estoy realmente seguro de dónde obtendría la información necesaria para diferenciar un toque desde un clic del mouse. ¿Es posible?

erp
fuente

Respuestas:

5

Podrías usar

Para usar, instálalo

sudo apt-get install unclutter

entonces ejecútalo

unclutter -idle 0.01 -root

Tenga en cuenta que el número después de inactivo significa el tiempo antes de que se oculte. En este caso, se establece en 1/100 de segundo. Puede intentar cambiarlo a un valor que siempre esté oculto.

Esto ocultará el cursor cuando no lo muevas. Estoy seguro de que también hay una opción para ocultarlo por completo.

КодСерфинг145
fuente
He visto soluciones usando el desorden, pero esto no diferencia entre usar un touchsreen y un mouse.
erp
2

Supongo que usa la pantalla táctil cuando no tiene un mouse y conecta uno en el sistema cuando desea usarlo. En este caso, puede usar udevreglas para administrar su puntero en consecuencia:

ACTION=="add", ATTRS{bInterfaceProtocol}=="02", ATTRS{bInterfaceClass}=="03", ATTRS{bInterfaceSubClass}=="01", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/user/.Xauthority", ENV{REMOVE_CMD}="/usr/bin/xinput -cursor [transparent cursor]", RUN+="/usr/bin/xinput -cursor [normal cursor]"

Las condiciones utilizadas para distinguir un mouse se toman prestadas de esta respuesta .

Tenga en cuenta que las aplicaciones individuales son libres de redefinir el cursor dinámicamente, por lo que su cursor puede volver a ser visible cuando pase el cursor sobre sus ventanas. En su lugar, puede iniciar / detener uncluttersi desea que todos los cursores estén ocultos en todas partes:

ACTION=="add", ATTRS{bInterfaceProtocol}=="02", ATTRS{bInterfaceClass}=="03", ATTRS{bInterfaceSubClass}=="01", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/user/.Xauthority", ENV{REMOVE_CMD}="/bin/sh -c unclutter&", RUN+="/usr/bin/killall unclutter"

Personalmente, también deshabilitaría la pantalla táctil por completo cuando el mouse esté enchufado, de modo que tocarlo accidentalmente no perturbe el cursor cuando se espera que siga al mouse.

Dmitry Grigoryev
fuente
esta es una buena opción, excepto que quiero este comportamiento para mi trackpad, no solo para los ratones conectados. ¿Creo que udev solo afecta a los dispositivos que se agregan / eliminan dinámicamente?
erp
¿Quieres decir que tu trackpad es tu "mouse de hardware"? Diría que tendrás que intentar ver si funciona. En realidad, el panel táctil puede verse udevcomo eliminado cuando lo deshabilita con el botón Fn (suponiendo que tenga uno).
Dmitry Grigoryev
1

Hay una bifurcación de la herramienta de corrección de clutter de nowrep disponible aquí . Esta versión agrega una -touchopción para ocultar automáticamente el cursor cada vez que se detecta una entrada táctil. (El repositorio original de unclutter-xfixes está aquí )

Una cosa a tener en cuenta es que todavía incluye el comportamiento de ocultar el cursor después de un período de tiempo específico. Simplemente puede establecer la --timeoutopción en un valor muy alto para evitar eso.

Esto debería funcionar perfectamente para ti. En mi caso, tenía una pantalla táctil conectada externamente y cuando vuelvo al monitor normal, el cursor estará en la pantalla táctil, así que tengo que moverlo al monitor desde donde toqué. Lo bueno es que después de comenzar a mover el mouse, aparecerá el cursor para saber dónde está.

Un buen beneficio de esta opción es que aún puedo usar mi mouse como de costumbre en la pantalla táctil si lo deseo, pero lo oculta cuando no lo hago.

bpedman
fuente