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