2. 设备连接与基础控制

2.设备连接与基础控制

装好 scrcpy 之后,第一件事就是把手机连上电脑。这一步看似简单,却藏着不少门道。USB 线插上去,设备能不能被识别?授权弹窗会不会出来?无线连接怎么配置才稳定?这些细节决定了后续体验是否顺畅。这一章把连接和基础控制讲透,让设备乖乖听话。

USB连接与设备授权

最稳妥的连接方式还是 USB。数据线一插,adb 协议就开始工作,延迟低、带宽足,适合调试和长时间使用。不过第一次连接时,手机屏幕上会弹出一个授权对话框,询问是否允许这台电脑进行 USB 调试。这个弹窗只出现一次,勾上"一律允许"再点确认,后续就畅通无阻了。如果没看到弹窗,拔了重插,或者去开发者选项里撤销 USB 调试授权,重新触发一次。

自动识别与手动指定

scrcpy 很聪明,只连了一台设备时,它会自动选中,直接运行命令就能启动。但要是电脑连着多台手机,或者同时开着模拟器,就得明确告诉它用哪一台。指定方式有四种,按使用频率排序:

最常用的是通过序列号指定。执行 adb devices 能看到设备列表,每行开头的字符串就是序列号。对于 USB 设备,这串字符通常是硬件标识;对于无线设备,格式是 IP地址:端口号。指定方式很简单:

scrcpy --serial=0123456789abcdef
scrcpy -s 0123456789abcdef  # 短参数更省事

如果只想选那个唯一的 USB 设备,可以用 --select-usb-d;同理,唯一的无线设备用 --select-tcpip-e。这两个参数在脚本里特别好用,能避免硬编码序列号。

还有一种更直接的方式,如果已经知道设备的 IP 和端口,直接用 --tcpip 参数,scrcpy 会尝试连接并启动,省得手动执行 adb connect

scrcpy --tcpip=192.168.1.100:5555
scrcpy --tcpip=192.168.1.100      # 不写端口默认用 5555

环境变量也能派上用场。把 ANDROID_SERIAL 设置成目标设备的序列号,后续所有 adb 和 scrcpy 命令都会默认操作这台设备,适合在终端会话里临时切换:

# bash/zsh
export ANDROID_SERIAL=0123456789abcdef
scrcpy

# Windows cmd
set ANDROID_SERIAL=0123456789abcdef
scrcpy

# PowerShell
$env:ANDROID_SERIAL='0123456789abcdef'
scrcpy

设备授权失败排查

有时候设备连上了,adb 也能看到,但 scrcpy 启动后黑屏或者闪退。这通常是授权问题。先确认开发者选项里的 USB 调试开关已打开,再检查是否点了授权弹窗。如果还是不行,试试换根数据线,或者换个 USB 口。台式机的话,后置 USB 口供电更稳定,比前置面板靠谱。另外,部分第三方 ROM 有"USB 调试(安全设置)"选项,需要单独开启才能模拟点击和输入,这个在控制失灵时值得检查。

无线TCP/IP连接配置

无线连接摆脱了数据线束缚,适合演示、测试或者手机放兜里远程操作的场景。scrcpy 的无线模式基于 adb 的 TCP/IP 协议,手机和电脑必须在同一个局域网内。延迟比 USB 稍高,但优化得当的话,日常用完全没问题。

自动配置模式

scrcpy 提供了非常贴心的自动配置。如果手机还没开启 TCP/IP 调试,或者不知道 IP 地址,只要先用 USB 连一次,然后执行:

scrcpy --tcpip

这条命令会自动完成三件事:获取设备 IP、启用 adb 的 TCP/IP 模式、建立连接,最后启动投屏。整个过程一气呵成,新手友好度满分。第一次配置后,只要手机和电脑保持在同一网络,后续可以直接用 --tcpip=IP地址 连接,不用再插线。

如果设备已经开启了无线调试,并且知道 IP,直接指定地址就行。默认端口是 5555,如果改了端口,记得带上:

scrcpy --tcpip=192.168.1.100    # 使用默认端口 5555
scrcpy --tcpip=192.168.1.100:7777  # 指定自定义端口

有时候网络环境复杂,IP 可能变动,或者之前连接状态乱了。地址前加个 + 号可以强制重连,清理掉旧的连接状态:

scrcpy --tcpip=+192.168.1.100

手动配置模式

想完全掌控过程,或者自动模式出问题时,可以手动配置。步骤很固定:

  1. USB 连接手机,确保 adb 能识别
  2. 手机和电脑连上同一个 Wi-Fi
  3. 获取手机 IP 地址。可以在设置里找,或者执行命令:
adb shell ip route | awk '{print $9}'
  1. 启用 TCP/IP 模式并设置端口:
adb tcpip 5555
  1. 拔掉 USB 线
  2. 建立无线连接:
adb connect 192.168.1.100:5555
  1. 现在可以正常启动 scrcpy 了
  2. 用完记得 adb disconnect 断开连接

手动配置的好处是每一步都可见,出问题容易定位。比如 adb connect 返回 "unable to connect",说明网络不通或者端口没开;如果提示 "authentication failed",可能是授权信息过期,需要重新 USB 授权。

Android 11+ 无线调试新特性

从 Android 11 开始,系统内置了"无线调试"选项,位于开发者选项底部。开启后,手机会生成一个配对码和 IP 地址,不需要 USB 就能启用 adb 无线模式。这个特性在命令行里用 adb pairadb connect 配合,但 scrcpy 目前还没直接支持配对流程。不过配对成功后,只要知道 IP 和端口,依然可以用 --tcpip 参数连接。这种方式更现代,也避免了 USB 线插拔的麻烦。

基础键盘鼠标控制

连接成功后,控制就是下一步的核心。scrcpy 提供了多种输入模式,从简单的 SDK 注入到模拟物理设备,各有优劣。理解这些模式的区别,能帮我们根据场景选择最合适的方案。

键盘输入模式

默认情况下,scrcpy 使用 SDK 模式注入键盘事件。这种方式兼容性好,所有 Android 版本都支持,但有几个限制:不能输入所有 Unicode 字符,某些输入法下会失效,而且无法禁用软键盘。对于普通英文输入和快捷键操作,完全够用。

如果需要更底层的控制,UHID 模式是个好选择。它通过 Linux 内核的 UHID 模块,在手机上模拟出一个物理键盘。优势很明显:

  • 支持所有字符和输入法
  • 可以禁用软键盘,适合全物理键盘场景
  • 无线连接也能用
  • Windows 上没兼容性问题

开启方式很简单:

scrcpy --keyboard=uhid

缺点是旧版 Android 可能因权限问题无法使用。Android 9 及以上通常没问题,再老的设备就得实测了。

AOA 模式是另一个物理键盘模拟方案,基于 Android Open Accessory 协议。它工作在 USB 层,不需要 adb,甚至可以在 USB 调试关闭的情况下控制设备。但限制也明显:只能用 USB 连接,Windows 上可能和 adb 冲突,导致无法同时使用投屏和控制。一般用在 OTG 模式,或者对安全性要求极高的场景。

scrcpy --keyboard=aoa  # 仅 USB,无需 adb

鼠标输入模式

鼠标控制同样有三种模式。默认的 SDK 模式通过 Android API 注入绝对坐标事件。大部分情况下工作良好,但某些设备需要在开发者选项里开启"指针位置"或类似选项才能正常响应。鼠标悬停事件默认是开启的,如果不需要,可以关掉:

scrcpy --no-mouse-hover

UHID 鼠标模式模拟物理鼠标,体验更接近真实操作。开启后,电脑上的鼠标指针会消失,转由设备端控制。按快捷键(默认 Alt 或 Super 键)可以切换控制权,回到电脑桌面。这种模式特别适合游戏或者需要精确点击的场景:

scrcpy --mouse=uhid
scrcpy -M  # 短参数更快捷

AOA 鼠标模式同样基于 USB 协议,限制和 AOA 键盘一样,适合 OTG 场景。

只读模式与纯控制模式

有时候只想观察不想操作,比如演示或者录屏时防止误触。--no-control 参数可以禁用所有输入事件,包括键盘、鼠标和文件拖拽:

scrcpy --no-control
scrcpy -n  # 短参数

反过来,如果只想控制设备而不需要投屏画面,比如把手机当服务器用,可以关闭视频和音频:

scrcpy --no-video --no-audio

这种情况下鼠标默认是禁用的,因为没画面没法定位。但如果配合 UHID 鼠标,就能实现纯物理鼠标控制:

scrcpy --no-video --no-audio --mouse=uhid --keyboard=uhid
scrcpy --no-video --no-audio -MK  # 短参数组合

这种纯控制模式在自动化测试或者特殊工作流里很有用,比如用电脑键盘鼠标操作放在架子上的手机,而不用盯着屏幕。

复制粘贴与文件拖拽

跨设备复制粘贴是 scrcpy 最省心的功能之一。Android 剪贴板内容变化时,会自动同步到电脑剪贴板;反过来,用快捷键就能把电脑上的文本发到手机。默认的同步机制在大部分场景下工作得很好,但细节值得深究。

剪贴板同步机制

自动同步是双向的,但方向不同行为也不同。从手机到电脑是实时同步,任何应用复制内容都会立即出现在电脑剪贴板。从电脑到手机需要手动触发,通过快捷键注入。这种设计避免了敏感信息意外泄露,也符合使用习惯。

同步功能可以用 --no-clipboard-autosync 关闭,适合对隐私要求高的场景。关闭后,剪贴板完全隔离,互不影响。

快捷键操作

复制粘贴的快捷键行为取决于当前激活的应用。大部分情况下,Ctrl+C/X/V 直接转发到设备,和本地操作体验一致。但某些应用有特殊处理,比如 Termux 里 Ctrl+C 是发送中断信号,K-9 Mail 里会新建邮件。这时候需要用 MOD 键组合:

  • MOD+c 注入 COPY 事件
  • MOD+x 注入 CUT 事件
  • MOD+v 注入 PASTE 事件

MOD 键默认是 Alt 或 Super(Windows 键),可以在设置里改。MOD+Shift+v 是另一个实用组合,它把电脑剪贴板的文本作为按键序列逐个输入。这在不支持粘贴的输入框里简直是救星,比如 Termux 命令行或者某些游戏的聊天框。但要注意,这种方式可能破坏非 ASCII 字符,中文内容可能会乱码。

需要警惕的是,无论用哪种方式粘贴,内容都会先进入 Android 剪贴板。这意味着任何应用都可以读取它。所以密码、密钥这类敏感信息,最好别用这种方式传输。虽然方便,但安全底线得守住。

文件拖拽传输

文件拖拽是另一项提升效率的功能。直接把 APK、图片、视频或者任意文件拖到 scrcpy 窗口,会自动推送到设备的 /sdcard/Download/ 目录。APK 文件还会自动触发安装,其他文件则静静等待处理。这个机制在测试应用或者快速传文件时特别方便。

拖拽行为可以通过参数定制。比如只想推送不自动安装 APK,或者指定目标目录,但当前版本这些高级功能需要配合脚本实现。默认行为已经覆盖了 90% 的需求,简单直接。

手势模拟与高级控制

除了基础输入,scrcpy 还能模拟多点手势。按住 Ctrl 再点击拖动,可以模拟双指缩放和旋转;按住 Shift 点击上下拖动模拟垂直倾斜;Ctrl+Shift 加左右拖动模拟水平倾斜。这些手势在测试地图应用或者图片浏览器时很有用,不用真的伸出两根手指在屏幕上划拉。

鼠标按键的默认行为也可以自定义。右键默认返回,中键回桌面,第四键切换应用,第五键展开通知栏。在 SDK 模式下,按住 Shift 再点这些键,会把点击事件本身发给设备,而不是触发快捷功能。在 UHID 和 AOA 模式下,行为正好相反:默认发送点击事件,Shift+按键才触发快捷功能。

这种设计体现了 scrcpy 的灵活性。物理鼠标模式下,设备端处理光标,所以优先转发原始点击;SDK 模式下,光标在电脑端,所以优先触发快捷操作。理解这个逻辑,就能预判不同模式下的行为,少踩坑。


这一章把设备连接和基础控制讲完了。USB 和无线连接各有适用场景,授权和 IP 配置是入门第一道坎。键盘鼠标模式的选择影响输入体验,SDK 模式简单通用,UHID 模式强大灵活。复制粘贴和文件拖拽是效率利器,但安全意识不能丢。下一章会深入视频流的高级配置,分辨率、帧率、编码器这些参数怎么调,才能让画面又清晰又流畅。