web-dev-qa-db-fra.com

Est-il possible de programmer Android pour agir en tant que clavier USB physique?

Ce que je veux vraiment savoir, c'est s'il s'agit d'un problème matériel ou d'un problème logiciel. Pourrais-je brancher mon téléphone Android à un ordinateur via USB et le laisser agir comme un clavier matériel. Je ne veux rien installer sur l'ordinateur, je veux que Android se comporte comme le matériel standard.


Édition: Clarification Je veux écrire un programme/une bibliothèque pour Android qui permet au périphérique d’émuler complètement un clavier ordinaire, de sorte que le système d’exploitation le signale comme un périphérique de clavier standard et que cela fonctionnerait dans le BIOS. ou n'importe où ailleurs qu'un clavier fonctionne.

73
Billy Moon

J'ai modifié le noyau sur Nexus 7 pour qu'il agisse comme un clavier et une souris HID standard, sans perdre les fonctionnalités MTP/ADB/autres clés USB.

Vous pouvez utiliser l'utilitaire de ligne de commande usb-gadget-test pour envoyer des frappes au clavier et des mouvements de souris à votre PC. Je souhaite créer ultérieurement une application d'administration à distance, qui enverra des événements clés et recevra une vidéo de la caméra.

Correctif de noyau, fichiers binaires et instructions: https://github.com/pelya/Android-keyboard-gadget

Modifier: j'ai publié une application appropriée sur Google Play , si votre Nexus 7 est enraciné, vous pouvez afficher le noyau directement à partir de l'application et envoyer des pressions de touche.

38
pelya

La plupart des claviers USB ont besoin de pilotes pour fonctionner. Toute fonctionnalité du clavier (boutons non standard) allant au-delà des capacités de pilotes HID standard devra installer certains logiciels sur l’ordinateur.

Cela étant dit, il est peut-être possible d'utiliser fonctionnalités USB d'Android, ainsi que d'écrire un pilote personnalisé si le HID par défaut n'est pas suffisant pour atteindre votre objectif. C'est probablement une entreprise très non triviale.

Edit: Je pense que KristopherMicinski a raison de dire que le niveau de contrôle que vous obtenez avec le stock Android L’API USB est inadéquate à cet effet. Ses deux solutions de modification du micrologiciel pour communiquer à l’aide des normes HID, ainsi en tant qu'intermédiaire matériel qui traduit à partir du Android, le protocole accessoire à HID me semble valable. Si l'installation de pilotes sur l'ordinateur est hors de question, il se peut que ce ne soient que deux options.

Cependant, si vous êtes prêt à installer un pilote pour ce problème, il devrait être possible d'écrire un pilote personnalisé pouvant gérer Android USB) et traduire correctement les appels/interruptions corrects pour Fonctionnalité du clavier: si la mémoire est suffisante, tous les périphériques de clavier que j'ai utilisés au cours des 10 dernières années ont dû installer un pilote pour bénéficier de toutes les fonctionnalités, de sorte que ce comportement peut ne pas être considéré comme un comportement non standard. permettre au périphérique de fonctionner comme un clavier à l'intérieur de Windows, pas pendant le processus de démarrage)

13
Chris Bye

On dirait que quelqu'un l'a finalement fait, c'est un peu moche - mais le voici:

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

Cela implique une recompilation du noyau et un peu d’édition, et vous perdez une fonctionnalité partielle (le MDC?) .. mais c’est fait.

Personnellement, maintenant que je vois le "coût réel", je mettrais probablement ensemble un petit adaptateur sur un Teency ou quelque chose du genre - en supposant que Android puisse communiquer avec des périphériques série via USB. sur le fait que j’ai un samsung, et qu’il me faudrait de toute façon un câble spécial pour établir une connexion USB - pas de problème supplémentaire d’avoir un petit appareil à la fin, si je dois transporter ce foutu câble de toute façon.

11
Orwellophile

On dirait que quelqu'un l'a fait en corrigeant le noyau. Je viens de tomber sur un article intitulé "Exploiter la connectivité USB du téléphone intelligent pour le plaisir et le profit" par Angelos Stavrou, Zhaohui Wang, Département d'informatique, Université George Mason, Fairfax, VA. (disponible librement en googlant le titre ci-dessus). Ici, les deux chercheurs étudient la possibilité d’un dispositif Android) compromis contrôlant le PC connecté en disposant le périphérique Android se présentant comme un périphérique HID (clavier). Pour preuve de concept, il semble qu'ils aient corrigé avec succès un noyau en faisant exactement ce que vous voulez. Ils n'ont pas fourni les étapes détaillées mais, de toute façon, je cite simplement ce qu'ils ont dit avoir fait:

..... nous avons développé un pilote de gadget USB spécial en plus de l'interface composite USB existante sur le noyau Linux Android) à l'aide de l'API de gadget USB pour Linux [4]. Le framework UGAL nous a aidés à mettre en œuvre une simple fonctionnalité USB (HID) du pilote d'interface utilisateur (pilote de périphérique) et le code collant entre les différentes API du noyau. A l'aide du code fourni dans: "drivers/usb/gadget/composite.c", nous avons créé notre propre pilote de gadget en tant que une interface USB composite supplémentaire. Ce pilote simule un clavier USB. Nous pouvons également simuler une souris USB qui envoie une commande d'entrée préprogrammée au système de bureau. Il est donc facile de se faire passer pour une souris ou un clavier USB normal et d'envoyer Commande prédéfinie furtivement pour simuler des activités utilisateur interactives malveillantes Pour vérifier cette fonctionnalité, dans le cadre de nos expériences contrôlées, nous envoyons des séquences de codes clés permettant d'effectuer des opérations non fatales et de montrer en quoi un tel appareil manipulé peut causer des dommages. Clavier USB Dell (vendorID = 413C, productID = 2105) envoie la combinaison de touches "CTRL + ÉCHAP" et la séquence de touches "U" et "Entrée" pour redémarrer l'ordinateur. Notez que cela nécessite uniquement une connexion USB et peut obtenir le privilège "utilisateur actuel" sur le système de bureau. Avec l'exploit supplémentaire local ou distant envoyé sous la forme d'une charge utile, le programme malveillant peut élever le privilège et obtenir un accès complet au système de bureau.

5
JavaMan

La seule façon pour moi de voir cela possible est si vous:

  • modifié le firmware Android pour vous donner un accès au niveau USB à un niveau suffisamment bas pour que vous puissiez utiliser le protocole nécessaire

ou

  • Faites une sorte de convertisseur de niveau de matériel spécial que vous avez attaché à l'appareil.

(Je suppose donc que, selon le travail que vous souhaitez effectuer, il pourrait s'agir d'un problème matériel o logiciel).

3

Votre Android s’identifie déjà avec un VID/PID lorsqu’il est branché sur un hôte. Il possède déjà une interface pour le stockage de masse. Vous devrez pirater le pilote à un niveau bas pour prendre en charge une deuxième interface pour 03:01 HID. Il ne s’agirait alors que d’envoyer des scancodes au pilote modifié. Ce ne serait pas simple, mais ce serait un hack génial, notamment pour taper de longs mots de passe aléatoires pour les connexions.

2
Renate

Ceci est possible sans aucun pilote supplémentaire.

Vous pouvez émuler le clavier USB d'un PC avec un petit périphérique de la taille d'une clé USB, puis utiliser votre périphérique Android pour envoyer des données de clavier (et/ou de souris) via Bluetooth.

Regardez une vidéo descriptive dans la campagne Indiegogo: http://igg.me/at/hiDBLUE/x/3400885

BTW: La documentation technique du produit est disponible ici: http://www.flyfish-tech.com/hiDBLUE

2
Ivanz

Je crois que vous pouvez le faire si vous avez un appareil enraciné avec un Android récent. Par exemple, le Asus Eee Pad Transformer sous Android 4 a les bibliothèques /system/lib/libusb.so et /system/lib/libusbhost.so, afin que vous puissiez écrire une application Java) qui les appelle à l'aide de JNI pour émuler un clavier USB. Cela signifie que vous devez écrire du code glue C qui émule la manière dont un clavier USB communique un PC (= vous devez étudier le fonctionnement du protocole USB).

Je dis "enracinée", car certaines autorisations sont généralement nécessaires pour utiliser ces bibliothèques.

Edit: Ce qui précède est vrai lorsque vous programmez un périphérique Android pour qu’il agisse en tant qu’hôte USB, dans votre cas, vous devez être un "gadget". Je ne sais pas combien de gadget Linux. la fonctionnalité est contenue dans le noyau de votre Android appareil. Voir this pour une question similaire.

2
gfour

N'abandonne pas. Linux peut le faire avec le bon matériel, via "USB Gadgets". Et en donnant les faits suivants:

  1. Mon ancien Nokia N95 pourrait utiliser son clé USB pour devenir un "périphérique de stockage de masse", un "lecteur multimédia", un "modem GSM" ou pour imprimer des photos.
  2. Je peux brancher un iPhone sur un iPad via un adaptateur passif USB-Camera Apple), et ils transfèrent les images.
  3. l'iPhone peut évidemment être présent sous forme d'un certain nombre de choses, par exemple. quand ils vont dans DFU.

Pourquoi tout cela est-il pertinent?

Parce que si j'écrivais un téléphone Linux je sais ce que cela ferait et comment il le ferait. Et la réponse impliquerait des gadgets USB.

En lisant un des liens qui a été posté ici,

C'est le noyau Linux, le code est dans drivers/usb/gadget/dans l'arborescence kernel.org si vous êtes intéressé. Android contient quelques correctifs de gadget spécifiques qui ne figurent pas dans la ligne principale, mais ce n’est pas tant que ça. Vous pouvez voir tout cela en vérifiant simplement l’arbre git de leur noyau, inutile de déranger leur ordinateur. développeurs.

Je suppose que vous auriez une chance, mais cela impliquerait de recompiler le noyau/système d'exploitation Android) - ou du moins de disposer d'un environnement de construction dans lequel vous pourriez/reconstruire le noyau si tu voulais.

BTW, j'ai un Atmel NGW100mkII, qui supporte les gadgets USB, mais n'est pas livré avec le module HID. Et je vais devoir faire ce qui précède et plus encore.

2
Orwellophile

D'autres ont compris que c'était faux. En attendant, je partage leur opinion. Je suis désolé.

Ancien FAUX réponse:

A mon avis, c'est à peine possible.

Votre ordinateur identifie tout périphérique USB avec le descripteur de périphérique USB ou le descripteur d’interface USB. Pour pouvoir utiliser votre appareil Android comme clavier, vous devez le changer. En fait, je pense que ces éléments sont enregistrés sur un ROM de l'appareil, L’appareil doit s’identifier lui-même avec l’hôte même si son seul chargement est à l’état désactivé (doit indiquer à l’usb usb la consommation électrique, sinon seulement quelques mA maxi). la direction, que vous auriez à changer le matériel

La manière la plus "simple" serait probablement d'assembler un adaptateur contenant une puce hôte USB avec un µC qui convertit les données reçues (que vous devez encore envoyer via USB) en signaux ps/2 ou usb-client que vous envoyez à l'ordinateur.

A mon avis, le moyen le plus simple serait d'acheter un de ces claviers que vous pouvez rouler et de les mettre dans votre sac.

1
Martze

Je suis un peu en retard pour commenter cette question, mais cela pourrait être utile pour d'autres personnes.

Vous pouvez faire en sorte que votre téléphone Android fonctionne comme un clavier, une souris, un appareil photo, un système de streaming audio, un dispositif de modem. En bref, quel que soit le gadget USB que vous voyez sur le marché et jusqu'à comme la vitesse ou l’interface du gadget non disponible.

Le périphérique USB est de deux types, hôte et gadget. Donc, le gadget agit comme un client et possède généralement une interface USB dans la plupart des téléphones. Ainsi, à la fin du gadget, vous pouvez modifier le comportement de votre téléphone en changeant de configuration (vous le faites déjà lorsque vous entrez dans les paramètres USB et que vous faites de votre appareil un périphérique de stockage de masse ou autre).

Mais pour faire tout cela, vous devez modifier Android le noyau. Si vous êtes un développeur Android, vous pouvez le faire.

1
Abhishek

Vous devez établir une sorte de connexion pour utiliser cet appareil Android immédiatement, comme via tcp/ip et adb, afin de ne pas installer au moins l’adb et l’auditeur sur votre ordinateur.

Mais si vous avez une activité qui envoie le clavier matériel comme des données via USB, pourquoi pas? Ce ne sera pas facile je suppose. À ce stade, la réponse du forum Usuas est immédiate: "Pourquoi ne modifiez-vous pas vos plans et ...." :)

1
Bondax

J'ai une certaine expérience ici en tant qu'utilisateur. La solution la plus évidente consiste à utiliser tcp/ip via un modèle client/serveur. De nombreux outils tels que airkeyboard (http://www.freenew.net/iPhone/air-keyboard-111/171415.htm) utilisent cette méthode pour créer un remplacement de clavier/souris à l'aide d'un système d'exploitation de smartphone. Notez que certains problèmes de sécurité apparaissent lors de la mise en œuvre. Par exemple, vous devez être connecté pour utiliser les composants du serveur.

D'autres outils multiplateformes (Windows/Mac contrôlant une autre instance de Windows/Mac) utilisent une approche similaire. Voir synergie: http://synergy-foss.org/

0
JasonG