it-swarm.com.de

Ist es möglich, Android als physische USB-Tastatur zu fungieren?

Ich möchte wirklich wissen, ob es sich um ein Hardware- oder ein Softwareproblem handelt. Kann ich mein Android Telefon über USB an einen Computer anschließen und es als Hardwaretastatur verwenden? Ich möchte nichts auf dem Computer installieren. Ich möchte, dass Android sich wie die Standardhardware verhält.


Bearbeiten: Erläuterung Ich möchte ein Programm/eine Bibliothek für Android schreiben, die es dem Gerät ermöglicht, eine normale Tastatur vollständig zu emulieren, sodass das Betriebssystem sie als Standardtastaturgerät ausgibt und sie im BIOS funktioniert oder irgendwo anders, wo eine Tastatur funktioniert.

73
Billy Moon

Ich habe den Kernel auf Nexus 7 so geändert, dass er wie eine Standard-HID-Tastatur und -Maus funktioniert, ohne dass MTP/ADB/andere USB-Funktionen verloren gehen.

Sie können das Befehlszeilenprogramm "usb-gadget-test" verwenden, um Tastenanschläge und Mausbewegungen an Ihren PC zu senden. Ich möchte später eine Remote-Admin-App erstellen, die wichtige Ereignisse sendet und Videos von der Kamera empfängt.

Kernel-Patch, Binärdateien und Anweisungen: https://github.com/pelya/Android-keyboard-gadget

Bearbeiten: Ich habe eine richtige App für Google Play veröffentlicht Wenn Ihr Nexus 7 gerootet ist, können Sie den Kernel direkt von der App aus flashen und damit Tastendrücke senden.

38
pelya

Die meisten USB-Tastaturen benötigen Treiber. Für Tastaturfunktionen (nicht standardmäßige Tasten), die über die Funktionen der Standard-HID-Treiber hinausgehen, muss eine Software auf dem Computer installiert werden.

Abgesehen davon ist es möglich, die SB-Funktionen von Android zu verwenden und einen benutzerdefinierten Treiber zu schreiben, wenn die Standard-HID nicht ausreicht, um Ihr Ziel zu erreichen. Es ist wahrscheinlich ein sehr nicht triviales Unterfangen.

Bearbeiten: Ich denke, KristopherMicinski ist richtig, dass das Maß an Kontrolle, das Sie mit der Standard-USB-API Android erhalten, für diesen Zweck nicht ausreichend ist. Seine beiden Lösungen, die Firmware zu modifizieren, um mit HID-Standards zu kommunizieren, sowie ein Hardware-Mittelsmann, der vom Android Accessory-Protokoll zum HID übersetzt, scheinen mir beide gültig zu sein. Wenn die Installation von Treibern auf dem Computer nicht in Frage kommt, sind dies möglicherweise die einzigen beiden Optionen.

Wenn Sie jedoch bereit sind, einen Treiber für dieses Verhalten zu installieren, sollte es möglich sein, einen benutzerdefinierten Treiber zu schreiben, der das USB-Protokoll Android unterstützt und die Tastaturfunktionen korrekt in die richtigen Aufrufe/Interrupts umsetzt. Wenn Speicher zur Verfügung steht, musste auf jeder Peripherietastatur, die ich in den letzten 10 Jahren verwendet habe, ein Treiber installiert werden, um die volle Funktionalität zu gewährleisten. Dies kann daher als nicht standardmäßiges Verhalten angesehen werden. (Allerdings kann das Gerät bei diesem Ansatz nur als Tastatur in Windows verwendet werden, nicht während des Startvorgangs.)

13
Chris Bye

Es sieht so aus, als hätte es endlich jemand geschafft, es ist ein bisschen hässlich - aber hier ist es:

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

Sie müssen den Kernel neu kompilieren und ein wenig bearbeiten, und Sie verlieren teilweise die Funktionalität (den MDC?). Aber es ist geschafft.

Persönlich würde ich jetzt, da ich die "wahren Kosten" sehe, wahrscheinlich einen kleinen Adapter für einen Teency oder so zusammenstellen - vorausgesetzt, dass Android) über USB mit seriellen Geräten kommunizieren kann. Aber das basiert auf die Tatsache, dass ich ein Samsung habe und ein spezielles Kabel benötige, um eine USB-Verbindung herzustellen - kein zusätzlicher Schmerz, wenn ich ein kleines Gerät am Ende habe, wenn ich das verdammte Kabel trotzdem herumtragen muss.

11
Orwellophile

Scheint, als hätte jemand den Kernel gepatcht. Ich bin gerade auf einen Artikel mit dem Titel "Nutzung der USB-Konnektivität für Smartphones für Spaß und Gewinn" von Angelos Stavrou, Zhaohui Wang, Fakultät für Informatik, George Mason University, Fairfax, VA, gestoßen. (frei verfügbar durch googeln des obigen Titels). Hier untersuchen die beiden Forscher die Möglichkeit eines kompromittierten Android) Geräts, das den angeschlossenen PC steuert, indem sich das Android) Gerät als HID-Gerät (Tastatur) präsentiert. Als Proof-of-Concept scheint es, als hätten sie einen Kernel erfolgreich gepatcht und dabei genau das getan, was Sie wollen. Sie haben keine detaillierten Schritte angegeben, aber trotzdem zitiere ich nur, was sie gesagt haben, dass sie getan haben:

..... Wir haben einen speziellen USB-Gadget-Treiber zusätzlich zu der vorhandenen USB-Composite-Schnittstelle auf dem Android Linux-Kernel unter Verwendung der USB-Gadget-API für Linux [4] entwickelt. Das UGAL-Framework half uns bei der Implementierung eine einfache HID-Funktionalität (USB Human Interface Driver) (dh ein Gerätetreiber) und der Code, der zwischen den verschiedenen Kernel-APIs eingefügt wird. Unter Verwendung des Codes in: „drivers/usb/gadget/composite.c“ haben wir unseren eigenen Gadget-Treiber als erstellt Eine zusätzliche zusammengesetzte USB-Schnittstelle Dieser Treiber simuliert ein USB-Tastaturgerät. Wir können auch ein USB-Mausgerät simulieren, das vorprogrammierte Eingabebefehle an das Desktop-System sendet. Daher ist es einfach, sich als normales USB-Maus- oder Tastaturgerät auszugeben und zu senden vordefinierter Befehl zur heimlichen Simulation böswilliger interaktiver Benutzeraktivitäten Um diese Funktionalität zu überprüfen, senden wir in unseren kontrollierten Experimenten Schlüsselcode-Sequenzen, um nicht schwerwiegende Vorgänge auszuführen, und zeigen, wie ein derart manipuliertes Gerät Schäden verursachen kann Dell USB-Tastatur (VendorID = 413C, ProductID = 2105) sendet die Tastenkombination "STRG + ESC" und die Tasten "U" und "Eingabe", um den Computer neu zu starten. Beachten Sie, dass dies nur eine USB-Verbindung erfordert und das Recht "Aktueller Benutzer" auf dem Desktop-System erlangen kann. Mit dem zusätzlichen lokalen oder Remote-Exploit, der als Nutzlast gesendet wird, kann die Malware die Berechtigungen erweitern und vollen Zugriff auf das Desktopsystem erhalten.

5
JavaMan

Die einzige Möglichkeit, dies zu sehen, ist, wenn Sie:

  • änderte die Android Firmware, um Ihnen Zugriff auf USB-Ebene auf einer Ebene zu ermöglichen, die niedrig genug ist, dass Sie mit dem erforderlichen Protokoll arbeiten können

oder

  • Es wurde eine Art spezieller Hardware-Pegelwandler erstellt, den Sie an das Gerät angeschlossen haben.

(Ich nehme also an, je nachdem, wie viel Arbeit Sie erledigen möchten, könnte es sich um ein Hardwareoder Softwareproblem handeln.)

3

Ihr Android identifiziert sich bereits mit einer VID/PID, wenn es an einen Host angeschlossen ist. Es verfügt bereits über eine Schnittstelle für Massenspeicher. Sie müssten den Treiber auf einer niedrigen Ebene hacken, um eine zweite Schnittstelle für zu unterstützen 03:01 HID. Dann wäre es nur eine Frage des Pushings von Scancodes an den modifizierten Treiber. Dies wäre nicht einfach, aber es wäre ein ordentlicher Hack. Eine Verwendung wäre das Eingeben langer zufälliger Passwörter für Anmeldungen.

2
Renate

Dies ist möglich, ohne dass zusätzliche Treiber benötigt werden.

Sie können die USB-Tastatur des PCs mit einem kleinen USB-Dongle emulieren und dann mit Ihrem Gerät Android) Tastatur nd/oder Maus-) Daten über Bluetooth senden.

Schauen Sie sich das beschreibende Video in der Indiegogo-Kampagne an: --- (http://igg.me/at/hiDBLUE/x/3400885

Übrigens: Die technischen Produktdokumente finden Sie hier: http://www.flyfish-tech.com/hiDBLUE

2
Ivanz

Ich glaube, dass Sie es tun können, wenn Sie ein gerootetes Gerät mit einem aktuellen Android haben. Der Asus Eee Pad Transformer mit Android 4 verfügt beispielsweise über die Bibliotheken /system/lib/libusb.so Und /system/lib/libusbhost.so, Sodass Sie eine Java - Anwendung schreiben können, die sie mit JNI zum Emulieren aufruft eine USB-Tastatur. Das bedeutet, dass Sie einen C-Code schreiben müssen, der die Kommunikation einer USB-Tastatur mit einem PC nachahmt (= Sie müssen die Funktionsweise des USB-Protokolls untersuchen).

Ich sage "rooted", da normalerweise einige Berechtigungen erforderlich sind, um diese Bibliotheken zu verwenden.

Bearbeiten: Das oben Gesagte gilt, wenn Sie ein Android -Gerät als USB-Host programmieren. In Ihrem Fall müssen Sie ein "Gadget" sein. Ich weiß nicht, wie viel von der Linux-Gadget-Funktionalität im Kernel Ihres Android Geräts enthalten ist. Siehe this für eine ähnliche Frage.

2
gfour

Gib nicht auf. Linux kann dies mit der richtigen Hardware über "USB-Gadgets" tun. Und geben Sie die folgenden Fakten:

  1. Mein altes Nokia N95 könnte USB als "Massenspeichergerät", "Media Player", "GSM-Modem" oder zum Drucken von Fotos verwenden.
  2. Ich kann ein iPhone über den Apple USB-Kamera passiven Adapter an ein iPad anschließen und sie übertragen Bilder.
  3. das iPhone kann offensichtlich eine Reihe von Dingen darstellen, z. wenn sie in die DFU gehen.

Warum ist das alles relevant?

Denn wenn ich schrieb ein Linux-Telefon Ich weiß, was es tun würde und wie es es tun würde. Und die Antwort würde USB-Gadgets beinhalten.

Lesen Sie einen der Links, die hier gepostet wurden,

Es ist der Linux-Kernel, der Code befindet sich bei Interesse unter drivers/usb/gadget/im kernel.org-Baum. Android hat ein paar spezielle Gadget-Patches, die nicht in der Hauptnachricht enthalten sind, aber es ist nicht so viel. Sie können all dies sehen, indem Sie einfach ihren Kernel-Git-Baum überprüfen, ohne sich darum kümmern zu müssen Entwickler.

Ich würde vermuten, dass Sie einen Versuch haben würden - aber es würde das Neukompilieren des Android) - Kernels/Betriebssystems beinhalten - oder zumindest eine Build - Umgebung, in der Sie den Kernel erstellen könnten/könnten, wenn du wolltest.

Übrigens habe ich ein Atmel NGW100mkII, das USB-Geräte unterstützt, aber nicht mit dem HID-Modul geliefert wird. Und ich werde das oben Genannte und mehr tun müssen.

2
Orwellophile

Einige andere haben herausgefunden, dass dies falsch ist. In der Zwischenzeit teile ich ihre Meinung. Es tut mir Leid.

Alt FALSCH Antwort:

Meiner Meinung nach ist das kaum möglich.

Ihr Computer identifiziert jedes USB-Gerät anhand des USB-Geräte-Deskriptors oder des USB-Schnittstellen-Deskriptors. Um Ihr Android Gerät als Tastatur verwenden zu können, müssten Sie diese ändern. Eigentlich denke ich, dass diese auf einem ROM im Gerät gespeichert sind, Das Gerät muss sich mit dem Host identifizieren, auch wenn es nur im ausgeschalteten Zustand aufgeladen wird (muss dem USB-Host den Stromverbrauch mitteilen, ansonsten nur einige mA max.) die richtung, dass man die hardware wechseln müsste

"Einfachste" Möglichkeit wäre wahrscheinlich die Montage eines Adapters, der einen USB-Host-Chip mit einem µC enthält, der die empfangenen Daten (die Sie noch über USB senden mussten) in PS/2- oder USB-Client-Signale umwandelt, die Sie an den Computer senden.

Meiner Meinung nach wäre der einfachste Weg: Kaufen Sie eine dieser Tastaturen, die Sie rollen und auch in Ihre Tasche stecken können.

1
Martze

Ich bin etwas spät dran, um mich zu dieser Frage zu äußern, aber es könnte für einige andere Leute nützlich sein.

Sie können Ihr Android Telefon so einrichten, dass es wie eine Tastatur, eine Maus, eine Kamera, ein Sound-Streaming-System oder ein Tethering-Gerät funktioniert. Kurz gesagt, was auch immer für ein USB-Gerät Sie auf dem Markt sehen und bis und bis Hardware Sie nicht einschränkt. Wie Geschwindigkeit oder Gadget-Schnittstelle nicht verfügbar.

Es gibt zwei Arten von USB-Geräten: Host und Gadget. Das Gerät verhält sich also wie ein Client und verfügt in den meisten Telefonen über eine USB-Schnittstelle. Im Gadget End können Sie Ihr Telefon so einstellen, dass es sich wie ein anderes Gerät verhält, indem Sie zwischen verschiedenen Konfigurationen wechseln.

Aber dafür müssen Sie den Android Kernel ändern. Wenn Sie ein Android Geräteentwickler sind, können Sie dies auf jeden Fall tun.

1
Abhishek

Sie müssen eine Verbindung herstellen, um Android-Out-of-the-Box-Funktionen wie TCP/IP und ADB ausführen zu können. Sie müssen also nicht mindestens ADB und einen Listener auf dem Computer installieren.

Aber wenn Sie eine Aktivität haben, die die Hardwaretastatur wie Daten über USB sendet, warum dann nicht? Wird wohl nicht einfach sein. An diesem Punkt kommt die Antwort des Usuas-Forums sofort: "Warum änderst du nicht deine Pläne und ..." :)

1
Bondax

Ich habe hier einige Erfahrungen als Benutzer. Die naheliegendste Lösung ist über TCP/IP über ein Client/Server-Modell. Viele der verfügbaren Tools, z. B. das Airkeyboard (http://www.freenew.net/iPhone/air-keyboard-111/171415.htm), verwenden diese Methode zum Erstellen eines Tastatur-/Mausersatzes unter Verwendung eines Smartphone-Betriebssystems. Beachten Sie, dass bei der Implementierung einige Sicherheitsprobleme auftreten. Beispielsweise müssen Sie angemeldet sein, um die Serverkomponenten nutzen zu können.

Andere plattformübergreifende Tools (z. B. Windows/Mac, die eine andere Windows/Mac-Instanz steuern) verwenden einen ähnlichen Ansatz. Siehe synergy: http://synergy-foss.org/

0
JasonG