diff --git a/README.zh-Hans.md b/README.zh-Hans.md index 683f1b5..bf8a0c1 100644 --- a/README.zh-Hans.md +++ b/README.zh-Hans.md @@ -10,1076 +10,185 @@ Current version is based on [c00a9ea] [c00a9ea]: https://github.com/Genymobile/scrcpy/blob/c00a9ead5e383b00d6b36464c2b234909720f095/README.md -# scrcpy (v1.24) +**这个GitHub仓库 () 是该项目唯一的官方来源。不要从随机网站下载发布版本,即使它们的名称包含 `scrcpy`。** -scrcpy +# scrcpy (v2.7) -_发音为 "**scr**een **c**o**py**"_ +scrcpy -本应用程序可以显示并控制通过 USB 或 [TCP/IP][article-tcpip] 连接的安卓设备,且不需要任何 _root_ 权限。本程序支持 _GNU/Linux_, _Windows_ 和 _macOS_。 +_发音 "**scr**een **c**o**py**"_ -![screenshot](https://raw.githubusercontent.com/Genymobile/scrcpy/master/assets/screenshot-debian-600.jpg) +这个应用程序可以镜像通过USB或[通过TCP/IP](doc/connection.md#tcpip-wireless)连接的安卓设备(视频和音频),并允许使用电脑的键盘和鼠标控制设备。它不需要任何_root_权限。它可以在_Linux_、_Windows_和_macOS_上运行。 -本应用专注于: +![截图](assets/screenshot-debian-600.jpg) - - **轻量**:原生,仅显示设备屏幕 - - **性能**:30~120fps,取决于设备 - - **质量**:分辨率可达 1920×1080 或更高 - - **低延迟**:[35~70ms][lowlatency] - - **快速启动**:最快 1 秒内即可显示第一帧 - - **无侵入性**:不会在 Android 设备上遗留任何程序 - - **用户利益**:无需帐号,无广告,无需联网 - - **自由**:自由和开源软件 +它的重点是: + + - **轻量**: 原生,仅显示设备屏幕 + - **性能**: 30~120fps,取决于设备 + - **质量**: 1920×1080或更高 + - **低延迟**: [35~70ms][lowlatency] + - **启动时间短**: ~1秒显示第一张图片 + - **无侵入性**: 不会在安卓设备上留下任何安装痕迹 + - **用户受益**: 无需账户,无广告,无需网络 + - **自由**: 免费和开源软件 [lowlatency]: https://github.com/Genymobile/scrcpy/pull/646 -功能: - - [屏幕录制](#屏幕录制) - - 镜像时[关闭 Android 设备的屏幕](#关闭-android-设备的屏幕) - - 双向[复制粘贴](#复制粘贴) - - [可配置显示质量](#采集设置) - - 以 Android 设备[作为摄像头 (V4L2)](#v4l2loopback)(仅限 Linux) - - [模拟物理键盘 (HID)](#物理键盘模拟-hid) - - [物理鼠标模拟 (HID)](#物理鼠标模拟-hid) - - [OTG 模式](#otg) - - 更多... +其功能包括: + - [音频转发](doc/audio.md) (Android 11+) + - [录制](doc/recording.md) + - 在[安卓设备屏幕关闭](doc/device.md#turn-screen-off)情况下镜像 + - [双向复制粘贴](doc/control.md#copy-paste) + - [可配置质量](doc/video.md) + - [摄像头镜像](doc/camera.md) (Android 12+) + - 作为网络摄像头镜像 (V4L2) (仅限Linux) + - 物理[键盘][hid-keyboard]和[鼠标][hid-mouse]模拟 (HID) + - [游戏手柄](doc/gamepad.md)支持 + - [OTG模式](doc/otg.md) + - 以及更多… -## 系统要求 +[hid-keyboard]: doc/keyboard.md#physical-keyboard-simulation +[hid-mouse]: doc/mouse.md#physical-mouse-simulation -安卓设备最低需要支持 API 21 (Android 5.0)。 +## 前提条件 -确保设备已[开启 ADB 调试][enable-adb]。 +安卓设备至少需要API 21 (Android 5.0)。 -[enable-adb]: https://developer.android.com/studio/command-line/adb.html#Enabling +[音频转发](doc/audio.md) 支持API >= 30 (Android 11+)。 -在某些设备上,还需要开启[额外的选项][control]以使用鼠标和键盘进行控制。 +确保你在设备上[启用了USB调试][enable-adb]。 + +[enable-adb]: https://developer.android.com/studio/debug/dev-options#enable + +在一些设备上(尤其是小米),你可能会遇到以下错误: + +``` +java.lang.SecurityException: Injecting input events requires the caller (or the source of the instrumentation, if any) to have the INJECT_EVENTS permission. +``` + +在这种情况下,你需要启用[一个额外的选项][control] `USB调试 (安全设置)`(这是一个不同于`USB调试`的项目)以使用键盘和鼠标控制设备。设置此选项后需要重启设备。 [control]: https://github.com/Genymobile/scrcpy/issues/70#issuecomment-373286323 +请注意,在[OTG模式](doc/otg.md)下运行scrcpy不需要USB调试。 -## 获取本程序 +## 获取应用 -Packaging status + - [Linux](doc/linux.md) + - [Windows](doc/windows.md) + - [macOS](doc/macos.md) -### 概要 +## 使用示例 - - Linux: `apt install scrcpy` - - Windows: [下载][README-windows] - - macOS: `brew install scrcpy` +有很多选项,在单独的页面中有[文档](#user-documentation)。以下是一些常见示例。 -从源代码编译: [构建][BUILD] ([简化过程][BUILD_simple]) - -[README-windows]: https://github.com/Genymobile/scrcpy/blob/master/README.md#windows -[BUILD]: https://github.com/Genymobile/scrcpy/blob/master/doc/build.md -[BUILD_simple]: https://github.com/Genymobile/scrcpy/blob/master/BUILD.md#simple - -### Linux - -在 Debian 和 Ubuntu 上: - -``` -apt install scrcpy -``` - -在 Arch Linux 上: - -``` -pacman -S scrcpy -``` - -我们也提供 [Snap] 包: [`scrcpy`][snap-link]。 - -[snap-link]: https://snapstats.org/snaps/scrcpy - -[snap]: https://en.wikipedia.org/wiki/Snappy_(package_manager) - -对 Fedora 我们提供 [COPR] 包: [`scrcpy`][copr-link]。 - -[COPR]: https://fedoraproject.org/wiki/Category:Copr -[copr-link]: https://copr.fedorainfracloud.org/coprs/zeno/scrcpy/ - -对 Gentoo 我们提供 [Ebuild] 包:[`scrcpy/`][ebuild-link]。 - -[Ebuild]: https://wiki.gentoo.org/wiki/Ebuild -[ebuild-link]: https://github.com/maggu2810/maggu2810-overlay/tree/master/app-mobilephone/scrcpy - -您也可以[自行构建][BUILD] ([简化过程][BUILD_simple])。 - - -### Windows - -在 Windows 上,为简便起见,我们提供包含了所有依赖 (包括 `adb`) 的预编译包。 - - - [README](README.md#windows) - -也可以使用 [Chocolatey]: - -[Chocolatey]: https://chocolatey.org/ - -```bash -choco install scrcpy -choco install adb # 如果还没有 adb -``` - -或者 [Scoop]: - -```bash -scoop install scrcpy -scoop install adb # 如果还没有 adb -``` - -[Scoop]: https://scoop.sh - -您也可以[自行构建][BUILD]。 - - -### macOS - -本程序已发布到 [Homebrew]。直接安装即可: - -[Homebrew]: https://brew.sh/ - -```bash -brew install scrcpy -``` - -你还需要在 `PATH` 内有 `adb`。如果还没有: - -```bash -brew install android-platform-tools -``` - -或者通过 [MacPorts],该方法同时设置好 `adb`: - -```bash -sudo port install scrcpy -``` - -[MacPorts]: https://www.macports.org/ - -您也可以[自行构建][BUILD]。 - - -## 运行 - -将 Android 设备连接至计算机,然后执行: - -```bash -scrcpy -``` - -本程序支持命令行参数,查看参数列表: - -```bash -scrcpy --help -``` - -## 功能介绍 - -### 采集设置 - -#### 降低分辨率 - -有时候,可以通过降低镜像的分辨率来提高性能。 - -要同时限制宽度和高度到某个值 (例如 1024): - -```bash -scrcpy --max-size=1024 -scrcpy -m 1024 # 简写 -``` - -另一边会被按比例缩小以保持设备的显示比例。这样,1920×1080 分辨率的设备会以 1024×576 的分辨率进行镜像。 - - -#### 修改码率 - -默认码率是 8 Mbps。改变视频码率 (例如改为 2 Mbps): - -```bash -scrcpy --bit-rate=2M -scrcpy -b 2M # 简写 -``` - -#### 限制帧率 - -要限制采集的帧率: - -```bash -scrcpy --max-fps=15 -``` - -本功能从 Android 10 开始才被官方支持,但在一些旧版本中也能生效。 - -实际捕获的帧率可被打印到控制台: - -``` -scrcpy --print-fps -``` - -它也随时可以通过 MOD+i 来启用或关闭 - -#### 画面裁剪 - -可以对设备屏幕进行裁剪,只镜像屏幕的一部分。 - -例如可以只镜像 Oculus Go 的一只眼睛。 - -```bash -scrcpy --crop=1224:1440:0:0 # 以 (0,0) 为原点的 1224x1440 像素 -``` - -如果同时指定了 `--max-size`,会先进行裁剪,再进行缩放。 - - -#### 锁定屏幕方向 - -要锁定镜像画面的方向: - -```bash -scrcpy --lock-video-orientation # 初始(目前)方向 -scrcpy --lock-video-orientation=0 # 自然方向 -scrcpy --lock-video-orientation=1 # 逆时针旋转 90° -scrcpy --lock-video-orientation=2 # 180° -scrcpy --lock-video-orientation=3 # 顺时针旋转 90° -``` - -只影响录制的方向。 - -[窗口可以独立旋转](#旋转)。 - - -#### 编码器 - -一些设备内置了多种编码器,但是有的编码器会导致问题或崩溃。可以手动选择其它编码器: - -```bash -scrcpy --encoder=OMX.qcom.video.encoder.avc -``` - -要列出可用的编码器,可以指定一个不存在的编码器名称,错误信息中会包含所有的编码器: - -```bash -scrcpy --encoder=_ -``` - -### 采集 - -#### 屏幕录制 - -可以在镜像的同时录制视频: - -```bash -scrcpy --record=file.mp4 -scrcpy -r file.mkv -``` - -仅录制,不显示镜像: - -```bash -scrcpy --no-display --record=file.mp4 -scrcpy -Nr file.mkv -# 按 Ctrl+C 停止录制 -``` - -录制时会包含“被跳过的帧”,即使它们由于性能原因没有实时显示。设备会为每一帧打上 _时间戳_ ,所以 [包时延抖动][packet delay variation] 不会影响录制的文件。 - -[packet delay variation]: https://en.wikipedia.org/wiki/Packet_delay_variation - - -#### v4l2loopback - -在 Linux 上,可以将视频流发送至 v4l2 回环 (loopback) 设备,因此可以使用任何 v4l2 工具像摄像头一样打开安卓设备。 - -需安装 `v4l2loopback` 模块: - -```bash -sudo apt install v4l2loopback-dkms -``` - -创建一个 v4l2 设备: - -```bash -sudo modprobe v4l2loopback -``` - -这样会在 `/dev/videoN` 创建一个新的视频设备,其中 `N` 是整数。 ([更多选项](https://github.com/umlaeute/v4l2loopback#options) 可以用来创建多个设备或者特定 ID 的设备)。 - -列出已启用的设备: - -```bash -# 需要 v4l-utils 包 -v4l2-ctl --list-devices - -# 简单但或许足够 -ls /dev/video* -``` - -使用一个 v4l2 漏开启 `scrcpy`: - -```bash -scrcpy --v4l2-sink=/dev/videoN -scrcpy --v4l2-sink=/dev/videoN --no-display # 禁用窗口镜像 -scrcpy --v4l2-sink=/dev/videoN -N # 简写 -``` - -(将 `N` 替换为设备 ID,使用 `ls /dev/video*` 命令查看) - -启用之后,可以使用 v4l2 工具打开视频流: - -```bash -ffplay -i /dev/videoN -vlc v4l2:///dev/videoN # VLC 可能存在一些缓冲延迟 -``` - -例如,可以在 [OBS] 中采集视频。 - -[OBS]: https://obsproject.com/ - - -#### 缓冲 - -可以加入缓冲,会增加延迟,但可以减少抖动 (见 [#2464])。 - -[#2464]: https://github.com/Genymobile/scrcpy/issues/2464 - -对于显示缓冲: - -```bash -scrcpy --display-buffer=50 # 为显示增加 50 毫秒的缓冲 -``` - -对于 V4L2 漏: - -```bash -scrcpy --v4l2-buffer=500 # 为 v4l2 漏增加 500 毫秒的缓冲 -``` - - -### 连接 - -#### TCP/IP (无线) - -_Scrcpy_ 使用 `adb` 与设备通信,并且 `adb` 支持通过 TCP/IP [连接]到设备(设备必须连接与电脑相同的网络)。 - -##### 自动配置 - -参数 `--tcpip` 允许自动配置连接。这里有两种方式。 - -对于传入的 _adb_ 连接,如果设备(在这个例子中以 192.168.1.1 为可用地址)已经监听了一个端口(通常为 5555),运行: - -```bash -scrcpy --tcpip=192.168.1.1 # 默认端口是5555 -scrcpy --tcpip=192.168.1.1:5555 -``` - -如果 _adb_ TCP/IP(无线)模式在某些设备上不被启用(或者你不知道IP地址),用USB连接设备,然后运行: - -```bash -scrcpy --tcpip # 无需其他参数 -``` - -这将会自动寻找设备IP地址,启用TCP/IP模式,然后在启动之前连接到设备。 - -##### 手动配置 - -或者,可以通过 `adb` 使用手动启用 TCP/IP 连接: - -1. 将设备连接至电脑。 -2. 将设备和电脑连接至同一 Wi-Fi。 -3. 打开 设置 → 关于手机 → 状态信息,获取设备的 IP 地址,也可以执行以下的命令: + - 以H.265格式捕获屏幕(更高质量),限制大小为1920,限制帧率为60fps,禁用音频,并通过模拟物理键盘控制设备: ```bash - adb shell ip route | awk '{print $9}' + scrcpy --video-codec=h265 --max-size=1920 --max-fps=60 --no-audio --keyboard=uhid + scrcpy --video-codec=h265 -m1920 --max-fps=60 --no-audio -K # 简短版本 ``` -4. 启用设备的网络 adb 功能:`adb tcpip 5555`。 -5. 断开设备的 USB 连接。 -6. 连接到您的设备:`adb connect DEVICE_IP:5555` _(将 `DEVICE_IP` 替换为你获取到的设备 IP)_。 -7. 正常运行 `scrcpy`。 + - 以H.265格式录制设备摄像头的1920x1080(和麦克风)到MP4文件: -从 Android 11 开始,[无线调试选项][adb-wireless] 允许绕过必须将您的设备直接物理连接到您的计算机的限制。 + ```bash + scrcpy --video-source=camera --video-codec=h265 --camera-size=1920x1080 --record=file.mp4 + ``` -如果连接突然断开,请运行 `scrcpy` 命令重新连接。如果提示找不到设备/模拟器,尝试再次运行 `adb connect DEVICE_IP:5555`,然后像往常一样运行 `scrcpy`。如果它仍然提示找不到设备,尝试运行 `adb disconnect` 然后再次运行前述的两个命令。 + - 捕获设备前置摄像头并将其作为网络摄像头在电脑上展示(在Linux上): -[adb-wireless]: https://developer.android.com/studio/command-line/adb#connect-to-a-device-over-wi-fi-android-11+ + ```bash + scrcpy --video-source=camera --camera-size=1920x1080 --camera-facing=front --v4l2-sink=/dev/video2 --no-playback + ``` -降低比特率和分辨率可能很有用: + - 通过模拟物理键盘和鼠标控制设备而不进行镜像(不需要USB调试): -```bash -scrcpy --bit-rate=2M --max-size=800 -scrcpy -b2M -m800 # 简写 -``` + ```bash + scrcpy --otg + ``` -[连接]: https://developer.android.com/studio/command-line/adb.html#wireless + - 使用插入电脑的游戏手柄控制设备: + ```bash + scrcpy --gamepad=uhid + scrcpy -G # 简短版本 + ``` -#### 多设备 +## 用户文档 -如果 `adb devices` 列出了多个设备,您可以指定设备的 _序列号_ : +该应用程序提供了很多功能和配置选项。它们记录在以下页面中: -```bash -scrcpy --serial=0123456789abcdef -scrcpy -s 0123456789abcdef # 简写 -``` + - [连接](doc/connection.md) + - [视频](doc/video.md) + - [音频](doc/audio.md) + - [控制](doc/control.md) + - [键盘](doc/keyboard.md) + - [鼠标](doc/mouse.md) + - [游戏手柄](doc/gamepad.md) + - [设备](doc/device.md) + - [窗口](doc/window.md) + - [录制](doc/recording.md) + - [隧道](doc/tunnels.md) + - [OTG](doc/otg.md) + - [摄像头](doc/camera.md) + - [Video4Linux](doc/v4l2.md) + - [快捷键](doc/shortcuts.md) -序列号也可通过环境变量 `ANDROID_SERIAL` 提供(它也将被 `adb` 所使用) +## 资源 -如果设备通过 TCP/IP 连接: + - [FAQ](FAQ.md) + - [翻译][wiki](不一定是最新的) + - [构建说明](doc/build.md) + - [开发者](doc/develop.md) -```bash -scrcpy --serial=192.168.0.1:5555 -scrcpy -s 192.168.0.1:5555 # 简写 -``` +[wiki]: https://github.com/Genymobile/scrcpy/wiki -如果只有一个设备通过 USB 或 TCP/IP 连接,则可以自动选择它: +## 文章 -```bash -# 选择唯一已通过 USB 连接的设备 -scrcpy -d # 与 adb -d 类似 -scrcpy --select-usb # 完整命令 -# 选择唯一已通过 TCP/IP 连接的设备 -scrcpy -e # 与 adb -e 类似 -scrcpy --select-tcpip # 完整命令 -``` - -您可以同时启动多个 _scrcpy_ 实例以同时显示多个设备的画面。 - -#### 在设备连接时自动启动 - -您可以使用 [AutoAdb]: - -```bash -autoadb scrcpy -s '{}' -``` - -[AutoAdb]: https://github.com/rom1v/autoadb - -#### 隧道 - -要远程连接到设备,可以将本地的 ADB 客户端连接到远程的 ADB 服务端 (需要两端的 _ADB_ 协议版本相同)。 - -##### 远程 ADB 服务器 - -要连接到一个远程 _ADB 服务器_ ,让服务器在所有接口上监听: - -```bash -adb kill-server -adb -a nodaemon server start -# 保持该窗口开启 -``` - -**警告:所有客户端与 _ADB 服务器_ 的交流都是未加密的。** - -假设此服务器可在 192.168.1.2 访问。 然后,从另一个终端,运行 `scrcpy`: - -```bash -# 在 bash 中 -export ADB_SERVER_SOCKET=tcp:192.168.1.2:5037 -scrcpy --tunnel-host=192.168.1.2 -``` - -```cmd -:: 在 CMD 中 -set ADB_SERVER_SOCKET=tcp:192.168.1.2:5037 -scrcpy --tunnel-host=192.168.1.2 -``` - -```powershell -# 在 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 服务器_ 正在远程计算机上运行: - -```bash -adb start-server -``` - -然后,建立一个 SSH 隧道: - -```bash -# 本地 5038 --> 远程 5037 -# 本地 27183 <-- 远程 27183 -ssh -CN -L5038:localhost:5037 -R27183:localhost:27183 your_remote_computer -# 保持该窗口开启 -``` - -在另一个终端上,运行 `scrcpy`: - -```bash -# 在 bash 中 -export ADB_SERVER_SOCKET=tcp:localhost:5038 -scrcpy -``` - -```cmd -:: 在 CMD 中 -set ADB_SERVER_SOCKET=tcp:localhost:5038 -scrcpy -``` - -```powershell -# 在 PowerShell 中 -$env:ADB_SERVER_SOCKET = 'tcp:localhost:5038' -scrcpy -``` - -若要不使用远程端口转发,可以强制使用正向连接(注意是 `-L` 而不是 `-R` ): - -```bash -# 本地 5038 --> 远程 5037 -# 本地 27183 <-- 远程 27183 -ssh -CN -L5038:localhost:5037 -L27183:localhost:27183 your_remote_computer -# 保持该窗口开启 -``` - -在另一个终端上,运行 `scrcpy`: - -```bash -# 在 bash 中 -export ADB_SERVER_SOCKET=tcp:localhost:5038 -scrcpy --force-adb-forward -``` - -```cmd -:: 在 CMD 中 -set ADB_SERVER_SOCKET=tcp:localhost:5038 -scrcpy --force-adb-forward -``` - -```powershell -# 在 PowerShell 中 -$env:ADB_SERVER_SOCKET = 'tcp:localhost:5038' -scrcpy --force-adb-forward -``` - -类似地,对于无线连接,可能需要降低画面质量: - -``` -scrcpy -b2M -m800 --max-fps=15 -``` - -### 窗口设置 - -#### 标题 - -窗口的标题默认为设备型号。可以通过如下命令修改: - -```bash -scrcpy --window-title="我的设备" -``` - -#### 位置和大小 - -您可以指定初始的窗口位置和大小: - -```bash -scrcpy --window-x=100 --window-y=100 --window-width=800 --window-height=600 -``` - -#### 无边框 - -禁用窗口边框: - -```bash -scrcpy --window-borderless -``` - -#### 保持窗口在最前 - -您可以通过如下命令保持 `scrcpy` 的窗口在最前面: - -```bash -scrcpy --always-on-top -``` - -#### 全屏 - -您可以通过如下命令直接全屏启动 scrcpy: - -```bash -scrcpy --fullscreen -scrcpy -f # 简写 -``` - -全屏状态可以通过 MOD+f 随时切换。 - -#### 旋转 - -可以通过以下命令旋转窗口: - -```bash -scrcpy --rotation=1 -``` - -可选的值有: - - `0`: 无旋转 - - `1`: 逆时针旋转 90° - - `2`: 旋转 180° - - `3`: 顺时针旋转 90° - -也可以使用 MOD+ _(左箭头)_ 和 MOD+ _(右箭头)_ 随时更改。 - -需要注意的是, _scrcpy_ 中有三类旋转方向: - - MOD+r 请求设备在竖屏和横屏之间切换 (如果前台应用程序不支持请求的朝向,可能会拒绝该请求)。 - - [`--lock-video-orientation`](#锁定屏幕方向) 改变镜像的朝向 (设备传输到电脑的画面的朝向)。这会影响录制。 - - `--rotation` (或 MOD+/MOD+) 只旋转窗口的内容。这只影响显示,不影响录制。 - - -### 其他镜像设置 - -#### 只读 - -禁用电脑对设备的控制 (任何可与设备交互的方式:如键盘输入、鼠标事件和文件拖放): - -```bash -scrcpy --no-control -scrcpy -n -``` - -#### 显示屏 - -如果设备有多个显示屏,可以选择要镜像的显示屏: - -```bash -scrcpy --display=1 -``` - -可以通过如下命令列出所有显示屏的 id: - -``` -adb shell dumpsys display # 在输出中搜索 “mDisplayId=” -``` - -控制第二显示屏需要设备运行 Android 10 或更高版本 (否则将在只读状态下镜像)。 - - -#### 保持常亮 - -阻止设备在连接时一段时间后休眠: - -```bash -scrcpy --stay-awake -scrcpy -w -``` - -`scrcpy` 关闭时会恢复设备原来的设置。 - - -#### 关闭设备屏幕 - -可以通过以下的命令行参数在关闭设备屏幕的状态下进行镜像: - -```bash -scrcpy --turn-screen-off -scrcpy -S -``` - -或者在任何时候按 MOD+o。 - -要重新打开屏幕,按下 MOD+Shift+o。 - -在 Android 上,`电源` 按钮始终能把屏幕打开。为了方便,对于在 _scrcpy_ 中发出的 `电源` 事件 (通过鼠标右键或 MOD+p),会 (尽最大的努力) 在短暂的延迟后将屏幕关闭。设备上的 `电源` 按钮仍然能打开设备屏幕。 - -还可以同时阻止设备休眠: - -```bash -scrcpy --turn-screen-off --stay-awake -scrcpy -Sw -``` - -#### 退出时息屏 - -_scrcpy_ 退出时关闭设备屏幕: - -```bash -scrcpy --power-off-on-close -``` - -#### 当启动时开机 - -默认情况下,在启动时,设备已开机。 - -若要防止此行为,请执行以下操作: - -```bash -scrcpy --no-power-on -``` - -#### 显示触摸 - -在演示时,可能会需要显示 (在物理设备上的) 物理触摸点。 - -Android 在 _开发者选项_ 中提供了这项功能。 - -_Scrcpy_ 提供一个选项可以在启动时开启这项功能并在退出时恢复初始设置: - -```bash -scrcpy --show-touches -scrcpy -t -``` - -请注意这项功能只能显示 _物理_ 触摸 (用手指在屏幕上的触摸)。 - - -#### 关闭屏保 - -_Scrcpy_ 默认不会阻止电脑上开启的屏幕保护。 - -关闭屏幕保护: - -```bash -scrcpy --disable-screensaver -``` - - -### 输入控制 - -#### 旋转设备屏幕 - -使用 MOD+r 在竖屏和横屏模式之间切换。 - -需要注意的是,只有在前台应用程序支持所要求的模式时,才会进行切换。 - -#### 复制粘贴 - -每次安卓的剪贴板变化时,其内容都会被自动同步到电脑的剪贴板上。 - -所有的 Ctrl 快捷键都会被转发至设备。其中: - - Ctrl+c 通常执行复制 - - Ctrl+x 通常执行剪切 - - Ctrl+v 通常执行粘贴 (在电脑到设备的剪贴板同步完成之后) - -大多数时候这些按键都会执行以上的功能。 - -但实际的行为取决于设备上的前台程序。例如,_Termux_ 会在按下 Ctrl+c 时发送 SIGINT,又如 _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 设备不支持通过程序设置剪贴板。通过 `--legacy-paste` 选项可以修改 Ctrl+vMOD+v 的工作方式,使它们通过按键事件 (同 MOD+Shift+v) 来注入电脑剪贴板内容。 - -要禁用自动剪贴板同步功能,使用`--no-clipboard-autosync`。 - -#### 双指缩放 - -模拟“双指缩放”:Ctrl+_按下并拖动鼠标_。 - -在按住 Ctrl 时按下鼠标左键,直到松开鼠标左键前,移动鼠标会使屏幕内容相对于屏幕中心进行缩放或旋转 (如果应用支持)。 - -从技术上来说,_scrcpy_ 会在鼠标位置,以及鼠标以屏幕中心镜像的位置分别生成触摸事件。 - -#### 物理键盘模拟 (HID) - -默认情况下,_scrcpy_ 使用安卓按键或文本注入,这在任何情况都可以使用,但仅限于 ASCII 字符。 - -或者,scrcpy 可以模拟为 Android 上的物理 USB 键盘,以提供更好地输入体验 (使用 [USB HID over AOAv2][hid-aoav2]):禁用虚拟键盘,并适用于任何字符和输入法。 - -[hid-aoav2]: https://source.android.com/devices/accessories/aoa2#hid-support - -不过,这种方法仅支持通过 USB 连接的设备。 - -注意:在 Windows 上,它可能只在 [OTG 模式](#otg) 下有效,而不能在镜像时(如果 USB 设备已被另一个进程打开,则无法打开它,就像 _adb 守护进程_ 一样) - -启用 HID 模式: - -```bash -scrcpy --hid-keyboard -scrcpy -K # 简写 -``` - -如果失败了 (如设备未通过 USB 连接),则自动回退至默认模式 (终端中会输出日志)。这即允许通过 USB 和 TCP/IP 连接时使用相同的命令行参数。 - -在这种模式下,原始按键事件 (扫描码) 被发送给设备,而与宿主机按键映射无关。因此,若键盘布局不匹配,需要在 Android 设备上进行配置,具体为 设置 → 系统 → 语言和输入法 → [实体键盘]。 - -[实体键盘]: https://github.com/Genymobile/scrcpy/pull/2632#issuecomment-923756915 - -#### 物理鼠标模拟 (HID) - -与物理键盘模拟类似,可以模拟一个物理鼠标。同样,它仅在设备通过 USB 连接时才有效。 - -默认情况下,_scrcpy_ 使用 Android 鼠标事件注入,使用绝对坐标。 通过模拟物理鼠标,在Android设备上出现鼠标指针,并注入鼠标相对运动、点击和滚动。 - -启用此模式: - -```bash -scrcpy --hid-mouse -scrcpy -M # 简写 -``` - -您还可以将 `--forward-all-clicks` 添加到 [转发所有点击][forward_all_clicks]. - -[forward_all_clicks]: #右键和中键 - -启用此模式后,计算机鼠标将被“捕获”(鼠标指针从计算机上消失并出现在 Android 设备上)。 - -特殊的捕获键,AltSuper,切换(禁用或启用)鼠标捕获。 使用其中之一将鼠标的控制权交还给计算机。 - - -#### OTG - -可以仅使用物理键盘和鼠标模拟 (HID) 运行 _scrcpy_,就好像计算机键盘和鼠标通过 OTG 线直接插入设备一样。 - -在这个模式下,`adb` (USB 调试)是不必要的,且镜像被禁用。 - -启用 OTG 模式: - -```bash -scrcpy --otg -# 如果有多个 USB 设备可用,则通过序列号选择 -scrcpy --otg -s 0123456789abcdef -``` - -只开启 HID 键盘 或 HID 鼠标 是可行的: - -```bash -scrcpy --otg --hid-keyboard # 只开启 HID 键盘 -scrcpy --otg --hid-mouse # 只开启 HID 鼠标 -scrcpy --otg --hid-keyboard --hid-mouse # 开启 HID 键盘 和 HID 鼠标 -# 为了方便,默认两者都开启 -scrcpy --otg # 开启 HID 键盘 和 HID 鼠标 -``` - -像 `--hid-keyboard` 和 `--hid-mouse` 一样,它只在设备通过 USB 连接时才有效。 - - -#### 文本注入偏好 - -输入文字的时候,系统会产生两种[事件][textevents]: - - _按键事件_ ,代表一个按键被按下或松开。 - - _文本事件_ ,代表一个字符被输入。 - -程序默认使用按键事件来输入字母。只有这样,键盘才会在游戏中正常运作 (例如 WASD 键)。 - -但这也有可能[造成一些问题][prefertext]。如果您遇到了问题,可以通过以下方式避免: - -```bash -scrcpy --prefer-text -``` - -(但这会导致键盘在游戏中工作不正常) - -相反,您可以强制始终注入原始按键事件: - -```bash -scrcpy --raw-key-events -``` - -该选项不影响 HID 键盘 (该模式下,所有按键都发送为扫描码)。 - -[textevents]: https://blog.rom1v.com/2018/03/introducing-scrcpy/#handle-text-input -[prefertext]: https://github.com/Genymobile/scrcpy/issues/650#issuecomment-512945343 - - -#### 按键重复 - -默认状态下,按住一个按键不放会生成多个重复按键事件。在某些游戏中这通常没有实际用途,且可能会导致性能问题。 - -避免转发重复按键事件: - -```bash -scrcpy --no-key-repeat -``` - -该选项不影响 HID 键盘 (该模式下,按键重复由 Android 直接管理)。 - -#### 右键和中键 - -默认状态下,右键会触发返回键 (或电源键开启),中键会触发 HOME 键。要禁用这些快捷键并把所有点击转发到设备: - -```bash -scrcpy --forward-all-clicks -``` - - -### 文件拖放 - -#### 安装APK - -将 APK 文件 (文件名以 `.apk` 结尾) 拖放到 _scrcpy_ 窗口来安装。 - -不会有视觉反馈,终端会输出一条日志。 - - -#### 将文件推送至设备 - -要推送文件到设备的 `/sdcard/Download/`,将 (非 APK) 文件拖放至 _scrcpy_ 窗口。 - -不会有视觉反馈,终端会输出一条日志。 - -在启动时可以修改目标目录: - -```bash -scrcpy --push-target=/sdcard/Movies/ -``` - - -### 音频转发 - -_Scrcpy_ 不支持音频。请使用 [sndcpy]。 - -另见 [issue #14]。 - -[sndcpy]: https://github.com/rom1v/sndcpy -[issue #14]: https://github.com/Genymobile/scrcpy/issues/14 - - -## 快捷键 - -在以下列表中, MOD 是快捷键的修饰键。 -默认是 (左) Alt 或 (左) Super。 - -您可以使用 `--shortcut-mod` 来修改。可选的按键有 `lctrl`、`rctrl`、`lalt`、`ralt`、`lsuper` 和 `rsuper`。例如: - -```bash -# 使用右 Ctrl 键 -scrcpy --shortcut-mod=rctrl - -# 使用左 Ctrl 键 + 左 Alt 键,或 Super 键 -scrcpy --shortcut-mod=lctrl+lalt,lsuper -``` - -_[Super] 键通常是指 WindowsCmd 键。_ - -[Super]: https://en.wikipedia.org/wiki/Super_key_(keyboard_button) - - | 操作 | 快捷键 - | --------------------------------- | :------------------------------------------- - | 全屏 | MOD+f - | 向左旋转屏幕 | MOD+ _(左箭头)_ - | 向右旋转屏幕 | MOD+ _(右箭头)_ - | 将窗口大小重置为1:1 (匹配像素) | MOD+g - | 将窗口大小重置为消除黑边 | MOD+w \| _双击左键¹_ - | 点按 `主屏幕` | MOD+h \| _中键_ - | 点按 `返回` | MOD+b \| _右键²_ - | 点按 `切换应用` | MOD+s \| _第4键³_ - | 点按 `菜单` (解锁屏幕)⁴ | MOD+m - | 点按 `音量+` | MOD+ _(上箭头)_ - | 点按 `音量-` | MOD+ _(下箭头)_ - | 点按 `电源` | MOD+p - | 打开屏幕 | _鼠标右键²_ - | 关闭设备屏幕 (但继续在电脑上显示) | MOD+o - | 打开设备屏幕 | MOD+Shift+o - | 旋转设备屏幕 | MOD+r - | 展开通知面板 | MOD+n \| _第5键³_ - | 展开设置面板 | MOD+n+n \| _双击第5键³_ - | 收起通知面板 | MOD+Shift+n - | 复制到剪贴板⁵ | MOD+c - | 剪切到剪贴板⁵ | MOD+x - | 同步剪贴板并粘贴⁵ | MOD+v - | 注入电脑剪贴板文本 | MOD+Shift+v - | 打开/关闭FPS显示 (至标准输出) | MOD+i - | 捏拉缩放 | Ctrl+_按住并移动鼠标_ - | 拖放 APK 文件 | 从电脑安装 APK 文件 - | 拖放非 APK 文件 | [将文件推送至设备](#push-file-to-device) - -_¹双击黑边可以去除黑边。_ -_²点击鼠标右键将在屏幕熄灭时点亮屏幕,其余情况则视为按下返回键 。_ -_³鼠标的第4键和第5键。_ -_⁴对于开发中的 react-native 应用程序,`MENU` 触发开发菜单。_ -_⁵需要安卓版本 Android >= 7。_ - -有重复按键的快捷键通过松开再按下一个按键来进行,如“展开设置面板”: - - 1. 按下 MOD 不放。 - 2. 双击 n。 - 3. 松开 MOD。 - -所有的 Ctrl+_按键_ 的快捷键都会被转发到设备,所以会由当前应用程序进行处理。 - - -## 自定义路径 - -要使用指定的 `adb` 二进制文件,可以设置环境变量 `ADB`: - -```bash -ADB=/path/to/adb scrcpy -``` - -要覆盖 `scrcpy-server` 的路径,可以设置 `SCRCPY_SERVER_PATH`。 - -要覆盖图标,可以设置其路径至 `SCRCPY_ICON_PATH`。 - - -## 为什么叫 _scrcpy_ ? - -一个同事让我找出一个和 [gnirehtet] 一样难以发音的名字。 - -[`strcpy`] 源于 **str**ing (字符串); `scrcpy` 源于 **scr**een (屏幕)。 - -[gnirehtet]: https://github.com/Genymobile/gnirehtet -[`strcpy`]: http://man7.org/linux/man-pages/man3/strcpy.3.html - - -## 如何构建? - -请查看 [BUILD]。 - - -## 常见问题 - -请查看 [FAQ]。 - -[FAQ]: https://github.com/Genymobile/scrcpy/blob/master/FAQ.md - - -## 开发者 - -请查看[开发者页面][DEVELOP]。 - -[DEVELOP]: https://github.com/Genymobile/scrcpy/blob/master/DEVELOP.md - -## 联系 - -如果遇到错误,请先阅读 [FAQ],然后再打开 [issue]。 - -[issue]: https://github.com/Genymobile/scrcpy/issues - -对于一般问题或讨论,您还可以使用: - -- Reddit: [`r/scrcpy`](https://www.reddit.com/r/scrcpy) -- Twitter: [`@scrcpy_app`](https://twitter.com/scrcpy_app) - -## 许可协议 - - Copyright (C) 2018 Genymobile - Copyright (C) 2018-2022 Romain Vimont - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -## 相关文章 - -- [Introducing scrcpy][article-intro] -- [Scrcpy now works wirelessly][article-tcpip] +- [介绍scrcpy][article-intro] +- [Scrcpy现在可以无线工作][article-tcpip] +- [Scrcpy 2.0,带音频][article-scrcpy2] [article-intro]: https://blog.rom1v.com/2018/03/introducing-scrcpy/ [article-tcpip]: https://www.genymotion.com/blog/open-source-project-scrcpy-now-works-wirelessly/ +[article-scrcpy2]: https://blog.rom1v.com/2023/03/scrcpy-2-0-with-audio/ + +## 联系方式 + +你可以为bug报告、功能请求或一般问题打开一个[issue]。 + +对于bug报告,请先阅读[FAQ](FAQ.md),你可能会立即找到问题的解决方案。 + +[issue]: https://github.com/Genymobile/scrcpy/issues + +你也可以使用: + + - Reddit: [`r/scrcpy`](https://www.reddit.com/r/scrcpy) + - Twitter: [`@scrcpy_app`](https://twitter.com/scrcpy_app) + +## 捐赠 + +我是[@rom1v](https://github.com/rom1v),scrcpy的作者和维护者。 + +如果你喜欢这个应用程序,你可以[支持我的开源工作][donate]: + - [GitHub Sponsors](https://github.com/sponsors/rom1v) + - [Liberapay](https://liberapay.com/rom1v/) + - [PayPal](https://paypal.me/rom2v) + +[donate]: https://blog.rom1v.com/about/#support-my-open-source-work + +## 许可证 + + 版权所有 (C) 2018 Genymobile + 版权所有 (C) 2018-2024 Romain Vimont + + 根据Apache许可证2.0版(“许可证”)授权; + 除非符合许可证,否则你不能使用这个文件。 + 你可以在以下网址获取许可证副本: + + http://www.apache.org/licenses/LICENSE-2.0 + + 除非适用法律要求或书面同意,按许可证分发的软件 + 是按“原样”分发的,没有任何明示或暗示的担保。 + 参见许可证了解管理权限和限制的具体语言。 \ No newline at end of file