跳转到内容

Scrcpy 键盘控制

提供多种键盘输入模式:

  • --keyboard=sdk (default)
  • --keyboard=uhid (or -K): simulates a physical HID keyboard using the UHID kernel module on the device
  • --keyboard=aoa: simulates a physical HID keyboard using the AOAv2 protocol
  • --keyboard=disabled

默认使用 sdk,但如果你经常使用 scrcpy,建议使用uhid,并在设备上一次性配置好键盘布局。

在该模式下(--keyboard=sdk,或省略该参数时),键盘输入事件在 Android API 层注入。它几乎适用于所有场景,但仅支持 ASCII 及少量其它字符。

注意:在部分设备上,需要在开发者选项中启用额外设置该键盘模式才可用。参见前置条件

下面的附加参数(仅适用于 --keyboard=sdk)可用于自定义行为。

在输入文本时会产生两类事件

  • 键盘事件:表示按键按下或抬起;
  • 文本事件:表示一段文本已被输入。

默认情况下,数字和“特殊字符”通过文本事件插入,而字母通过按键事件注入,以便在游戏中按键行为符合预期(典型如 WASD)。

但这可能会导致问题。如果遇到此类问题,可以将字母也作为文本注入(或直接切换到 UHID):

Terminal window
scrcpy --prefer-text

(但这会影响游戏中的键盘行为)

相反,你也可以强制始终注入原始按键事件:

Terminal window
scrcpy --raw-key-events

默认情况下,长按按键会生成重复的按键事件。在某些游戏中,这些事件并无意义,还可能引发性能问题。

为避免转发重复按键事件:

Terminal window
scrcpy --no-key-repeat

提供两种模式在设备上模拟物理 HID 键盘。

为正常工作,需在设备上一次性将键盘布局配置为与电脑一致。

可通过以下方式打开配置页面:

  • 在使用 uhidaoa 时,从 scrcpy 窗口按下 MOD+k(见快捷键
  • 在设备上,进入 设置 → 系统 → 语言和输入法 → 物理设备
  • 在电脑终端执行 adb shell am start -a android.settings.HARD_KEYBOARD_SETTINGS

在该页面也可以开启或关闭屏幕键盘。

该模式使用设备上的 UHID 内核模块模拟物理 HID 键盘。

启用 UHID 键盘:

Terminal window
scrcpy --keyboard=uhid
scrcpy -K # short version

在配置好键盘布局后(见上文),这是镜像场景下使用键盘的最佳模式:

  • 支持所有字符与输入法(不同于 --keyboard=sdk
  • 可禁用屏幕键盘(不同于 --keyboard=sdk
  • 支持 TCP/IP(无线)(不同于 --keyboard=aoa
  • 在 Windows 上无相关问题(不同于 --keyboard=aoa

缺点是老版本 Android 可能因权限错误无法使用。

该模式使用 AOAv2 协议模拟物理 HID 键盘。

启用 AOA 键盘:

Terminal window
scrcpy --keyboard=aoa

与其他模式不同,它直接在 USB 层工作(因此仅支持 USB 连接)。

它不使用 scrcpy 服务端,也不需要 adb(USB 调试)。因此,即使关闭 USB 调试也可以控制设备(但无法镜像),见OTG

注意:在 Windows 上,它可能只能在OTG 模式下工作,无法在镜像时使用(当 USB 设备已被其他进程如 adb daemon 打开时无法再次打开)。