文章

scrcpy:用电脑操控手机,还顺手发现了鼠标 hover

今天第一次正经用 scrcpy 把手机投到电脑上,意外发现它居然能响应鼠标的 hover 悬停事件。借这个由头,把 scrcpy 的来历、原理和安装使用一并记一下。

目录
阅读字号18

今天装了 scrcpy,用 USB 把手机连上电脑,第一次正经地把手机屏幕投到了电脑上操作。本来只是想偷个懒——不想在手机小屏幕上戳来戳去——结果用着用着发现了一个我以前完全没注意过的细节:它居然能响应鼠标的 hover(悬停)事件。

鼠标移到某些按钮、链接上,还没点下去,界面就已经有了反馈:颜色变了、出现了高亮、弹出了 tooltip。在真机上单纯用手指是摸不出这种状态的——手指要么没碰,要么就是按下去了,根本没有“悬停但不点击”这个中间态。是 scrcpy 把电脑鼠标的移动如实地喂给了 Android,才让这层平时隐身的交互浮了出来。

挺有意思的一个小发现,借这个由头,干脆把 scrcpy 这东西整体记一记。

scrcpy 是什么,从哪来的

scrcpy 读作 “screen copy”,是 Genymobile(做 Android 模拟器 Genymotion 的那家公司)开源的一个工具,2018 年放出来,仓库一直挂在 GitHub 上,到现在还在持续更新。

它干的事情一句话能说清:把 Android 设备的屏幕实时投到电脑上,并且让你用电脑的键盘鼠标反过来操控这台设备。

它最讨人喜欢的几个特点:

  • 免 root:普通手机开个 USB 调试就能用,不需要解锁、刷机、root。
  • 不用装手机端 App:手机上不会多出一个常驻应用,用完即走。
  • 跨平台:Windows、macOS、Linux 都有。
  • 低延迟、高画质:日常体感几十毫秒级别,分辨率和码率都能自己调。
  • 纯开源、免费:Apache-2.0 协议。

跟很多“手机助手”类闭源软件比,scrcpy 的气质完全不同——它就是个干净的命令行工具,不登录、不联网、不塞广告,把一件事做到极致。

它是怎么做到的

scrcpy 没有任何黑魔法,整条链路其实很克制,理解了反而会更安心地用它。

它依赖 Android 自带的 adb(Android Debug Bridge)。运行时大致是这么几步:

  1. 电脑端通过 adb 把一个很小的服务端程序(scrcpy-server,一个 jar)推送到手机的临时目录里执行。注意它不是“安装”成 App,进程结束就没了。
  2. 手机端这个服务利用 Android 的 MediaCodec 硬件编码器,把屏幕实时编码成 H.264 / H.265(新版本也支持 AV1)视频流。
  3. 视频流通过 adb 建立的隧道(USB 或 TCP/IP)传回电脑,电脑端用 FFmpeg 解码并显示在窗口里。
  4. 反方向,电脑上的键盘、鼠标、触摸操作被翻译成 Android 的 input event,再通过同一条隧道注入回设备。

我开头说的 hover 能生效,秘密就在第 4 步:scrcpy 把鼠标的移动当作一种“悬停指针”事件注入,而不只是点击。Android 系统本身是支持指针悬停的(想想接了鼠标或手写笔的平板),平时用手指根本触发不到,scrcpy 这条注入通道刚好把它打通了。

整个过程不需要 root,也不需要云服务器中转,数据全程在你的 USB 线或局域网里走,这点对隐私党很友好。

下载与安装

Windows

最省事的是用包管理器。装了 Scoop 的话:

scoop install scrcpy

或者用 Chocolatey:

choco install scrcpy

不想用包管理器,就直接去 GitHub Releases 下 scrcpy-win64-xxx.zip,解压出来是绿色版,里面已经自带了 adb,解压即用。

macOS

用 Homebrew 一行搞定(会自动把 android-platform-tools 这类依赖带上):

brew install scrcpy

Linux

大多数发行版的仓库里都有:

# Debian / Ubuntu
sudo apt install scrcpy

# Arch
sudo pacman -S scrcpy

各平台还有个通用方案——snap:sudo snap install scrcpy。

使用教程

1. 手机开 USB 调试

这是唯一需要在手机上做的准备:

  1. 进 设置 → 关于手机,连点 版本号 7 次,解锁“开发者选项”。
  2. 进 设置 → 系统 → 开发者选项,打开 USB 调试。
  3. 用数据线连上电脑,手机会弹一个“是否允许 USB 调试”的授权框,勾上“一直允许”,点确定。

可以先验证一下连接:

adb devices

能看到你的设备序列号、状态是 device,就说明通了。

2. 启动投屏

接下来真的只需要一个命令:

scrcpy

回车,电脑上就会弹出手机画面,鼠标键盘直接可用。就这么简单。

3. 常用参数

scrcpy 的可调项非常多,下面是我自己最常用的几个:

# 限制最大分辨率(降到 1024,省带宽、更流畅)
scrcpy --max-size 1024

# 限制码率到 4 Mbps(默认 8M,画质换流畅)
scrcpy --video-bit-rate 4M

# 限制帧率到 30fps
scrcpy --max-fps 30

# 投屏时保持手机屏幕常亮,且操作结束自动锁屏
scrcpy --stay-awake --turn-screen-off

# 录屏:边投边把画面录成文件
scrcpy --record file.mp4

小技巧

窗口里有不少快捷键,比如 Ctrl+C 复制设备剪贴板、Ctrl+V 把电脑剪贴板粘进手机、双击右键返回、Ctrl+O 关掉设备屏幕但继续操作。具体清单在官方 README 里查得到。

4. 无线投屏(拔掉数据线)

先用 USB 连着,让设备监听一个 TCP 端口,之后就能拔线走 Wi-Fi:

# 1. USB 连着时,让 adb 切到 TCP 模式
adb tcpip 5555

# 2. 查到手机的局域网 IP(设置里也能看到)后连上
adb connect 192.168.1.23:5555

# 3. 现在可以拔掉数据线,再启动 scrcpy
scrcpy

要求是手机和电脑在同一个局域网里。无线模式的延迟会比 USB 略高,但日常用够了。

注意

adb tcpip 打开后,同一网络下任何人理论上都能尝试连接你的设备。在不可信的公共 Wi-Fi 下别这么干,用完记得 adb usb 切回来。

写在最后

scrcpy 解决的是个很具体的痛点:电脑前坐着,却要为手机上的某条消息、某个验证码、某次操作不停地拿起放下手机。把手机投到屏幕一角,用键鼠顺手处理,体验确实顺滑很多。

而今天那个鼠标 hover 的小发现更让我开心——它提醒我,很多交互细节其实一直都在,只是平时用手指的方式把它们藏起来了。换一种输入设备,界面就向你露出了另一面。工具的价值,有时候不只是“更方便”,还在于它能让你重新看见一些习以为常的东西。