18 votos

¿Puede un dispositivo pretender ser un teclado USB?

Lo que estoy buscando:

¿Hay alguna manera de hacer que el dispositivo afirme ser un teclado/HID cuando se conecta a un puerto USB y "escribe" el contenido del portapapeles? Más exactamente; ¿Qué haría falta para que eso ocurriera?

Caso de uso motivador:

Tengo un programa para guardar la contraseña en mi teléfono, pero es molesto tener que leer la contraseña del dispositivo e intentar escribirla en otra computadora.

Antecedentes:

Tengo un dispositivo Android que fue construido antes de que el MTP fuera soportado para la transferencia de archivos pero, con las recientes actualizaciones, ahora lo soporta. Basado en esto, la clase de USB que dice ser no puede ser definida por hardware y debe ser definida por software.

IIRC, este proyecto tiene dispositivos Android (con lo que creo que es un núcleo de reserva) hablando como una clase de USB que definitivamente no fue incorporado. Esto me indica que podría ser capaz de controlar qué clases de USB soporta sin que el kernel funcione, pero no estoy seguro.

En cuanto al lado del anfitrión (es decir, el PC), nunca he visto que una caja de PC, Mac o Linux necesite unidades especiales para los teclados, incluso para algunos dispositivos más bien esotéricos que dicen ser teclados (escáneres de códigos de barras, lectores de tarjetas de crédito y de tarjetas inteligentes, etc.), así que los controladores genéricos deberían ser lo suficientemente buenos para lo que yo quiero.

Todo lo que argumenta que lo que estoy buscando se puede hacer desde el punto de vista del hardware pero dice muy poco sobre el soporte de software que existe y nada sobre si hay una aplicación para ello.

2 votos

Podrías intentar usar KeePass (KeePassDroid en Android, keepassx en linux, etc.) tanto en tu teléfono como en tu ordenador, y simplemente sincronizar el archivo de la base de datos entre ellos, o acceder al archivo de la base de datos en el teléfono vía USB desde el ordenador. Otros gestores de contraseñas también pueden tener homólogos en el "ordenador real".

0 votos

@TREE: Eso podría funcionar para algunos casos, pero uno de los usos específicos es cuando no tengo la capacidad de instalar algo en el PC (ya sea sin acceso o un problema de huevo/pollo como las contraseñas de inicio de sesión del sistema).

0 votos

también hay una versión portátil de KeePass que puede ejecutarse desde una memoria USB. Este puede funcionan desde un dispositivo de almacenamiento USB Android montado, pero ciertamente no aborda todos los casos de uso posibles.

15voto

Michael Burr Puntos 181287

Sí. Esto es definitivamente posible, sin necesidad de modificaciones o controladores en el PC. Como menciona la OP, la identificación del USB en el extremo del teléfono se hace en última instancia en el software (en este archivo https://github.com/Android/kernel_msm/blob/Android-msm-2.6.35/drivers/usb/gadget/composite.c ), y podría ser modificado para identificarse como un teclado USB estándar.

Este cambio requeriría un par de cosas.

  1. Un kernel modificado con un controlador USB parcheado
  2. Una aplicación para Android que podría hablar con alguna interfaz expuesta por el controlador USB modificado.

Había un artículo publicado hace un par de años (titulado Explotar la conectividad USB de los teléfonos inteligentes por diversión y beneficio ) que describía el uso de un teléfono para forzar las pantallas de acceso al escritorio. El método que usaron implicaba hacer que el teléfono apareciera como un teclado USB.

0 votos

Más información aquí .

0 votos

github.com/pelya/Android-keyboard-gadget Se ha implementado aquí .. y la aplicación necesaria para Android también está disponible

2voto

Mini-Me Puntos 1

Esto no responde exactamente a tu pregunta, pero podría ayudar en tu caso de uso.

Tal vez quieras echar un vistazo a InputStick . Será una unidad USB que se conecta a Android por Bluetooth. Conectado a una computadora emula un HID USB genérico para enviar golpes de teclado. Un avanzado API Java también permitirá especificar, por ejemplo, descriptores de dispositivos para emular funciones no estándar. Podría proporcionar un buen ejemplo de que se define en el software en lugar de en el hardware.

Como referencia, el desarrollador también está trabajando en programas de ejemplo, como un Administrador de contraseñas de demostración.

0voto

mercutio Puntos 5828

Como mínimo, esto requeriría tanto el software del teléfono como el del PC. Las dos piezas de software tendrían que comunicarse entre sí. Nada como esto, que yo sepa actualmente, existe.

Y para que el PC piense que el dispositivo es realmente un teclado, se necesitaría un nuevo controlador que le dijera al PC que el dispositivo es un teclado, y cómo "usarlo como un teclado".

No digo que no sea posible, porque casi todo es posible cuando se trata de cosas como esta. Lo que digo, sin embargo, es que nada de esto existe, actualmente.

El USB es tanto hardware como software, si fuera sólo software, entonces el mismo controlador USB funcionaría para todos los dispositivos Android en Windows, y este no es el caso. El almacenamiento masivo de USB y el MTP son manejados por los controladores de la PC, no por el dispositivo. Qué dispositivos son compatibles con el almacenamiento masivo de MTP y USB y al mismo tiempo? He encontrado artículos en los que se afirma que los dispositivos pueden soportar UMS y MTP, pero sólo soportan UMS si hay una tarjeta sdcard externa. No se puede montar la tarjeta sdcard externa con MTP y con UMS. El MTP es para el almacenamiento interno. Y no he leído nada que pueda confirmar o negar que se pueden usar ambos al mismo tiempo.

No es necesario instalar controladores para los teclados, si siguen la especificación "por defecto" porque Windows ya tiene los controladores para ello. Hay teclados que vienen con sus propios controladores. Como dije, sería posible. No estoy seguro de cómo se haría. Es casi seguro que se necesitaría un núcleo personalizado como mínimo para que actuara como un teclado y no se necesitarían controladores adicionales en el lado del PC.

Además, estoy de acuerdo con @davidbb en que es posible y ya he dicho que lo es. El problema con una pregunta que pregunta si algo es posible, nunca resuelve el problema. Sería como si yo dijera "¿es posible para mí ejecutar aplicaciones ios de forma nativa en Windows?". Esto es teóricamente posible, pero no hay nada que haga esto ahora y no hay algo que un "usuario normal" (o incluso un usuario avanzado) pueda hacer para que esto suceda. Este sitio está orientado a los usuarios, así que decir que sólo hay que escribir un núcleo modificado no es una respuesta que vaya a beneficiar a nadie. Así que la verdadera respuesta a la pregunta es no, porque no hay un núcleo modificado por ahí.

0 votos

Según tengo entendido, el extremo de Android de la conexión USB se realiza por software (tiene que ser así hasta cierto punto para que el mismo hardware actúe tanto como dispositivo de almacenamiento masivo USB como MTP). Basándonos en esto, ¿qué impide que un controlador sólo del lado del dispositivo haga que éste se anuncie como un HID genérico? Si eso se puede hacer, entonces los mismos controladores del lado del PC que manejan cualquier otro teclado lo manejarán (al igual que se hace con cosas como escáneres de códigos de barras y lectores de tarjetas de crédito).

0 votos

He añadido a mi respuesta para abordar su comentario.

0 votos

Los dispositivos Android (hardware) que se construyeron antes de que se utilizara MTP ahora funcionan como la clase MTP USB, por lo que las clases que el dispositivo dice funcionar deben definirse en el software. No recuerdo si he siempre instaló un controlador para un teclado (o para el caso un controlador no genérico para conectar un dispositivo Android) por lo tanto no debería ser necesario instalar nada del lado del PC. Combinar esos y estoy casi seguro de que el hardware puede hacerlo. La única pregunta que queda es: ¿ofrece Android de serie acceso a los mandos necesarios, o habría que construir un kernel personalizado?

0voto

çağdaş Puntos 10552

¿Has intentado Remoto unificado . Esta es una gran herramienta para usar el teléfono como teclado y ratón. No usa USB sino wifi en su lugar. Hay una aplicación en el teléfono y en el ordenador que funcionan juntos. Funciona muy bien para mí. Además, si obtienes la versión completa, te integras con muchas aplicaciones comunes.

0 votos

Estoy buscando una solución para los casos que incluyen cosas como escribir contraseñas en los avisos de arranque de la BIOS para no poder instalar ningún tipo de cliente.

-1voto

user3776541 Puntos 1

InputStick es un receptor USB inalámbrico, diseñado para dispositivos Android. Permite que las aplicaciones de Android emulen muchos tipos diferentes de dispositivos, por ejemplo: Teclado USB, Ratón USB, Gamepad USB y muchos más. Con InputStick, las aplicaciones de Android pueden hacer todo lo que un dispositivo físico puede hacer: escribir, mover el puntero del ratón, controlar multimedia y juegos.

La información se puede encontrar en http://inputstick.com/

1 votos

Esto parece un anuncio. ¿Cuál es su relación con este producto?

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X