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 "escriba" el contenido del portapapeles? Con más precisión; ¿Qué se necesitaría para que esto suceda?
Caso de uso motivador:
Tengo un programa para guardar contraseñas 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 se creó antes de que MTP fuera compatible para transferir archivos pero, con actualizaciones recientes, ahora lo admite. Basado en esto, la clase de USB que dice ser no puede definirse por hardware y debe definirse en software.
IIRC, este proyecto tiene dispositivos Android (con lo que creo que es un kernel de serie) hablando como una clase de USB que definitivamente no fue incorporada. Esto me indica que podría controlar qué clases de USB admite sin el trabajo del kernel, pero yo No estoy seguro.
En cuanto al lado del host (es decir, la PC), nunca he visto una PC, Mac o Linux necesitan unidades especiales para teclados, incluso para algunos dispositivos bastante esotéricos que dicen ser teclados (escáneres de códigos de barras, tarjetas de crédito e inteligentes). lectores de tarjetas, etc.) por lo que los controladores genéricos deberían ser lo suficientemente buenos para lo que quiero.
Todo lo que sostiene es que lo que estoy buscando se puede hacer desde el punto de vista del hardware , pero dice muy poco sobre qué soporte de software existe y nada sobre si hay una aplicación para ello.
Respuestas:
Si. Esto es definitivamente posible, ya que no requiere modificaciones ni controladores en la PC. Como menciona el OP, la identificación del USB en el extremo del teléfono se realiza finalmente en software (en este archivo https://github.com/android/kernel_msm/blob/android-msm-2.6.35/drivers/usb/gadget/composite .c ), y podría modificarse para identificarse como un teclado USB estándar.
Este cambio requeriría un par de cosas.
Hubo un documento publicado hace un par de años (titulado Explotación de la conectividad USB de teléfonos inteligentes para divertirse y obtener ganancias ) que describía el uso de un teléfono para forzar pantallas de inicio de sesión de escritorio. El método que usaron implicó hacer que el teléfono apareciera como un teclado USB.
fuente
Esto no responde exactamente a su pregunta, pero podría ayudarlo en su caso de uso.
Tal vez quieras echar un vistazo a InputStick . Será una unidad de memoria USB que empareje con Android a través de Bluetooth. Conectado a una computadora, emula un USB HID genérico para enviar golpes de teclado. Una API Java avanzada también permitirá especificar, es decir, descriptores de dispositivos para emular funciones no estándar. Podría proporcionar un buen ejemplo de que está definido en software en lugar de hardware.
Como referencia, el desarrollador también está trabajando en programas de ejemplo, como un Administrador de contraseñas de demostración.
fuente
Como mínimo, esto requeriría tanto software en el teléfono como en la PC. Las 2 piezas de software tendrían que comunicarse entre sí. Nada de esto, que yo sepa actualmente, existe.
Y para que la PC piense que el dispositivo es realmente un teclado, requeriría un nuevo controlador que le diga a la PC que el dispositivo es un teclado y cómo "usarlo como teclado".
No estoy diciendo que no sea posible, porque casi todo es posible cuando se trata de cosas como esta. Sin embargo, lo que estoy diciendo es que nada de esto existe actualmente.
USB es tanto hardware como software, si fuera solo software, entonces el mismo controlador USB funcionaría para todos los dispositivos Android en Windows, y este no es el caso. El almacenamiento masivo USB y el MTP son manejados por los controladores en la PC, no por el dispositivo. ¿Qué dispositivos son compatibles con el almacenamiento masivo MTP y USB y al mismo tiempo? He encontrado artículos que indican que los dispositivos pueden admitir UMS y MTP, pero solo admiten UMS si hay una tarjeta sd externa. No puede montar la tarjeta sd externa con MTP y con UMS. MTP es para el almacenamiento interno. Y no he leído nada que pueda confirmar o negar que puede usar ambos al mismo tiempo.
No tiene que instalar controladores para teclados si siguen la especificación "predeterminada" 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 requerirá un núcleo personalizado como mínimo para que actúe como un teclado y no se necesiten controladores adicionales en el lado de la PC.
Además, estoy de acuerdo con @davidbb en que es posible y ya he dicho que sí. 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á dirigido a usuarios, por lo que decir que solo necesita escribir un kernel modificado no es una respuesta que vaya a beneficiar a nadie. Entonces, la verdadera respuesta a la pregunta es no, porque no hay un núcleo modificado por ahí.
fuente
¿Has probado Unified Remote ? Esta es una gran herramienta para usar el teléfono como teclado y mouse. No usa USB sino wifi en su lugar. Hay una aplicación para teléfono y computadora que funciona en conjunto. Funciona muy bien para mi. Además, si obtienes la versión completa, obtienes integración con muchas aplicaciones comunes.
fuente
Estaba buscando algo similar y encontré
https://github.com/pelya/android-keyboard-gadget
Parece que lo mismo puede usarse en su caso. En resumen, lo que obtuve es que tienes que escribir el controlador USB en el kernel de Android para detectar el dispositivo como HID.
fuente
Ahora> seis años más tarde, y en algún punto intermedio, alguien creó el complemento de teclado USB Keepass2 para Keepass2Android .
Quería agregar esta información aquí en aras de la integridad y porque encontré esta pregunta sin respuesta y el complemento mencionado anteriormente mientras buscaba exactamente algo así.
Todavía no lo he probado ...
fuente
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, mouse USB, gamepad USB y muchos más. Con InputStick, las aplicaciones de Android pueden hacer cualquier cosa que un dispositivo físico puede hacer: escribir, mover el puntero del mouse, controlar multimedia y juegos.
La información se puede encontrar en http://inputstick.com/
fuente