Скрытие курсора мыши динамически при использовании сенсорного экрана

У меня есть ноутбук с сенсорным экраном, и я хочу скрыть указатель, когда я касаюсь экрана. Я знаю решения, такие как unclutter и startx -nocursor но я хочу, чтобы указатель скрывал / показывал динамически, скрываясь, если я использую сенсорный экран и показываю, когда использую аппаратную мышь.

Я думал о создании двух отдельных указателей и применении одного из двух вышеупомянутых решений к указателю на сенсорном экране, но ни одно из этих решений не упоминает, как настроить таргетинг на один указатель, а наличие нескольких указателей делает вещи странными, и это не скроет аппаратное обеспечение курсор мыши.

Я полагаю, что я могу наиболее разумно сделать это, делая что-то подобное, отслеживая текущий механизм ввода и выполняя xinput -cursor [transparent cursor] всякий раз, когда используется сенсорный экран, и xinput -cursor [normal cursor] всякий раз, когда используется обычная мышь.

Я смотрел на xinput, хотя и похоже, что как аппаратная мышь, так и сенсорный экран подчинены одному и тому же указателю, оба из них регистрируют одни и те же события в xev, поэтому я не уверен, где я получу информацию, необходимую для дифференциации касания от мышки. Является ли это возможным?

Вы можете использовать

Чтобы использовать, установите его

 sudo apt-get install unclutter 

затем запустите его

 unclutter -idle 0.01 -root 

Обратите внимание, что число после простоя означает время до его скрытия. В этом случае его значение равно 1/100 секунды. Вы можете попробовать изменить его на значение, которое всегда будет скрыто.

Это скроет курсор, когда вы его не переместите. Я уверен, что есть возможность полностью скрыть это.

Я полагаю, вы используете сенсорный экран, когда у вас нет мыши, и подключите его в системе, когда вы хотите его использовать. В этом случае вы можете использовать udev правила для управления указателем соответственно:

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

Условия, используемые для различения мыши, заимствованы из этого ответа .

Имейте в виду, что отдельные приложения могут свободно переопределять курсор динамически, поэтому ваш курсор может снова стать видимым при наведении их окон. Вы можете запустить / остановить unclutter вместо этого, если вы хотите, чтобы все курсоры были скрыты повсюду:

 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" 

Лично я также отключил бы сенсорный экран, когда мышь будет подключена, так что случайное касание не помешает курсору, когда вы ожидаете, что он будет следовать за мышью.