Создайте Uacput-устройство для Linux, похожее на Wacom, для работы с сенсорным экраном и пером

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

В настоящее время у меня есть ноутбук Lenovo с установленной Ubuntu и сенсорным экраном, а также чувствительная к давлению ручка Bluetooth, и я пытаюсь заставить их работать вместе как дешевый планшет, похожий на Cintiq.

К сожалению, ручка поддерживает только определенные приложения для телефонов и планшетов на iOS.
Так что после долгих исследований мне удалось взаимодействовать с ручкой и создать uinput устройство для него, так что я могу регистрировать нажатия кнопок и изменения давления на ручке и даже видеть их перенаправлены в GIMP при настройке устройства через меню контроллеров ввода.

Код, который у меня есть для этого интерфейса, доступен здесь.

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

Мой вопрос, как я могу обойти это?

Более конкретно, как я могу создать uinput устройство, которое будет вести себя как планшет Wacom и заменять / блокировать поведение, которое я описал?
Или, если есть другое решение, такое как исправление GIMP или написание плагина для него.

Обновление (2014-06-07)

Код, упомянутый выше, теперь работает.

Я написал сообщение в блоге о том, как заставить это работать: http://gerev.github.io/laptop-cintiq

2 ответа

Решение

Как вы сказали, Gimp ожидает, что вы предоставите ABS_X и ABS_Y вместе с ABS_PRESSURE в своем драйвере - что не странно, потому что вы используете свое виртуальное устройство в качестве входных данных, поэтому не имеет смысла выбирать координаты ABS_X и ABS_Y из одного устройство и ABS_PRESSURE от другого (хотя в этом случае они всегда будут одинаковыми). Может быть, вы можете просто прочитать текущие координаты мыши и скопировать их как свои собственные координаты устройства.

Например, проект GfxTablet делает что-то похожее на то, что вы пытаетесь: у них есть приложение Android для планшетов с пером и использование uinput для создания виртуального устройства, которое работает как чувствительное к давлению перо в Linux. Я использовал его, и он работал как чудо в Gimp и mypaint на моем ноутбуке, и у меня не было проблем с активной мышью (или тачпадом) одновременно с устройством uinput (я думаю, что Krita добавила поддержку универсального). чувствительные к давлению устройства в последнее время). Вы можете взглянуть на исходный код драйвера здесь (на удивление просто, если честно).

Обратите внимание, что это не ошибочное поведение Gimp, потому что это то, что ожидается от планшетоподобного устройства. Взгляните на страницу документации ядра кодов событий, в последнем разделе (Рекомендации) сказано, что планшеты должны сообщать ABS_X и ABS_Y. Кроме того, они должны использовать BTN_STYLUS и BTN_STYLUS2, чтобы сообщать о кнопках инструментов, и некоторые BTN_TOOL_* (например, BTN_TOOL_PEN), чтобы сообщать о деятельности (вы можете найти все доступные коды в input.h); однако эти последние не кажутся такими важными, поскольку GfxTablet не реализует их и работает без проблем.

Я действительно не знаю правильный ответ.

Но Google "драйвер сенсорного пера с открытым исходным кодом linux" привел меня к проекту linuxwacom sourceforge ←.

Кажется, это решает проблему, которая у вас есть, и есть исходные коды для загрузки и анализа (обновлено в этом году), и есть ребята, чтобы спросить:)

Другие вопросы по тегам