Что я ищу:
Есть ли способ сделать устройство претендующим на то, чтобы быть клавиатурой / HID при подключении к USB-порту и "вводить" содержимое буфера обмена? Точнее; Что нужно сделать, чтобы это произошло?
Мотивирующий вариант использования:
У меня на телефоне установлена программа для хранения паролей, но раздражает необходимость считывать пароль с устройства и пытаться ввести его на другом компьютере.
Фон:
У меня есть устройство Android, которое было построено до того, как MTP был поддержан для передачи файлов, но с последними обновлениями теперь поддерживает его. Исходя из этого, класс USB, который он утверждает, не может быть аппаратно определен и должен быть определен в программном обеспечении.
IIRC, в этом проекте Android-устройства (с тем, что я считаю стандартным ядром) говорят как некий USB-класс, который окончательно не встроен. Это указывает на то, что вы можете контролировать, какие классы USB он поддерживает, без работы ядра, но я не знаю точно.
Что касается хоста (то есть ПК), я никогда не видел, чтобы ПК, Mac или Linux не нуждались в специальных дисках для клавиатур, даже для некоторых довольно эзотерических устройств, которые претендуют на роль клавиатур (сканеры штрих-кода, кредитные карты и смарт-карты). устройства чтения карт и т. д.) поэтому общие драйверы должны быть достаточно хороши для того, что я хочу.
Все, что утверждает, что то, что я ищу, может быть сделано с аппаратной точки зрения , но очень мало говорит о том, какая поддержка программного обеспечения существует, и ничего о том, есть ли приложение для нее.
Ответы:
Да. Это определенно возможно, не требуя никаких модификаций или драйверов на ПК. Как упоминает OP, идентификация USB на конце телефона в конечном итоге выполняется программно (в этом файле https://github.com/android/kernel_msm/blob/android-msm-2.6.35/drivers/usb/gadget/composite .c ), и его можно изменить, чтобы идентифицировать себя как стандартную клавиатуру USB.
Это изменение потребует нескольких вещей.
Пару лет назад была опубликована статья под названием « Использование USB-подключения к смартфону для развлечения и выгоды», в которой описывалось использование телефона для грубых действий на экранах входа в систему. Метод, который они использовали, включал отображение телефона в виде клавиатуры USB.
источник
Это не совсем отвечает на ваш вопрос, но может помочь в вашем случае использования.
Может быть, вы хотите взглянуть на InputStick . Это будет USB-накопитель, который вы подключите к Android через Bluetooth. Подключенный к компьютеру, он эмулирует общий USB HID для отправки ударов по клавиатуре. Усовершенствованный Java API также позволит указывать, например, дескрипторы устройств для эмуляции нестандартных функций. Это может послужить хорошим примером того, что он определен программно, а не аппаратно.
Для справки, разработчик также работает с примерами программ, таких как Demo Password Manager.
источник
Как минимум, для этого потребуется программное обеспечение на телефоне и на ПК. 2 части программного обеспечения должны были бы общаться друг с другом. Ничего подобного, что я знаю в настоящее время, не существует.
А для того, чтобы ПК думал, что устройство действительно является клавиатурой, ему потребуется новый драйвер, который сообщит ПК, что устройство является клавиатурой, и как «использовать его в качестве клавиатуры».
Я не говорю, что это невозможно, потому что практически все возможно, когда дело доходит до таких вещей. Однако я говорю, что ничего подобного в настоящее время не существует.
USB - это и аппаратное, и программное обеспечение. Если бы он был программным, то один и тот же драйвер USB работал бы для всех устройств Android в Windows, а это не так. USB-накопитель и MTP обрабатываются драйверами на ПК, а не на устройстве. Какие устройства поддерживают как MTP, так и USB-накопители одновременно? Я нашел статьи о том, что устройства могут поддерживать UMS и MTP, но поддерживают UMS, только если есть внешняя SD-карта. Вы не можете подключить внешнюю SD-карту с помощью MTP и UMS. MTP для внутреннего хранения. И я не читал ничего, что могло бы подтвердить или опровергнуть, что вы можете использовать оба одновременно.
Вам не нужно устанавливать драйверы для клавиатур, если они следуют спецификации «по умолчанию», потому что в Windows уже есть драйверы для нее. Есть клавиатуры, которые поставляются со своими драйверами. Как я уже сказал, это было бы возможно. Я не уверен, как это будет сделано. Почти наверняка потребовалось бы собственное ядро, чтобы оно действовало как клавиатура, и никаких дополнительных драйверов на стороне ПК не требовалось.
Кроме того, я согласен с @davidbb, что это возможно, и я уже сказал, что это так. Проблема с вопросом о том, возможно ли что-то, никогда не решает проблему. Это было бы похоже на то, как я говорю «возможно ли мне запускать приложения ios на Windows?». Это теоретически возможно, но сейчас ничего такого не происходит, и «обычный пользователь» (или даже опытный пользователь) не может сделать этого. Этот сайт предназначен для пользователей, поэтому если вам нужно написать модифицированное ядро, это не тот ответ, который принесет пользу кому-либо. Таким образом, реальный ответ на вопрос - нет, потому что там нет модифицированного ядра.
источник
Вы пробовали Unified Remote . Это отличный инструмент для использования телефона в качестве клавиатуры и мыши. Он использует не USB, а Wi-Fi. На телефоне и компьютере есть приложение, которое работает вместе. Прекрасно работает для меня. Также, если вы получаете полную версию, вы получаете интеграцию со многими распространенными приложениями.
источник
Я искал что-то подобное и нашел
https://github.com/pelya/android-keyboard-gadget
Кажется, то же самое можно использовать в вашем случае. Вкратце, что я получил, вы должны написать драйвер USB в ядре Android, чтобы обнаружить устройство как HID.
источник
Сейчас прошло> шесть лет, и где-то посередине кто-то создал USB-плагин Keepass2 для клавиатуры Keepass2Android .
Хотел добавить сюда эту информацию ради полноты и потому, что я нашел этот вопрос без ответа и вышеупомянутый плагин при поиске именно такого.
Я еще не проверял это сам ...
источник
InputStick - это беспроводной USB-приемник, разработанный для устройств Android. Это позволяет приложениям Android эмулировать различные типы устройств, например: USB-клавиатура, USB-мышь, USB-геймпад и многие другие. С InputStick приложения для Android могут делать все, что может физическое устройство: печатать, перемещать указатель мыши, управлять мультимедиа и играми.
Информация может быть найдена в http://inputstick.com/
источник