我真正想知道的是硬件问题还是软件问题。我可以将我的Android手机通过USB插入计算机,并使其充当硬件键盘。我不想在计算机上安装任何东西,我希望android表现得像标准硬件一样。
编辑:澄清我想为Android编写程序/库,使设备能够完全模拟普通键盘,以便操作系统将其报告为标准键盘设备,并且它将在BIOS或键盘的其他任何地方工作作品。
我真正想知道的是硬件问题还是软件问题。我可以将我的Android手机通过USB插入计算机,并使其充当硬件键盘。我不想在计算机上安装任何东西,我希望android表现得像标准硬件一样。
编辑:澄清我想为Android编写程序/库,使设备能够完全模拟普通键盘,以便操作系统将其报告为标准键盘设备,并且它将在BIOS或键盘的其他任何地方工作作品。
Answers:
我修改了Nexus 7上的内核,使其像标准的HID键盘和鼠标一样,而不会丢失MTP / ADB /其他USB功能。
您可以使用usb-gadget-test命令行实用程序将击键和鼠标移动发送到PC。我想稍后创建一个远程管理应用程序,它将发送关键事件并从摄像机接收视频。
内核补丁,二进制文件和说明:https : //github.com/pelya/android-keyboard-gadget
编辑:我已经将适当的应用发布到Google Play上,如果您的Nexus 7已植根,则可以直接从该应用中刷新内核,并发送按键。
大多数USB键盘需要驱动程序才能运行。超出标准HID驱动程序功能的任何键盘功能(非标准按钮)都需要在计算机上安装某些软件。
话虽如此,也许可以使用Android的USB功能如果默认的HID不足以实现您的目标以及编写自定义驱动程序。这可能是一项非常艰巨的任务。
编辑:我认为KristopherMicinski是正确的,您使用现有的Android USB API获得的控制级别不足以实现此目的。他对固件进行修改以使用HID标准进行通信的两种解决方案,以及将Android附件协议转换为HID的硬件中间商,对我来说都是有效的。如果无法在计算机上安装驱动程序,则这可能是仅有的两个选项。
但是,如果您愿意为此安装驱动程序,则应该可以编写一个可处理Android USB协议的自定义驱动程序,并将其正确转换为正确的键盘功能调用/中断。如果有足够的内存,我在过去十年中使用的每个外围键盘都需要安装驱动程序以实现全部功能,因此这可能不被视为非标准行为。(尽管只是发生了这种方法,仅允许设备在Windows中充当键盘,而不是在启动过程中)
看起来好像有人终于做到了,这有点丑陋-但这是:
http://forum.xda-developers.com/showthread.php?t=1871281
它涉及到一些内核重新编译和一些编辑,并且您失去了部分功能(MDC?)..但这已经完成。
不过,就我个人而言,既然我看到了“真正的成本”,我可能会在Teency或类似设备上组装一个小适配器-假设Android可以通过USB与串行设备通信。但这是基于以下事实:我拥有三星,并且无论如何都需要一条特殊的电缆来建立USB连接-如果我无论如何都要带那根该死的电缆,那么在终端上放一点设备就不会感到额外的痛苦。
似乎有人通过修补内核来做到这一点。我刚刚碰到了弗吉尼亚州费尔法克斯市乔治梅森大学计算机科学系的Angelos Stavrou,王朝晖写的一篇题为“利用智能手机USB连接以获取乐趣和利润”的论文。(可通过搜索上述标题免费获得)。在这里,两位研究人员正在调查让受感染的android设备将自身显示为HID设备(键盘)来控制连接的PC的可能性。作为概念证明,他们似乎已经按照您想要的方式成功地修补了内核。他们没有提供详细的步骤,但是无论如何,我只是引用他们说过的话:
.....我们使用适用于Linux的USB Gadget API [4],在Android Linux内核上除了现有的USB复合接口外,还开发了一种特殊的USB小工具驱动程序。UGAL框架帮助我们实现了简单的USB人机界面驱动程序(HID)功能(即设备驱动程序)以及各种内核API之间的粘合代码。使用“ drivers / usb / gadget / composite.c”中提供的代码,我们创建了自己的小工具驱动程序,作为附加的复合USB接口。该驱动程序模拟USB键盘设备。我们还可以模拟将USB鼠标设备发送到桌面系统的预编程输入命令。因此,简单地将其摆成普通的USB鼠标或键盘设备并秘密发送预定义的命令即可模拟恶意的交互式用户活动。要验证此功能,在我们的受控实验中,我们发送键码序列以执行非致命操作,并展示这种被操纵的设备如何造成损坏。特别是,我们模拟了一个戴尔USB键盘(vendorID = 413C,productID = 2105),并发送了“ CTRL + ESC”键组合以及“ U”和“ Enter”键序列重新启动机器。请注意,这仅需要USB连接,就可以在桌面系统上获得“当前用户”特权。通过将其他本地或远程漏洞利用作为有效负载发送,恶意软件可以提升特权并获得对桌面系统的完全访问权限。productID = 2105)发送“ CTRL + ESC”组合键以及“ U”和“ Enter”键序列以重新启动机器。请注意,这仅需要USB连接,就可以在桌面系统上获得“当前用户”特权。通过将其他本地或远程漏洞利用作为有效负载发送,恶意软件可以提升特权并获得对桌面系统的完全访问权限。productID = 2105)发送“ CTRL + ESC”组合键以及“ U”和“ Enter”键序列以重新启动机器。请注意,这仅需要USB连接,就可以在桌面系统上获得“当前用户”特权。通过将其他本地或远程漏洞利用作为有效负载发送,恶意软件可以提升特权并获得对桌面系统的完全访问权限。
我认为这是可能的唯一方法是:
要么
(因此,我想这取决于您要完成多少工作,可能是硬件或软件问题。)
我相信,如果您的设备已安装了最新的Android设备,则可以这样做。例如,运行Android 4的Asus Eee Pad Transformer具有库/system/lib/libusb.so
和/system/lib/libusbhost.so
,因此您可以编写一个Java应用程序,该程序使用JNI来调用它们以模拟USB键盘。这意味着您必须编写一些胶水C代码来模拟USB键盘与PC进行通信的方式(=您必须研究USB协议的工作方式)。
我说“ rooted”是因为使用这些库通常需要一些权限。
编辑:将Android设备编程为USB主机时,上述情况是正确的,在这种情况下,您需要成为“小工具”。我不知道Android设备的内核中包含多少Linux小工具功能。见这对类似的问题。
插入主机后,您的Android已经可以识别VID / PID。它已经具有大容量存储的接口。您可能需要在较低级别上破解驱动程序,以支持03:01 HID的第二个接口。然后,这只是将扫描代码推送到修改后的驱动程序的问题。这不是简单的事情,但它是一个整洁的技巧。一种用途是输入用于登录的长随机密码。
不要放弃 Linux可以通过“ USB小工具”使用合适的硬件来实现。并给出以下事实:
为什么所有这些都相关?
因为如果我在写Linux手机我知道它会做什么,以及它将如何做。答案将涉及USB小工具。
阅读此处发布的链接之一,
它是Linux内核,如果您感兴趣的话,代码位于kernel.org树的drivers / usb / gadget /中。Android确实有一些不在主线中的特定小工具补丁,但这还不是全部。您只需检查其内核git树即可看到所有这些信息,而无需打扰其开发人员。
我想您会对此有所了解-但它会涉及到重新编译android内核/操作系统-或至少拥有一个构建环境,您可以在其中/可以/重新构建内核。
顺便说一句,我有一个Atmel NGW100mkII,它支持USB小工具,但未随HID模块一起提供。而且,我将不得不做上面的事情以及更多。
这是可能的,不需要任何其他驱动程序。
您可以使用小型USB软件狗大小的设备模拟PC的USB键盘,然后使用Android设备通过蓝牙发送键盘(和/或鼠标)数据。
观看Indiegogo活动中的描述性视频:http : //igg.me/at/hiDBLUE/x/3400885
顺便说一句:产品技术文档可在以下位置找到:http : //www.flyfish-tech.com/hiDBLUE
其他人发现这是错误的。同时,我也分享他们的看法。对不起。
老错答案:
我认为这几乎是不可能的。
您的计算机会使用USB设备描述符或usb接口描述符识别任何USB设备。为了能够将您的android设备用作键盘,您必须进行更改。实际上,我认为这些已保存在设备的ROM中,因此您必须更改硬件。即使设备仅在关闭状态下充电,设备也需要与主机进行自我识别(必须告知USB主机功耗,否则只能告诉几个mA)。对我来说,这指明了方向,那就是您必须更换硬件
“最简单”的方法可能是组装一个包含带µC的USB主机芯片的适配器,该适配器将接收到的数据(您仍然必须通过USB发送)转换为ps / 2或u客户端信号,然后再发送给计算机。
在我看来,最简单的方法是:购买其中一种键盘,您也可以滚动并将其放在包中。
对于这个问题,我来不及评论了,但对其他一些人可能有用。
您可以使Android手机像键盘,鼠标,摄像头,声音流系统,网络共享设备一样工作。简而言之,您会在市场上看到什么USB设备,直到并且除非硬件没有限制您。例如速度或小工具界面不可用。
USB设备有两种类型,主机和小工具。因此,小工具设备的行为就像客户端,通常在大多数手机中都具有USB OTG接口。因此,在小工具端,您可以通过在不同的配置之间切换来使手机完全像不同的设备一样工作(进入usb设置并将设备设置为大容量存储或其他功能时,您已经在做这件事)。
但是对于所有这些,您必须修改android内核。如果您是android设备开发人员,则可以确定。
作为用户,我在这里有一些经验。最明显的解决方案是通过客户端/服务器模型通过tcp / ip。诸如airkeyboard(http://www.freenew.net/iPhone/air-keyboard-111/171415.htm)之类的许多工具都利用此方法使用智能手机os创建键盘/鼠标替换。请注意,在实现中存在一些安全问题。例如,您必须登录才能使用服务器组件。
其他跨平台工具(即Windows / mac控制另一个Windows / mac实例)也采用了类似的方法。参见协同作用:http : //synergy-foss.org/