Подтвердить что ты не робот

Можно ли запрограммировать Android на физическую клавиатуру USB?

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


Изменить: Уточнение Я хочу написать программу/библиотеку для Android, которая позволяет устройству полностью эмулировать обычную клавиатуру, чтобы операционная система сообщала об этом как стандартном клавиатурном устройстве, и она будет работать в BIOS или где-нибудь еще, что работает на клавиатуре.

4b9b3361

Ответ 1

Я модифицировал ядро ​​на Nexus 7, чтобы действовать как стандартная клавиатура и мышь HID, не теряя функциональность MTP/ADB/другого USB.

Вы можете использовать утилиту командной строки usb-gadget-test для отправки нажатий клавиш и движений мыши на ваш компьютер. Я хочу позже создать приложение удаленного администратора, которое будет отправлять ключевые события и получать видео с камеры.

Патч, двоичные файлы и инструкции ядра: https://github.com/pelya/android-keyboard-gadget

Изменить: Я опубликовал подходящее приложение для Google Play, если ваш Nexus 7 укоренен, вы можете запускать ядро ​​прямо из приложения и отправлять с ним нажатия клавиш.

Ответ 2

Большинство клавиатур USB нуждаются в драйверах для запуска. Любые функциональные возможности клавиатуры (нестандартные кнопки), выходящие за пределы возможностей стандартных HID-драйверов должны будут установить на компьютере некоторое программное обеспечение.

Если говорить, возможно, возможно использовать возможности Android USB, а также написать собственный драйвер, если по умолчанию HID недостаточно для достижения вашей цели. Это, вероятно, очень нетривиальное мероприятие.

Изменить: Я думаю, что Кристофер Мичинский прав, что уровень контроля, который вы получаете с Android Android API для Android, для этой цели недостаточен. Его два решения по модификации прошивки для связи с использованием HID-стандартов, а также аппаратный посредник, который переводится из протокола Android Accessory в HID, кажутся мне действительными. Если установка драйверов на компьютере не может быть решена, это могут быть только два варианта.

Однако, если вы открыты для установки драйвера для этого поведения, должно быть возможно написать собственный драйвер, который может обрабатывать протокол Android USB, и правильно перевести на правильные вызовы/прерывания для функциональности клавиатуры. Если память используется, каждая периферийная клавиатура, которую я использовал за последние 10 лет, должна была установить драйвер для полной функциональности, поэтому это не может считаться нестандартным поведением. (Хотя просто происходит, что этот подход позволит только устройству функционировать как клавиатура внутри окон, а не во время процесса загрузки)

Ответ 3

Похоже, что кто-то, наконец, сделал это, он немного уродливый, но вот он:

http://forum.xda-developers.com/showthread.php?t=1871281

Это связано с перекомпиляцией ядра и небольшим редактированием, и вы теряете частичную функциональность (MDC?).. но это было сделано.

Лично, однако, теперь, когда я вижу "настоящую стоимость", я бы, вероятно, собрал небольшой адаптер на мероприятии или что-то в этом роде - предположив, что Android может разговаривать с последовательными устройствами через USB. Но это основано на том, что у меня есть samsung, и в любом случае потребуется специальный кабель для соединения с USB-интерфейсом, без дополнительной боли, чтобы иметь маленькое устройство на конце, если я вообще должен носить проклятый кабель.

Ответ 4

Кажется, кто-то сделал это, исправляя ядро. Я только что наткнулся на бумагу под названием "Использование USB-подключения для смартфонов для удовольствия и прибыли" Анджело Ставру, Чжаохуй Ван, факультет компьютерных наук Университета Джорджа Мейсона, Фэйрфакс, Вирджиния. (доступно свободно путем googling вышеупомянутого заголовка). Здесь два исследователя исследуют возможность взломанного Android-устройства, управляющего подключенным компьютером, имея устройство Android, представляющее собой устройство HID (клавиатура). Как доказательство концепции, кажется, что они успешно исправили ядро, делая именно то, что вы хотите. Они не представили подробных шагов, но в любом случае я просто цитирую, что они сказали, что они сделали:

..... мы разработали специальный драйвер USB-гаджета в дополнение к существующему USB-интерфейсу композитный интерфейс на ядре Android Linux с помощью USB-гаджета API для Linux [4]. Основа UGAL помогла нам реализовать простой USB-интерфейс Интерфейсный драйвер (HID) (например, драйвер устройства) и код клея между различными API-интерфейсами ядра. Используя предоставленный код в: "drivers/usb/gadget/composite.c", мы создали собственный драйвер гаджета как дополнительный составной интерфейс USB. Этот драйвер моделирует USB клавиатурное устройство. Мы также можем моделировать передачу USB-мыши предварительно запрограммированную команду ввода на настольную систему. Следовательно, это просто представить себя как обычную USB-мышь или клавиатурное устройство и отправлять предопределенные команды незаметно для имитации вредоносных интерактивных деятельности пользователя. Чтобы проверить эту функциональность, в нашем контролируемом экспериментов, мы отправляем последовательности кодовых последовательностей для выполнения нефатальных операций и показать, как такое манипулируемое устройство может нанести ущерб. В частности, мы моделировали клавиатуру Dell USB (vendorID = 413C, productID = 2105), отправив комбинацию клавиш "CTRL + ESC" и "U" и "Enter"чтобы перезагрузить компьютер. Обратите внимание, что для этого требуется только USB соединение и может получить привилегии "текущего пользователя" на рабочем столе система. С дополнительным локальным или удаленным эксплоитом, отправленным как полезная нагрузка, вредоносное ПО может эскалировать привилегию и получить полный доступ к настольной системы.

Ответ 5

Единственный способ, которым я мог видеть, что это возможно, - это если вы:

  • изменила прошивку Android, чтобы предоставить вам уровень доступа на уровне UNb на достаточно низком уровне, который вы могли бы использовать, используя необходимый протокол.

или

  • Сделал какой-то специальный аппаратный конвертер уровня, который вы подключили к устройству.

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

Ответ 6

Я считаю, что вы можете это сделать, если у вас есть внедренное устройство с недавним Android. Например, Asus Eee Pad Transformer с Android 4 имеет библиотеки /system/lib/libusb.so и /system/lib/libusbhost.so, поэтому вы можете написать приложение Java, которое вызывает их с помощью JNI для эмуляции USB-клавиатуры. Это означает, что вы должны написать некоторый код Cue, который эмулирует способ связи USB-клавиатуры с ПК (= вы должны изучить способ работы протокола USB).

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

Изменить: вышеописанное верно при программировании Android-устройства в качестве USB-хоста, в вашем случае вы должны быть "гаджетом". Я не знаю, сколько функций гаджета Linux содержится в ядре вашего Android-устройства. См. этот для аналогичного вопроса.

Ответ 7

Ваш Android уже идентифицируется с помощью VID/PID при подключении к хосту. У него уже есть интерфейс для Mass Storage. Вам нужно будет взломать драйвер на низком уровне, чтобы поддерживать второй интерфейс для 03:01 HID. Тогда это будет просто вопрос о том, чтобы подтолкнуть scancodes к модифицированному драйверу. Это было бы непросто, но это был бы аккуратный взлом. Одно из них - для ввода длинных случайных паролей для входа в систему.

Ответ 8

Не сдавайтесь. Linux может сделать это с помощью правильного оборудования через "USB-гаджеты". И давая следующие факты:

  • Мой старый Nokia N95 может использовать USB-устройство как "Mass Storage Device", "Media Player", "GSM-модем" или для печати фотографий.
  • Я могу подключить iPhone к iPad через пассивный адаптер Apple USB-Camera, и они передают изображения.
  • iPhone может быть очевидным в целом ряде вещей, например. когда они входят в DFU.

Почему все это имеет значение?

Потому что, если я писал linux-телефон, я знаю, что он будет делать, и как он это сделает. И ответ будет включать USB-гаджеты.

Чтение одной из ссылок, размещенных здесь,

Это ядро ​​Linux, код находится в драйверах/usb/gadget/в kernel.org, если вам интересно. У Android действительно есть несколько специфические гаджеты, которые не находятся в магистрали, но это не все столько. Вы можете увидеть все это, просто проверив свое ядро git дерево, не нужно беспокоить их разработчиков.

Я бы предположил, что у вас есть шанс на это - но это потребует перекомпиляции ядра/операционной системы Android или, по крайней мере, наличия среды сборки, в которой вы/могли бы/перестроить ядро, если хотите.

Кстати, у меня есть Atmel NGW100mkII, который поддерживает USB-гаджеты, но не поставляется с HID-модулем. И мне придется делать все выше и более.

Ответ 9

Это возможно, без каких-либо дополнительных драйверов.

Вы можете эмулировать клавиатуру USB ПК с помощью небольшого USB-устройства, а затем использовать устройство Android для отправки данных с клавиатуры (и/или мыши) по Bluetooth.

Взгляните на описательное видео в кампании Indiegogo: http://igg.me/at/hiDBLUE/x/3400885

BTW: технические документы продукта доступны здесь: http://www.flyfish-tech.com/hiDBLUE

Ответ 10

Вам нужно установить какое-то соединение, чтобы сделать этот андроид-вне коробки, например, через tcp/ip и adb, поэтому не стоит устанавливать по крайней мере adb и прослушиватель на компьютере.

Но если у вас есть активность, которая отправляет аппаратную клавиатуру, как данные через usb, то почему бы и нет? Не будет легко, я думаю. На этом этапе ответ на узвучный форум приходит сразу: "Почему бы вам не изменить свои планы и...":)

Ответ 11

Некоторые выяснили, что это неправильно. Тем временем я разделяю их мнение. Извините.

Старый НЕПРАВИЛЬНЫЙ ответ:

По-моему, это едва возможно.

Компьютер идентифицирует любое устройство USB с дескриптором устройства USB или дескриптором интерфейса USB. Чтобы иметь возможность использовать ваше устройство Android в качестве клавиатуры, вам придется изменить их. На самом деле, я думаю, что они сохранены на ПЗУ в устройстве, поэтому вам придется менять оборудование. Устройство должно идентифицировать себя с хостом, даже если его единственная зарядка в выключенном состоянии (должна сообщить компьютеру usb об энергопотреблении, в противном случае - всего несколько мА макс). Для меня это указывает на направление, что вам придется менять аппаратное обеспечение

"Самый простой" способ можно было бы собрать адаптер, содержащий чип хоста usb с μC, который преобразует полученные данные (которые вам все еще нужно было отправлять через usb) на сигналы ps/2 или usb-client, которые вы отправляете на компьютер.

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

Ответ 12

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

Вы можете заставить свой телефон работать так же, как клавиатура, мышь, камера, система потокового звука, модем. Короче говоря, что когда-либо USB гаджет вы видите на рынке и до тех пор, пока аппаратное обеспечение не ограничивает вас. Например, скорость или интерфейс гаджета недоступны.

USB-устройство бывает двух типов: хост и гаджет. Таким образом, устройство гаджета действует как клиент и обычно имеет интерфейс usb otg в большинстве телефонов. Таким образом, в конце гаджета вы можете заставить свой телефон вести себя как другое устройство, переключаясь между разными конфигурациями (вы уже делаете это, когда заходите в настройки usb и делаете ваше устройство запоминающим устройством или чем-то еще).

Но для всего этого вам нужно изменить ядро Android. Если вы разработчик устройства для Android, вы можете это сделать.

Ответ 13

У меня есть опыт работы здесь как пользователь. Наиболее очевидным решением является tcp/ip через модель клиент/сервер. Многие из инструментов, таких как airkeyboard (http://www.freenew.net/iPhone/air-keyboard-111/171415.htm), используют этот метод для создания замены клавиатуры и мыши с помощью смартфона os. Обратите внимание, что в реализации очевидны некоторые проблемы безопасности. Например, вы должны войти в систему, чтобы использовать компоненты сервера.

Другие кросс-платформенные инструменты (например, windows/mac, управляющие другим экземпляром Windows/Mac) используют аналогичный подход. См. Синергию: http://synergy-foss.org/