跳转到内容

Scrcpy 隧道连接

Scrcpy 主要用于镜像本地 Android 设备。通过隧道方式可以连接到远程设备(例如,通过互联网)。

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

要连接到远程的 adb server,让该服务器监听所有网络接口:

Terminal window
adb kill-server
adb -a nodaemon server start
# keep this open

警告:客户端与 adb server 之间的所有通信均为未加密。

假设该服务器可通过 192.168.1.2 访问。随后,在另一终端运行 scrcpy

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

要安全地与远程 adb server 通信,建议使用 SSH 隧道。

首先确保远程电脑上的 adb server 已运行:

Terminal window
adb start-server

然后,建立 SSH 隧道:

Terminal window
# 本地 5038 --> 远程 5037
# 本地 27183 <-- 远程 27183
ssh -CN -L5038:localhost:5037 -R27183:localhost:27183 your_remote_computer
# 保持该会话开启

在另一终端运行 scrcpy

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

为避免开启远程端口转发,你也可以改用强制正向连接(注意此处使用 -L 而非 -R):

Terminal window
# 本地 5038 --> 远程 5037
# 本地 27183 --> 远程 27183
ssh -CN -L5038:localhost:5037 -L27183:localhost:27183 your_remote_computer
# 保持该会话开启

在另一终端运行 scrcpy

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