官网
https://github.com/Genymobile/scrcpy
要求
Android 设备至少需要 API 21 (Android 5.0)。
确保在您的设备上启用 adb 调试。
在某些设备上,您还需要启用一个附加选项来使用键盘和鼠标对其进行控制。
下载这个软件
概括
- Linux:
apt install scrcpy
- 视窗:下载
- 苹果系统:
brew install scrcpy
Linux
在 Debian 和 Ubuntu 上:
apt install scrcpy
在 Arch Linux 上:
pacman -S scrcpy
视窗
对于 Windows,可以使用包含所有依赖项(包括 )的预构建存档adb
:
scrcpy-win64-v1.24.zip
SHA-256:6ccb64cba0a3e75715e85a188daeb4f306a1985f8ce123eba92ba74fc9b27367
它也可用于Chocolatey:
choco install scrcpy
choco install adb # if you don't have it yet
在独家新闻中:
scoop install scrcpy
scoop install adb # if you don't have it yet
您也可以手动构建应用程序。
苹果系统
该应用程序在Homebrew中可用。只需安装它:
brew install scrcpy
您需要adb
,可从您的PATH
. 如果您还没有:
brew install android-platform-tools
它也可以在MacPorts中使用,它会adb
为您设置:
sudo port install scrcpy
您也可以手动构建应用程序。
跑
将 Android 设备插入您的计算机,然后执行:
scrcpy
它接受命令行参数,按以下方式列出:
scrcpy --help
特征
捕获配置
缩小尺寸
有时,以较低的分辨率镜像 Android 设备以提高性能很有用。
将宽度和高度都限制为某个值(例如 1024):
scrcpy --max-size 1024
scrcpy -m 1024 # short version
计算另一个维度是为了保留 Android 设备的纵横比。这样,1920×1080 的设备将被镜像为 1024×576。
更改比特率
默认比特率为 8 Mbps。要更改视频比特率(例如更改为 2 Mbps):
scrcpy --bit-rate 2M
scrcpy -b 2M # short version
限制帧率
可以限制捕获帧速率:
scrcpy --max-fps 15
自 Android 10 起正式支持此功能,但可能适用于早期版本。
实际的捕获帧率可能会打印到控制台:
scrcpy --print-fps
也可以随时使用MOD+启用或禁用它i。
庄稼
可以裁剪设备屏幕以仅镜像屏幕的一部分。
这很有用,例如,仅镜像 Oculus Go 的一只眼睛:
scrcpy --crop 1224:1440:0:0 # 1224x1440 at offset (0,0)
如果--max-size
还指定,则在裁剪后应用调整大小。
锁定视频方向
要锁定镜像的方向:
scrcpy --lock-video-orientation # initial (current) orientation
scrcpy --lock-video-orientation=0 # natural orientation
scrcpy --lock-video-orientation=1 # 90° counterclockwise
scrcpy --lock-video-orientation=2 # 180°
scrcpy --lock-video-orientation=3 # 90° clockwise
这会影响录制方向。
窗口也可以独立旋转。
编码器
有些设备有多个编码器,其中一些可能会导致问题或崩溃。可以选择不同的编码器:
scrcpy --encoder OMX.qcom.video.encoder.avc
要列出可用的编码器,您可以传递一个无效的编码器名称;该错误将提供可用的编码器:
scrcpy --encoder _
捕获
记录
镜像时可以录屏:
scrcpy --record file.mp4
scrcpy -r file.mkv
要在录制时禁用镜像:
scrcpy --no-display --record file.mp4
scrcpy -Nr file.mkv
# interrupt recording with Ctrl+C
“跳过的帧”会被记录下来,即使它们没有实时显示(出于性能原因)。帧在设备上带有时间戳,因此数据包延迟变化不会影响记录的文件。
v4l2环回
在 Linux 上,可以将视频流发送到 v4l2 环回设备,这样任何支持 v4l2 的工具都可以像打开网络摄像头一样打开 Android 设备。
模块v4l2loopback
必须安装:
sudo apt install v4l2loopback-dkms
要创建 v4l2 设备:
sudo modprobe v4l2loopback
这将在 中创建一个新的视频设备/dev/videoN
,其中N
是一个整数(有更多选项可用于创建多个设备或具有特定 ID 的设备)。
列出启用的设备:
# requires v4l-utils package
v4l2-ctl --list-devices
# simple but might be sufficient
ls /dev/video*
要开始scrcpy
使用 v4l2 接收器:
scrcpy --v4l2-sink=/dev/videoN
scrcpy --v4l2-sink=/dev/videoN --no-display # disable mirroring window
scrcpy --v4l2-sink=/dev/videoN -N # short version
(替换N
为设备ID,检查ls /dev/video*
)
启用后,您可以使用支持 v4l2 的工具打开视频流:
ffplay -i /dev/videoN
vlc v4l2:///dev/videoN # VLC might add some buffering delay
例如,您可以在OBS中捕获视频。
缓冲
可以添加缓冲。这会增加延迟,但会减少抖动(请参阅 #2464)。
该选项可用于显示缓冲:
scrcpy --display-buffer=50 # add 50 ms buffering for display
和 V4L2 接收器:
scrcpy --v4l2-buffer=500 # add 500 ms buffering for v4l2 sink
联系
TCP/IP(无线)
Scrcpy用于adb
与设备通信,并且adb
可以通过 TCP/IP连接到设备。设备必须与计算机连接在同一网络上。
自动的
一个选项--tcpip
允许自动配置连接。有两种变体。
如果设备(在此示例中可在 192.168.1.1 访问)已经在端口(通常为 5555)上侦听传入adb连接,则运行:
scrcpy –tcpip=192.168.1.1 # default port is 5555
scrcpy –tcpip=192.168.1.1:5555
如果设备上禁用了adb TCP/IP 模式(或者如果您不知道 IP 地址),请通过 USB 连接设备,然后运行:
scrcpy --tcpip # without arguments
它会自动查找设备 IP 地址,启用 TCP/IP 模式,然后在启动前连接到设备。
手动的
或者,可以使用以下命令手动启用 TCP/IP 连接 adb
:
-
将设备插入计算机上的 USB 端口。
-
将设备连接到与您的计算机相同的 Wi-Fi 网络。
-
在设置 → 关于手机 → 状态中获取您的设备 IP 地址,或执行以下命令:
adb shell ip route | awk '{print $9}'
-
adb
在您的设备上通过 TCP/IP启用:adb tcpip 5555
. -
拔下您的设备。
-
连接到您的设备:(
adb connect DEVICE_IP:5555
替换DEVICE_IP
为您找到的设备 IP 地址)。 -
scrcpy
像往常一样运行。
从 Android 11 开始,无线调试选项允许绕过将设备直接物理连接到计算机的麻烦。
如果连接随机断开,请运行您的scrcpy
命令重新连接。如果它说没有找到设备/模拟器,请尝试adb connect DEVICE_IP:5555
再次运行,然后scrcpy
像往常一样。如果仍然显示没有找到,请尝试运行adb disconnect
,然后再次运行这两个命令。
降低比特率和分辨率可能很有用:
scrcpy --bit-rate 2M --max-size 800
scrcpy -b2M -m800 # short version
多设备
如果列出了多个设备adb devices
,您可以指定串行:
scrcpy --serial 0123456789abcdef
scrcpy -s 0123456789abcdef # short version
序列号也可以通过环境变量ANDROID_SERIAL
(也由 使用adb
)提供。
如果设备通过 TCP/IP 连接:
scrcpy --serial 192.168.0.1:5555
scrcpy -s 192.168.0.1:5555 # short version
如果只有一个设备通过 USB 或 TCP/IP 连接,则可以自动选择它:
# Select the only device connected via USB
scrcpy -d # like adb -d
scrcpy --select-usb # long version
# Select the only device connected via TCP/IP
scrcpy -e # like adb -e
scrcpy --select-tcpip # long version
您可以为多个设备启动多个scrcpy实例。
设备连接时自动启动
您可以使用AutoAdb:
autoadb scrcpy -s '{}'
隧道
要连接到远程设备,可以将本地adb
客户端连接到远程adb
服务器(前提是它们使用相同版本的adb 协议)。
远程 ADB 服务器
要连接到远程adb 服务器,请让服务器监听所有接口:
adb kill-server
adb -a nodaemon server start
# keep this open
警告:客户端和adb 服务器之间的所有通信都是未加密的。
假设此服务器可在 192.168.1.2 访问。然后,从另一个终端运行scrcpy
:
# in bash
export ADB_SERVER_SOCKET=tcp:192.168.1.2:5037
scrcpy --tunnel-host=192.168.1.2
:: in cmd
set ADB_SERVER_SOCKET=tcp:192.168.1.2:5037
scrcpy --tunnel-host=192.168.1.2
# in PowerShell
$env:ADB_SERVER_SOCKET = 'tcp:192.168.1.2:5037'
scrcpy --tunnel-host=192.168.1.2
默认情况下,scrcpy
使用用于adb forward
建立隧道的本地端口(通常27183
,请参阅--port
)。也可以强制使用不同的隧道端口(在更复杂的情况下,当涉及更多重定向时,它可能很有用):
scrcpy --tunnel-port=1234
SSH隧道
为了与远程adb 服务器安全通信,最好使用 SSH 隧道。
首先,确保adb 服务器正在远程计算机上运行:
adb start-server
然后,建立一个 SSH 隧道:
# local 5038 --> remote 5037
# local 27183 <-- remote 27183
ssh -CN -L5038:localhost:5037 -R27183:localhost:27183 your_remote_computer
# keep this open
从另一个终端运行scrcpy
:
# in bash
export ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy
:: in cmd
set ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy
# in PowerShell
$env:ADB_SERVER_SOCKET = 'tcp:localhost:5038'
scrcpy
为避免启用远程端口转发,您可以改为强制转发连接(注意-L
而不是-R
):
# local 5038 --> remote 5037
# local 27183 --> remote 27183
ssh -CN -L5038:localhost:5037 -L27183:localhost:27183 your_remote_computer
# keep this open
从另一个终端运行scrcpy
:
# in bash
export ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy --force-adb-forward
:: in cmd
set ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy --force-adb-forward
# in PowerShell
$env:ADB_SERVER_SOCKET = 'tcp:localhost:5038'
scrcpy --force-adb-forward
与无线连接一样,降低质量可能很有用:
scrcpy -b2M -m800 --max-fps 15
窗口配置
标题
默认情况下,窗口标题是设备型号。它可以改变:
scrcpy --window-title 'My device'
位置和大小
可以指定初始窗口位置和大小:
scrcpy --window-x 100 --window-y 100 --window-width 800 --window-height 600
无边界
要禁用窗口装饰:
scrcpy --window-borderless
总在最前面
要使scrcpy窗口始终位于顶部:
scrcpy --always-on-top
全屏
该应用程序可以直接全屏启动:
scrcpy --fullscreen
scrcpy -f # short version
然后可以使用MOD+动态切换全屏f。
回转
窗口可以旋转:
scrcpy --rotation 1
可能的值:
0
: 没有旋转1
:逆时针90度2
: 180 度3
:顺时针90度
旋转也可以通过MOD+ ← (left)和MOD+ → (right)动态改变。
请注意,scrcpy管理 3 种不同的旋转:
- MOD+r请求设备在纵向和横向之间切换(当前运行的应用程序可能会拒绝,如果它不支持请求的方向)。
--lock-video-orientation
更改镜像方向(从设备发送到计算机的视频的方向)。这会影响录制。--rotation
(或MOD+ ←/ MOD+ →)仅旋转窗口内容。这仅影响显示,不影响录制。
其他镜像选项
只读
要禁用控件(可以与设备交互的所有内容:输入键、鼠标事件、拖放文件):
scrcpy --no-control
scrcpy -n
展示
如果有多个显示器可用,则可以选择要镜像的显示器:
scrcpy --display 1
可以通过以下方式检索显示 ID 列表:
adb shell dumpsys display # search "mDisplayId=" in the output
仅当设备至少运行 Android 10 时才能控制辅助显示器(否则它会被镜像为只读)。
保持清醒
为防止设备在插入设备后延迟休眠:
scrcpy --stay-awake
scrcpy -w
当scrcpy关闭时恢复初始状态。
关闭屏幕
可以在使用命令行选项启动镜像时关闭设备屏幕:
scrcpy --turn-screen-off
scrcpy -S
或者随时按MOD+ 。o
要重新打开它,请按MOD+ Shift+ o。
在 Android 上,该POWER
按钮始终打开屏幕。为方便起见,如果 POWER
通过scrcpy发送(通过右键单击或MOD+ p),它将在一小段延迟后强制关闭屏幕(尽最大努力)。物理POWER
按钮仍会导致屏幕打开。
防止设备休眠也很有用:
scrcpy --turn-screen-off --stay-awake
scrcpy -Sw
关闭电源关闭
在关闭scrcpy时关闭设备屏幕:
scrcpy --power-off-on-close
开机开机
默认情况下,在启动时,设备处于开机状态。
为了防止这种行为:
scrcpy --no-power-on
显示触摸
对于演示,显示物理触摸(在物理设备上)可能很有用。
Android 在Developers options中提供了此功能。
Scrcpy提供了在启动时启用此功能并在退出时恢复初始值的选项:
scrcpy --show-touches
scrcpy -t
请注意,它仅显示物理触摸(通过设备上的手指)。
禁用屏幕保护程序
默认情况下,scrcpy不会阻止屏幕保护程序在计算机上运行。
要禁用它:
scrcpy --disable-screensaver
输入控制
旋转设备屏幕
按MOD+r在纵向和横向模式之间切换。
请注意,仅当前台应用程序支持请求的方向时,它才会旋转。
复制粘贴
每当 Android 剪贴板发生变化时,它都会自动同步到计算机剪贴板。
任何Ctrl快捷方式都会转发到设备。尤其是:
- Ctrl+c通常复制
- Ctrl+x通常削减
- Ctrl+v通常粘贴(在计算机到设备的剪贴板同步之后)
这通常按您的预期工作。
但是,实际行为取决于活动的应用程序。例如, Termux 会Ctrl在+上发送 SIGINT c,而K-9 Mail会 编写新消息。
在这种情况下复制、剪切和粘贴(但仅在 Android >= 7 上支持):
- MOD+c注入
COPY
- MOD+x注入
CUT
- MOD+v注入
PASTE
(在计算机到设备的剪贴板同步之后)
此外,MOD++将计算机Shift剪贴板v文本作为一系列关键事件注入。当组件不接受文本粘贴(例如在Termux中)时,这很有用,但它可能会破坏非 ASCII 内容。
警告:将计算机剪贴板粘贴到设备(通过 Ctrl+v或MOD+ v)会将内容复制到 Android 剪贴板。因此,任何 Android 应用程序都可以读取其内容。您应该避免以这种方式粘贴敏感内容(如密码)。
以编程方式设置设备剪贴板时,某些 Android 设备的行为与预期不同。提供了一个选项--legacy-paste
来更改Ctrl+v和MOD+的行为,v以便它们也将计算机剪贴板文本作为一系列键事件注入(与MOD+ Shift+相同v)。
要禁用自动剪贴板同步,请使用 --no-clipboard-autosync
.
捏拉缩放
模拟“捏缩放”:Ctrl+ click-and-move。
更准确地说,按住Ctrl左键的同时按住。在释放左键单击按钮之前,所有鼠标移动都会相对于屏幕中心缩放和旋转内容(如果应用程序支持)。
从技术上讲,scrcpy在屏幕中心反转的位置从“虚拟手指”生成额外的触摸事件。
物理键盘模拟 (HID)
默认情况下,scrcpy使用 Android 密钥或文本注入:它适用于任何地方,但仅限于 ASCII。
或者,scrcpy
可以在 Android 上模拟物理 USB 键盘以提供更好的输入体验(通过 AOAv2 使用 USB HID):虚拟键盘被禁用,它适用于所有字符和 IME。
但是,它仅在设备通过 USB 连接时才有效。
注意:在 Windows 上,它只能在OTG 模式下工作,而不是在镜像时(如果 USB 设备已经被adb 守护程序等其他进程打开,则无法打开它)。
要启用此模式:
scrcpy --hid-keyboard
scrcpy -K # short version
如果由于某种原因失败(例如因为设备未通过 USB 连接),它会自动回退到默认模式(在控制台中显示日志)。这允许在通过 USB 和 TCP/IP 连接时使用相同的命令行选项。
在这种模式下,原始键事件(扫描码)被发送到设备,独立于主机键映射。因此,如果您的键盘布局不匹配,则必须在 Android 设备上进行配置,在 Settings → System → Languages and input → Physical keyboard。
这个设置页面可以直接启动:
adb shell am start -a android.settings.HARD_KEYBOARD_SETTINGS
但是,该选项仅在启用 HID 键盘(或连接物理键盘时)可用。
物理鼠标模拟 (HID)
与物理键盘模拟类似,可以模拟物理鼠标。同样,它仅在设备通过 USB 连接时才有效。
默认情况下,scrcpy使用带有绝对坐标的 Android 鼠标事件注入。通过模拟物理鼠标,在Android设备上出现鼠标指针,并注入鼠标相对运动、点击和滚动。
要启用此模式:
scrcpy --hid-mouse
scrcpy -M # short version
您还可以添加--forward-all-clicks
转发所有鼠标按钮。
启用此模式后,计算机鼠标将被“捕获”(鼠标指针从计算机上消失并出现在 Android 设备上)。
特殊的捕获键,或者Alt或Super,切换(禁用或启用)鼠标捕获。使用其中之一将鼠标的控制权交还给计算机。
OTG
可以仅使用物理键盘和鼠标模拟 (HID) 运行scrcpy,就好像计算机键盘和鼠标通过 OTG 电缆直接插入设备一样。
在这种模式下,adb
(USB 调试)不是必需的,并且镜像被禁用。
要启用 OTG 模式:
scrcpy --otg
# Pass the serial if several USB devices are available
scrcpy --otg -s 0123456789abcdef
可以只启用 HID 键盘或 HID 鼠标:
scrcpy --otg --hid-keyboard # keyboard only
scrcpy --otg --hid-mouse # mouse only
scrcpy --otg --hid-keyboard --hid-mouse # keyboard and mouse
# for convenience, enable both by default
scrcpy --otg # keyboard and mouse
--hid-keyboard
和一样--hid-mouse
,它仅在设备通过 USB 连接时才有效。
文本注入首选项
输入文本时会生成两种事件:
- 按键事件,表示按键被按下或释放;
- text events,表示已输入文本。
默认情况下,字母是使用键事件注入的,因此键盘在游戏中的行为符合预期(通常用于 WASD 键)。
但这可能会导致问题。如果遇到这样的问题,可以通过以下方式避免:
scrcpy --prefer-text
(但这会破坏游戏中的键盘行为)
相反,您可以强制始终注入原始关键事件:
scrcpy --raw-key-events
这些选项对 HID 键盘没有影响(在此模式下,所有按键事件都作为扫描码发送)。
键重复
默认情况下,按住一个键会产生重复的键事件。这可能会在某些游戏中导致性能问题,而这些事件无论如何都是无用的。
为了避免转发重复的关键事件:
scrcpy --no-key-repeat
此选项对 HID 键盘没有影响(按键重复由 Android 在此模式下直接处理)。
右键单击和中键单击
默认情况下,右键单击触发 BACK(或 POWER on),中键单击触发 HOME。要禁用这些快捷方式并将点击转发到设备:
scrcpy --forward-all-clicks
文件丢弃
安装 APK
要安装 APK,请将 APK 文件(以 结尾.apk
)拖放到scrcpy 窗口。
没有视觉反馈,日志打印到控制台。
将文件推送到设备
要将文件推送到/sdcard/Download/
设备上,请将(非 APK)文件拖放到scrcpy窗口。
没有视觉反馈,日志打印到控制台。
目标目录可以在启动时更改:
scrcpy --push-target=/sdcard/Movies/
音频转发
scrcpy不转发音频。使用sndcpy。
另见问题 #14。
捷径
在以下列表中,MOD是快捷方式修饰符。默认情况下,它是 (left)Alt或 (left) Super。
可以使用--shortcut-mod
. 可能的键是lctrl
、rctrl
、 lalt
、ralt
和。例如:lsuper
rsuper
# use RCtrl for shortcuts
scrcpy --shortcut-mod=rctrl
# use either LCtrl+LAlt or LSuper for shortcuts
scrcpy --shortcut-mod=lctrl+lalt,lsuper
Super通常是WindowsorCmd键。
行动 | 捷径 |
---|---|
切换全屏模式 | MOD+f |
向左旋转显示 | MOD+ ← (左) |
向右旋转显示 | MOD+ → (右) |
将窗口大小调整为 1:1(像素完美) | MOD+g |
调整窗口大小以删除黑色边框 | MOD+ w| 双击左键¹ |
点击HOME |
MOD+ h| 中键单击 |
点击BACK |
MOD+ b| 右键单击² |
点击APP_SWITCH |
MOD+ s| 第四次点击³ |
点击MENU (解锁屏幕)⁴ |
MOD+m |
点击VOLUME_UP |
MOD+ ↑ (上) |
点击VOLUME_DOWN |
MOD+ ↓ (下) |
点击POWER |
MOD+p |
打开 | 右键单击² |
关闭设备屏幕(保持镜像) | MOD+o |
打开设备屏幕 | MOD+ Shift+o |
旋转设备屏幕 | MOD+r |
展开通知面板 | MOD+ n| 第五次点击³ |
展开设置面板 | MOD+ n+ n| 双击第五次³ |
折叠面板 | MOD+ Shift+n |
复制到剪贴板⁵ | MOD+c |
剪切到剪贴板⁵ | MOD+x |
同步剪贴板和粘贴⁵ | MOD+v |
注入计算机剪贴板文本 | MOD+ Shift+v |
启用/禁用 FPS 计数器(在标准输出上) | MOD+i |
捏拉缩放 | Ctrl+点击移动 |
拖放APK文件 | 从电脑安装APK |
拖放非APK文件 | 将文件推送到设备 |
¹双击黑色边框将其删除。
²如果屏幕关闭,右键单击打开屏幕,否则按 BACK。
³第 4 和第 5 个鼠标按钮,如果您的鼠标有它们。
⁴对于开发中的 react-native 应用程序,MENU
触发开发菜单。
⁵仅在 Android >= 7 上。
通过释放并再次按下该键来执行具有重复键的快捷方式。例如,要执行“展开设置面板”:
- 按住 并按住MOD。
- 然后双击n。
- 最后,释放MOD。
所有Ctrl+键快捷键都转发到设备,因此它们由活动应用程序处理。
自定义路径
要使用特定的adb
二进制文件,请在环境变量中配置其路径 ADB
:
ADB=/path/to/adb scrcpy
要覆盖scrcpy-server
文件的路径,请在 SCRCPY_SERVER_PATH
.
要覆盖图标,请在 中配置其路径SCRCPY_ICON_PATH
。