O que estou olhando:
Existe uma maneira de fazer com que o dispositivo afirme ser um teclado / HID quando conectado a uma porta USB e "digite" o conteúdo da área de transferência? Mais precisamente; O que seria necessário para que isso acontecesse?
Motivar caso de uso:
Eu tenho um programa de proteção de senhas no meu telefone, mas é irritante ter que ler a senha do dispositivo e tentar digitá-la em outro computador.
Fundo:
Eu tenho um dispositivo Android que foi construído antes do suporte ao MTP para transferência de arquivos, mas, com atualizações recentes, agora é compatível. Com base nisso, a classe USB que afirma ser não pode ser definida por hardware e deve ser definida em software.
IIRC, este projeto tem dispositivos Android (com o que eu acho que é um kernel padrão) falando como uma classe USB que definitivamente não foi incorporada. Isso indica para mim que você pode controlar quais classes USB ele suporta sem o trabalho do kernel, mas eu não tenho certeza.
Quanto ao lado do host (ou seja, o PC), nunca vi uma caixa de PC, Mac ou Linux precisar de unidades especiais para teclados, mesmo para alguns dispositivos esotéricos que afirmam ser teclados (scanners de código de barras, cartão de crédito e smart) leitores de cartões, etc.) para que os drivers genéricos sejam bons o suficiente para o que eu estou querendo.
Tudo isso argumenta que o que estou procurando pode ser feito do ponto de vista do hardware , mas diz muito pouco sobre o suporte a software existente e nada sobre se existe um aplicativo para ele.
Respostas:
Sim. Definitivamente, isso é possível, sem exigir modificações ou drivers no PC. Como o OP menciona, a identificação USB na extremidade do telefone é finalmente feita em software (neste arquivo https://github.com/android/kernel_msm/blob/android-msm-2.6.35/drivers/usb/gadget/composite .c ) e pode ser modificado para se identificar como um teclado USB padrão.
Essa mudança exigiria algumas coisas.
Havia um artigo publicado há alguns anos (intitulado Explorando a conectividade USB de smartphones para diversão e lucro ) que descrevia o uso de um telefone para forçar as telas de login de desktops. O método usado envolveu fazer o telefone aparecer como um teclado USB.
fonte
Isso não responde exatamente à sua pergunta, mas pode ajudar no seu caso de uso.
Talvez você queira dar uma olhada no InputStick . Será um pen drive USB emparelhado com o Android via Bluetooth. Conectado a um computador, ele emula um USB HID genérico para enviar pressionamentos de teclado. Uma API Java avançada também permitirá especificar descritores de dispositivos para emular funções não padrão. Poderia fornecer um bom exemplo de que é definido em software e não em hardware.
Para referência, o desenvolvedor também está trabalhando em programas de exemplo, como o Demo Password Manager.
fonte
No mínimo, isso exigiria software no telefone e no PC. Os dois pedaços de software teriam que se comunicar. Nada disso, que eu saiba atualmente, existe.
E para o PC pensar que o dispositivo é realmente um teclado, seria necessário um novo driver que informasse ao PC que o dispositivo é um teclado e como "usá-lo como um teclado".
Não estou dizendo que isso não seja possível, porque praticamente tudo é possível quando se trata de coisas assim. O que estou dizendo, porém, é que nada disso existe atualmente.
USB é hardware e software; se fosse apenas software, o mesmo driver USB funcionaria para todos os dispositivos Android no Windows, e esse não é o caso. O armazenamento em massa USB e o MTP são gerenciados pelos drivers no PC, não pelo dispositivo. Quais dispositivos suportam armazenamento em massa MTP e USB e ao mesmo tempo? Encontrei artigos informando que os dispositivos podem suportar UMS e MTP, mas apenas suportam UMS se houver um sdcard externo. Você não pode montar o sdcard externo com MTP e com UMS. MTP é para o armazenamento interno. E não li nada que possa confirmar ou negar que você possa usar os dois ao mesmo tempo.
Você não precisa instalar drivers para teclados, se eles seguirem a especificação "padrão", porque o Windows já possui os drivers. Existem teclados que vêm com seus próprios drivers. Como eu disse, seria possível. Não tenho certeza de como isso seria feito. Exigiria, quase certamente, um kernel personalizado, no mínimo, para que ele funcionasse como um teclado e nenhum driver adicional fosse necessário no lado do PC.
Além disso, concordo com @davidbb que isso é possível e já disse que é. O problema com uma pergunta perguntando se algo é possível, nunca resolve o problema. Seria como eu dizendo "é possível executar aplicativos iOS nativamente no Windows?". Isso é teoricamente possível, mas não há nada que faça isso agora e não há algo que um "usuário normal" (ou mesmo um usuário avançado) possa fazer para que isso aconteça. Este site é voltado para usuários, portanto, dizer que você só precisa escrever um kernel modificado não é uma resposta que beneficiará ninguém. Portanto, a resposta real para a pergunta é não, porque não existe um kernel modificado por aí.
fonte
Você já experimentou o Unified Remote . Esta é uma ótima ferramenta para usar o telefone como teclado e mouse. Ele não usa USB, mas Wi-Fi. Há um aplicativo no telefone e no computador que funciona em conjunto. Funciona muito bem para mim. Além disso, se você obtém a versão completa, obtém integração com muitos aplicativos comuns.
fonte
Eu estava procurando algo semelhante e encontrei
https://github.com/pelya/android-keyboard-gadget
Parece a mesma coisa que pode ser usada no seu caso. Em resumo, o que eu tenho é que você precisa escrever o driver usb no kernel do Android para detectar o dispositivo como HID.
fonte
É agora> seis anos depois e em algum lugar entre alguém criou o Keepass2 USB Keyboard Plugin para Keepass2Android .
Queria adicionar essas informações aqui por uma questão de exaustividade e porque achei essa pergunta sem resposta e o plug-in acima mencionado enquanto procurava exatamente algo assim.
Eu ainda não testei ...
fonte
O InputStick é um receptor USB sem fio, projetado para dispositivos Android. Ele permite que os aplicativos Android emulem muitos tipos diferentes de dispositivos, por exemplo: teclado USB, mouse USB, USB Gamepad e muito mais. Com o InputStick, os aplicativos Android podem fazer tudo o que um dispositivo físico pode: digitar, mover o ponteiro do mouse, controlar multimídia e jogos.
Informações podem ser encontradas em http://inputstick.com/
fonte