设备可以假装为USB键盘吗?


16

我在寻找什么:

有没有办法使设备在插入USB端口并“键入”剪贴板中的内容时声称自己是键盘/ HID?更精确地; 要实现它需要什么?

激励用例:

我的手机上有密码保存程序,但是必须从设备上读取密码并尝试将其输入另一台计算机上,这很烦人。

背景:

我有一个Android设备,该设备是在支持MTP传输文件之前构建的,但是随着最近的升级,现在支持它。基于此,它声称的USB类不能由硬件定义,而必须在软件中定义。

IIRC,这个项目有一些Android设备(我认为是普通内核)正在以某种USB类的形式说话,而这些USB类肯定不是内置的。这向我表明,您可以在不使用内核的情况下控制它支持的USB类,但是我不确定。

至于主机端(即PC),我从未见过PC,Mac或Linux机顶盒需要特殊的键盘驱动器,甚至对于某些声称是键盘的颇为神秘的设备(条形码扫描仪,信用卡和智能设备)也是如此。读卡器等),因此通用驱动程序应足以满足我的需求。

所有这些都表明我正在寻找的东西可以从硬件的角度来完成,但是很少说明存在什么软件支持,而对于是否有应用程序则什么也没有说。


2
您可以尝试在手机和计算机上同时使用KeePass(在Android上为KeePassDroid,在Linux上为keepassx等),然后在它们之间同步数据库文件,或者通过USB通过电话从计算机上访问数据库文件。其他密码管理器也可能具有“真实计算机”副本。
TREE 2012年

@TREE:在某些情况下可能可行,但是特定的目标用途之一是我无法在PC上安装某些东西(无法访问或出现鸡/蛋问题,例如系统登录密码) 。
BCS 2012年

还有KeePass的便携式版本,可以通过USB记忆棒运行。这可能在已安装的android USB存储设备上有效,但是肯定不能解决所有可能的用例。
TREE 2012年

Answers:


15

是。这绝对是可能的,不需要在PC上进行任何修改或驱动程序。如OP所述,电话端的USB识别最终由软件完成(在此文件中https://github.com/android/kernel_msm/blob/android-msm-2.6.35/drivers/usb/gadget/composite .c),可以对其进行修改以将其标识为标准USB键盘。

此更改将需要一些注意事项。

  1. 具有修补的USB驱动程序的修改后的内核
  2. 可以与经修改的USB驱动程序公开的某些界面进行通讯的Android应用。

一对夫妇几年前发表了一篇论文(题为的乐趣和利润开拓智能手机USB连接)使用手机蛮力桌面登录屏幕所描述。他们使用的方法涉及使手机显示为USB键盘。


这里可以找到更多信息。
sampablokuper 2014年

github.com/pelya/android-keyboard-gadget 它已经在这里实现了..并且还提供了所需的android应用
Abhigyan

2

这不能完全回答您的问题,但是在您的用例中可能会有所帮助。

也许您想看看InputStick。这将是一个USB拇指驱动器,您可以通过蓝牙与Android配对。插入计算机后,它会模拟通用USB HID以发送键盘击键。先进的Java API也将允许指定设备描述符来模拟非标准功能。它可以提供一个很好的示例,它是在软件而不是硬件中定义的。

作为参考,开发人员还正在研究示例程序,例如Demo Password Manager。


0

至少,这将需要手机和PC上都装有软件。这两个软件必须相互通信。我目前所知道的像这样的东西不存在。

而要让PC认为该设备确实是键盘,就需要一个新的驱动程序,该驱动程序将告诉PC该设备是键盘,以及如何“将其用作键盘”。

我并不是说这是不可能的,因为当涉及到这样的事情时,几乎任何事情都是可能的。我要说的是,目前没有这样的东西存在。

USB既是硬件又是软件,如果仅是软件,则相同的USB驱动程序适用于Windows上的所有android设备,事实并非如此。USB大容量存储和MTP由PC而非设备上的驱动程序处理。哪些设备同时支持MTP和USB大容量存储?我发现有文章指出设备可以支持UMS和MTP,但仅在有外部sdcard的情况下才支持UMS。您不能通过MTP和UMS安装外部sdcard。MTP用于内部存储。而且我还没有阅读任何可以确认或否认您可以同时使用两者的内容。

如果它们遵循“默认”规范,则不必安装用于键盘的驱动程序,因为Windows已经具有用于它的驱动程序。有些键盘带有自己的驱动程序。正如我所说,这是可能的。我不确定该怎么做。几乎可以肯定,它至少需要一个自定义内核,才能像键盘一样工作,而在PC端不需要其他驱动程序。

另外,我同意@davidbb的说法,这是可能的,我已经说过了。询问是否有可能的问题永远无法解决问题。就像我说“我可以在Windows上本地运行ios应用程序吗?”。从理论上讲这是可能的,但是现在什么也做不了,并且“普通用户”(甚至是高级用户)也无法做到这一点。这个站点是为用户准备的,所以说您只需要编写一个修改过的内核并不能使任何人受益。因此,对该问题的真正答案是“否”,因为那里没有经过修改的内核。


IIRC,USB连接的android端是通过软件完成的(在某种程度上,相同的硬件既要充当USB大容量存储设备又要充当MTP)。基于此,如何防止仅设备端驱动程序使设备宣布其自身为通用HID?如果可以做到,那么处理任何其他键盘的相同PC侧驱动程序将处理它(就像处理条形码扫描器和信用卡读取器之类的操作一样)。
BCS 2012年

我已经在我的回答中添加了您的评论。
瑞安·康拉德

在使用MTP之前构建的Android设备(硬件)现在作为MTP USB类运行,因此,该设备声称要运行的类必须在软件中定义。我不记得我是否曾经安装过键盘驱动程序(或者说用于连接Android设备的非通用驱动程序),因此不需要在PC端安装任何驱动程序。结合这些,我几乎可以肯定硬件可以做到。剩下的唯一问题是:现有的Android是否提供对所需旋钮的访问,还是需要构建自定义内核?
BCS 2012年

回复:第二次编辑。我想我正在寻找一个绝对知道会发生什么的人。(您可以将最后一段移到顶部吗?)
BCS 2012年

这个答案是错误的,在PC端不需要任何软件。不同的电话需要不同的驱动程序,因为制造商并不都使用相同的供应商ID号。但是,键盘属于设备的另一类,主机可以按类型识别键盘,因此供应商ID并不重要。VID / PID,设备类型,协议等都在android端的软件中实现,并且任何具有内核源代码和安装编译结果的方法都可以更改。
克里斯·斯特拉顿

0

您是否尝试过Unified Remote。这是将手机用作键盘和鼠标的绝佳工具。它不使用USB,而是使用wifi。手机和计算机上有一个可以协同工作的应用程序。对我来说很棒。另外,如果您获得完整版本,则可以与许多常见应用程序集成。


我正在寻找针对某些情况的解决方案,其中包括在BIOS启动提示中键入密码等问题,因此我无法真正安装任何类型的客户端。
BCS 2014年


0

现在已经超过六年了,介于两者之间的某个地方为Keepass2Android创建了Keepass2 USB键盘插件

出于完整性考虑,希望在此处添加此信息,因为我在搜索类似内容时发现此问题和上述插件均未得到解答

我还没有自己测试过...


-1

InputStick是为USB设备设计的无线USB接收器。它允许Android应用程序模拟许多不同种类的设备,例如:USB键盘,USB鼠标,USB游戏手柄等。借助InputStick,Android应用程序可以执行物理设备可以执行的任何操作:键入,移动鼠标指针,控制多媒体和游戏。

可以在http://inputstick.com/上找到信息


1
这听起来像是广告。您与此产品有什么关系?
Dan Hulme 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.