隧道

Scrcpy 设计用于镜像本地 Android 设备。隧道允许连接到远程设备(例如通过互联网)。

要连接到远程设备,可以将本地 adb 客户端连接到远程 adb 服务器(前提是它们使用相同的 adb 协议版本)。

远程 ADB 服务器

要连接到远程的 adb 服务器,请让服务器监听所有接口:

adb kill-server
adb -a nodaemon server start
# 保持打开

警告:客户端与 adb 服务器 之间的所有通信都是未加密的。

假设这个服务器可以访问,位于 192.168.1.2。然后,在另一个终端中运行 scrcpy

# 在 bash 中
export ADB_SERVER_SOCKET=tcp:192.168.1.2:5037
scrcpy --tunnel-host=192.168.1.2
:: 在 cmd 中
set ADB_SERVER_SOCKET=tcp:192.168.1.2:5037
scrcpy --tunnel-host=192.168.1.2
# 在 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 隧道:

# 本地 5038 --> 远程 5037
# 本地 27183 <-- 远程 27183
ssh -CN -L5038:localhost:5037 -R27183:localhost:27183 your_remote_computer
# 保持打开

从另一个终端运行 scrcpy

# 在 bash 中
export ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy
:: 在 cmd 中
set ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy
# 在 PowerShell 中
$env:ADB_SERVER_SOCKET = 'tcp:localhost:5038'
scrcpy

为了避免启用远程端口转发,您可以强制建立一个前向连接(注意 -L 而不是 -R):

# 本地 5038 --> 远程 5037
# 本地 27183 --> 远程 27183
ssh -CN -L5038:localhost:5037 -L27183:localhost:27183 your_remote_computer
# 保持打开

从另一个终端运行 scrcpy

# 在 bash 中
export ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy --force-adb-forward
:: 在 cmd 中
set ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy --force-adb-forward
# 在 PowerShell 中
$env:ADB_SERVER_SOCKET = 'tcp:localhost:5038'
scrcpy --force-adb-forward