树莓派之前吃灰了将近半年直到我把一台老旧的 Windows 笔记本扔在老家当“文件中转站”才意识到远程桌面这东西还是得自建才靠谱。TeamViewer 动不动弹商用检测向日葵免费版限速限得视频都看不清于是我把目光放到开源方案 RustDesk 上。折腾了一晚上用树莓派 4B 跑起了 RustDesk 服务器配合内网穿透实现了外网访问实测连接延迟在可接受范围内画面流畅度比我想象中好很多。这篇就把完整过程写下来从系统准备到外网访问再到几个坑的排查方法尽量把我踩过的坑都标出来。这套方案适合谁手头有树莓派 4B或者其他 Linux 小主机的人需要频繁远程控制自己多台电脑的人或者想给家里人远程修电脑、又不想把数据经过第三方服务器的朋友。RustDesk 本身就是开源项目自建服务器之后设备列表、连接记录、文件传输全部走自己的服务器数据传输链路也不经过商业服务商隐私性和稳定性都有了保证。1. 为什么是树莓派 4B RustDesk自建远程桌面服务器的思路拆解1.1 远程桌面场景的真实痛点远程桌面这件事大多数普通用户第一反应是 QQ 远程协助、TeamViewer、AnyDesk 或者向日葵。这些商业方案确实做到了“零门槛”装好软件就能用但用久了问题就来了。首先是限速和限制。免费版 TeamViewer 会不定期弹窗“检测到商业用途”一旦被判定商用连接直接断开。向日葵免费版在跨网络场景下经常把画质压缩到马赛克级别而且长时间连接偶尔会掉线重连。AnyDesk 相对良心一点但中继服务器在国外国内网络环境下延迟不太稳定。其次是数据链路问题。商业软件默认走厂商的中继服务器你的屏幕画面、剪贴板内容、传输的文件都要经过第三方虽然一般有加密但敏感数据过一手总归让人不踏实。RustDesk 的架构是开源的客户端源码在 GitHub 上全公开服务器端也有官方 Docker 镜像数据走自己的服务器这一点对注重隐私的玩家来说非常关键。1.2 RustDesk 的核心优势RustDesk 的架构其实借鉴了 TeamViewer 那套 ID/中继模型但做了开源实现。简单说一台设备装了 RustDesk 客户端之后它会向服务器注册一个 9 位数字 ID另一台设备通过这个 ID 发起连接服务器负责协调握手。如果两台设备处于同一个局域网或者 NAT 类型允许RustDesk 会尝试 P2P 直连打洞流量不经过服务器如果打洞失败流量就走服务器中继。RustDesk 的优势主要体现在这几个方面开源免费没有商业授权限制部署在自家设备上想怎么用就怎么用支持 Windows、macOS、Linux、Android、iOS覆盖全平台自建服务器后不限速、不限时长、不弹广告底层基于 Rust 编写性能和内存占用控制得比较好支持 TCP/UDP 两种中继方式内网直连时几乎感觉不到延迟1.3 为什么选择树莓派 4B 当服务器树莓派 4B 虽然已经是 2019 年的产品但作为 RustDesk 服务器完全够用。RustDesk 服务器端由两个轻量级进程构成hbbs 负责 ID 注册和信令协调hbbr 负责流量中继单个进程的内存占用通常在 100MB 以内CPU 占用也极低。树莓派 4B 最低配 1GB 内存版本都能跑得很轻松更别说 4GB/8GB 版本。树莓派的最大优势是功耗。整板功耗大概在 3W 到 5W 左右加上散热片和风扇也不会超过 7W一年 24 小时开机也就三四十度电比用一台旧电脑当服务器划算得多。另外树莓派体积小可以藏在弱电箱或者电视柜旁边插个充电头就能长期运行。不过树莓派 4B 现在全新价格被炒得偏高如果手头没有现成的可以考虑买二手或者直接用闲置的 mini 主机、软路由、Armbian 电视盒子都行。RustDesk 服务器端有 Linux 通用二进制包x86 平台跑起来更没压力只是功耗会高一些。2. 部署前的系统准备树莓派 4B 跑 Ubuntu Server 22.04 LTS2.1 镜像选择与烧录工具树莓派官方系统 Raspberry Pi OS 基于 Debian跑 RustDesk 服务器肯定没问题但我个人更习惯用 Ubuntu Server 22.04 LTS。原因有三一是 Ubuntu 的软件源在国内有镜像apt 安装依赖速度快二是 Ubuntu Server 版本更纯粹没有桌面环境省内存三是 RustDesk 官方文档里对 Debian/Ubuntu 的支持说明最详细遇到问题也好搜。树莓派 4B 需要用 arm64 架构镜像对应 Ubuntu Server 的ubuntu-22.04.3-preinstalled-server-arm64raspi.img.xz。注意不要下成 32 位 armhf 版本虽然能跑但官方 Docker 镜像和部分二进制包对 64 位的支持更完善。烧录工具推荐直接用树莓派官方的 Raspberry Pi Imager操作最简单。打开 Imager 后选择“Choose OS”往下翻到 “Other general-purpose OS” 里的 Ubuntu选 22.04 LTS 64 位版本然后选择 SD 卡点写入即可。写入过程中 Imager 会提示是否要设置 SSH 和 WiFi这个功能很实用强烈建议在烧录阶段就配置好省得后面接显示器键盘去配置网络。2.2 系统首次启动与网络配置如果烧录时没有配置 WiFi首次启动就需要有线网络连接。把树莓派用网线连上路由器插电开机等一两分钟在路由器管理后台找到分配给树莓派的 IP 地址通过 SSH 登录。默认账号是ubuntu密码ubuntu首次登录会强制要求修改密码按提示操作即可。建议登录后马上配置 WiFi这样后续可以拔掉网线让树莓派无线接入网络。sudo nmcli device wifi connect 你的WiFi名称 password 你的WiFi密码设置静态 IP 地址sudo nmcli connection modify 你的WiFi名称 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 223.5.5.5 119.29.29.29 sudo nmcli connection up 你的WiFi名称静态 IP 很重要。RustDesk 服务器运行在内网如果以后 Docker 容器、frp 隧道、端口转发规则都绑定了这个 IPDHCP 地址一变就全乱套了。我在这一步吃过亏第一次部署时没设静态 IP路由器重启之后树莓派地址变了所有连接全断排查了半天才发现是地址变了。2.3 系统更新与基础依赖系统装好之后先做一遍完整的软件源更新sudo apt update sudo apt upgrade -y然后安装基础工具包括 curl、ufw、fail2ban 这些后面会用到的组件sudo apt install -y curl wget ufw fail2ban ca-certificates gnupg lsb-releaseDocker 可选装。RustDesk 官方提供了 Docker 镜像用 Docker 部署确实很省事不用手动管理进程和依赖。但如果你想把资源占用压到最低直接跑官方二进制包也行。我的建议新手用 Docker老手用二进制两者差异后面细说。在装 Docker 之前先把 UFW 防火墙规则想清楚。RustDesk 服务器需要放行的端口有这些端口协议用途21115TCPNAT 类型探测21116TCP/UDPID 注册与心跳服务hbbs21117TCP中继服务hbbr21118/21119TCPWeb 客户端支持这四个端口就是 RustDesk 服务器的全部家当。先放行内网访问等外网穿透配好后再放开公网访问端口。sudo ufw allow 22/tcp sudo ufw allow 21115:21119/tcp sudo ufw allow 21116/udp sudo ufw enable注意如果你后面打算用 frp 内网穿透方案公网上的访问请求会先打到一台公网服务器再由 frp 隧道转发到树莓派这种情况下树莓派的 UFW 只放行内网端口就够了公网路由器端口转发到树莓派也只在局域网内生效安全边界从路由器那一层就已经挡住了大部分扫描。3. RustDesk 服务器核心部署两个进程、一条命令、一份密钥3.1 hbbs 与 hbbr 各司其职RustDesk 服务器端有三个组件但核心角色是两个hbbs 和 hbbr。hbbsID/rendezvous server是信令服务器它的职责是维护所有客户端的 ID 与地址映射关系。当客户端启动时它会向 hbbs 注册自己的 ID 和当前网络地址当另一台客户端要连接这个 ID 时hbbs 负责把两端的信息互相告知促成连接建立。这个角色有点像电话总机本身不传声音但负责接通线路。hbbrrelay server是中继服务器当两台客户端无法建立 P2P 直连时流量就会走 hbbr 转发。中继模式下画面质量、延迟都取决于你的服务器带宽和网络质量。树莓派跑在家庭宽带下上行带宽一般有 30Mbps 到 50Mbps远程办公场景下看文档、操作软件完全够用但如果是 4K 视频剪辑这种需要大流量传输的场景就会比较吃力。两个进程用一条命令就能启动但要正确地传参数。3.2 快速部署方案二进制包直装先介绍最直接的二进制部署方式。RustDesk GitHub Releases 页面提供了 Linux 服务器端压缩包分amd64和arm64架构树莓派 4B 要选 arm64 版本。cd /opt sudo wget https://github.com/rustdesk/rustdesk-server/releases/download/1.1.14/rustdesk-server-linux-arm64.zip sudo unzip rustdesk-server-linux-arm64.zip sudo mv arm64/rustdesk-server-linux-arm64/ /opt/rustdesk-server cd /opt/rustdesk-server目录里主要就是hbbs和hbbr两个可执行文件。直接启动sudo ./hbbs -r 你的域名或IP -k 你的自定义密钥 sudo ./hbbr -k 你的自定义密钥 参数解释-r指定客户端连接时使用的中继服务器地址填域名或公网 IP 都可以。这个地址会写入客户端生成的配置中所以填错了客户端就连不上-k指定一个加密密钥客户端注册时需要填写同样的 Key 才能连接如果没有这个 Key任何人都能连你的服务器用是简单粗暴的后台启动方式实测可以跑但重启之后不会自动拉起需要借助 systemd 服务把进程托管给 systemd 更稳妥。创建/etc/systemd/system/rustdesk-hbbs.service[Unit] DescriptionRustDesk Signal Server Afternetwork.target [Service] Typesimple ExecStart/opt/rustdesk-server/hbbs -r 你的域名或IP -k 你的自定义密钥 Restartalways RestartSec5 [Install] WantedBymulti-user.target再创建/etc/systemd/system/rustdesk-hbbr.service[Unit] DescriptionRustDesk Relay Server Afternetwork.target [Service] Typesimple ExecStart/opt/rustdesk-server/hbbr -k 你的自定义密钥 Restartalways RestartSec5 [Install] WantedBymulti-user.target然后启用服务sudo systemctl daemon-reload sudo systemctl enable --now rustdesk-hbbs sudo systemctl enable --now rustdesk-hbbr这里设置的密钥字符串要记好。它不仅是服务器端用于生成密钥对的基础还关系到客户端连接时的验证。RustDesk 的机制是服务器用这个字符串派生出一对 RSA 密钥客户端配置时需要填入这个 Key 才能通过验证。如果你换了密钥所有已配置的客户端都得重新填。3.3 快速部署方案Docker 容器化如果不想折腾 systemd 和二进制文件Docker 方案更省心。官方镜像rustdesk/rustdesk-server已支持 arm64 架构直接用 Docker Compose 管理。创建目录并编写 docker-compose.ymlmkdir -p /opt/rustdesk cd /opt/rustdeskversion: 3 services: hbbs: container_name: hbbs image: rustdesk/rustdesk-server:latest command: hbbs -r 你的域名或IP -k 你的自定义密钥 volumes: - ./data:/root network_mode: host restart: unless-stopped hbbr: container_name: hbbr image: rustdesk/rustdesk-server:latest command: hbbr -k 你的自定义密钥 volumes: - ./data:/root network_mode: host restart: unless-stopped注意这里用了network_mode: host让容器直接共享宿主机网络省去端口映射的麻烦。RustDesk 的服务器端要监听多个端口用 host 模式最直观不需要逐个映射端口。启动docker compose up -d数据目录./data会保存生成的密钥文件备份的时候记得把这个目录一起拷走。Docker 方式和二进制方式二选一就好不要同时跑两套否则端口会冲突。我本人偏好二进制 systemd 方案因为少了一层 Docker 抽象排查问题更直接而且树莓派这种低功耗设备上能省几十 MB 内存。但对于不太熟悉 Linux 服务的用户Docker 更不容易出错。3.4 验证服务器是否正常工作部署完成后用ss命令检查端口监听状态sudo ss -tulpn | grep -E 21115|21116|21117正常输出里能看到 hbbs 监听 21115、21116 的 TCP/UDP 端口hbbr 监听 21117 的 TCP 端口。如果没有看到用journalctl -u rustdesk-hbbs -f或docker logs hbbs查看日志排查。RustDesk 服务器的部署逻辑就到这里真正折腾人的是接下来的外网访问部分。我最初只在内网测试时一切正常一旦切换到 4G 网络就完全连不上那时候才意识到自建服务器真正难的地方不在“建”而在“通”。4. 外网访问配置没有公网 IP 照样稳定远程连接4.1 三种外网访问方案对比要让远程桌面在任何网络环境下都能连接需要解决的就是“从公网访问到树莓派”这个问题。根据你有没有公网 IP有三条路可以走。方案一是公网 IP 端口转发。如果你的宽带运营商分配了公网 IPv4 地址直接在路由器上做端口映射把前面说的 21115-21119 端口转发到树莓派的 IP 上然后在 RustDesk 客户端里填公网 IP 和密钥就行。这是最稳定、延迟最低的方案打洞成功率也最高。问题是现在很多宽带默认不给公网 IPv4打电话找客服要也不一定给而且从安全角度考虑直接暴露端口给公网扫描器需要做好防护。方案二是 DDNS 端口转发。公网 IP 一般会不定期变化用 DDNS 服务比如花生壳、DuckDNS或者路由器自带的 DDNS 功能把动态 IP 绑定到一个域名上客户端填域名而不是 IP。这个方案依赖路由器支持 DDNS本质还是方案一的延伸。方案三是 frp 内网穿透。如果你没有公网 IP或者不想暴露家里宽带的端口就在一台有公网 IP 的云服务器上跑 frps在树莓派跑 frpc把 RustDesk 的端口转发到云服务器上。客户端统一连接云服务器的 IP 和端口数据再从云服务器转发回树莓派。这个方案多了一个中转节点延迟会稍微增加但胜在稳定可控不依赖宽带运营商。下面用表格做个对比方便你根据自己的条件选方案需要公网IP平均延迟稳定性成本公网IP 端口转发需要最低最好0元DDNS 端口转发需要最低良好0元DDNS免费frp内网穿透不需要略高取决于云服务器云服务器月租4.2 完整实操用 frp 搭建 RustDesk 的外网隧道我因为家里宽带没有公网 IPv4用的就是 frp 方案。这里以一台 1 核 2G 的云服务器为例操作系统是 Ubuntu 22.04。先在这台公网服务器上下载 frpscd /opt wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz tar -xzf frp_0.52.3_linux_amd64.tar.gz cd frp_0.52.3_linux_amd64编辑 frps.toml新版 frp 的配置格式bindPort 7000 auth.token 你自己设置的一个随机字符串 allowPorts [ { start 21115, end 21119 } ]启动 frps 服务然后把 frpc 放到树莓派上。frpc 配置如下serverAddr 你的云服务器IP serverPort 7000 auth.token 你自己设置的一个随机字符串 [[proxies]] name rustdesk-nat-type-test type tcp localIP 127.0.0.1 localPort 21115 remotePort 21115 [[proxies]] name rustdesk-hbbs-1 type tcp localIP 127.0.0.1 localPort 21116 remotePort 21116 [[proxies]] name rustdesk-hbbs-2 type udp localIP 127.0.0.1 localPort 21116 remotePort 21116 [[proxies]] name rustdesk-hbbr type tcp localIP 127.0.0.1 localPort 21117 remotePort 21117注意21116 要分别配置 TCP 和 UDP 的转发。RustDesk 的 ID 注册与心跳服务同时使用 TCP 和 UDP只转发 TCP 会导致客户端 ID 离线。这一步非常关键我第一次配置的时候漏掉了 UDP 端口现象是内网能连、外网死活连不上排查到半夜才发现问题。在树莓派上运行 frpccd /opt wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_arm64.tar.gz tar -xzf frp_0.52.3_linux_arm64.tar.gz cd frp_0.52.3_linux_arm64 sudo vim frpc.toml sudo ./frpc -c frpc.toml同样建议把 frpc 托管给 systemd设置Restartalways避免服务器重启后隧道不自动恢复。配置完成后在客户端填服务器的地址时填云服务器的公网 IP 和端口即可。由于 frp 的 remotePort 保持了和本地端口一致所以 RustDesk 客户端的配置和直接在局域网连接时一样不用额外改端口号。4.3 安全加固公网暴露下的三重防护RustDesk 服务器一旦暴露到公网就意味着全世界任何人都能尝试连接你的 21115-21119 端口。如果密钥泄露或者太简单别人就能蹭你的服务器转发流量甚至在开放注册的情况下把你的服务器当作匿名中继。我的经验是至少做三重防护。第一重是启用防火墙白名单。云服务器上只放行 frps 的 7000 端口和 21115-21119 端口其他全关。树莓派本地只允许局域网和 frpc 访问使用 UFW 限制sudo ufw allow from 192.168.1.0/24 to any port 21115:21119 proto tcp sudo ufw allow from 127.0.0.1 to any port 21115:21119 proto tcp sudo ufw reload第二重是给 RustDesk 设置一个足够复杂的 Key。不要用123456这种RustDesk 社区里已经有人扫描默认密钥并蹭服务器至少用 16 位以上的随机字符串openssl rand -hex 16第三重是部署 fail2ban 监控 SSH。虽然 frp 方案没有直接暴露树莓派的 SSH但云服务器的 SSH 端口默认 22 会一直遭到暴力扫描。配置 fail2ban 能自动封禁多次登录失败的 IPsudo systemctl enable fail2ban sudo systemctl start fail2ban4.4 外网访问的注意事项在外网访问配置完成后建议先在 4G/5G 网络下实测一次。重点看几个现象客户端是否能正常显示设备在线状态、连接时是否提示“无法穿透使用中继”、画面卡顿是否明显。如果外网连接时提示无法中继优先检查 frps 的日志和 frpc 的连接状态。一般就两类问题一是 UDP 端口没转发二是云服务器安全组忘了放行端口。很多云厂商有安全组策略光在系统里放行是不够的控制台里的安全组规则也得同步修改。另外RustDesk 服务器部署后你可能会注意到客户端 ID 服务器地址和 Key 是保存在客户端配置里的。如果你换了服务器地址或者重置了密钥所有客户端都要重新配置。所以建议在客户端配置好之后顺手在 RustDesk 里导出配置后面批量部署到多台设备时能省下大把时间。5. 客户端接入与多终端实测5.1 Windows / macOS 客户端配置客户端部分比较无脑从 RustDesk 官网下载对应系统版本安装打开主界面后在右侧找到“ID/中继服务器”设置入口。设置页面有三个关键项ID 服务器、中继服务器、Key。ID 服务器填你的服务器地址域名或 IP中继服务器填同样的地址Key 填部署时设置的自定义密钥。如果填错了连接时会出现“无法连接”或“密钥错误”的提示。以 Windows 客户端为例填入后点“确定”软件会自动重新加载配置。看到主界面左下角出现“就绪”状态说明已经成功连上服务器此时远端的设备 ID 会出现在列表中双击即可发起连接。macOS 的配置流程完全一样只是菜单入口在“RustDesk 偏好设置”里。Android 和 iOS 客户端则在右上角菜单中的“设置”里同样是填三项内容逻辑一致。5.2 手机端接入与体验手机端接入的意义在于随时能查看电脑状态或者处理一些简单操作。Android 端配置完成后可以从手机控制电脑iOS 端因为系统限制控制端能力弱一些但被控端是可以的比如用 iPad 当被控屏幕。实测下来局域网环境下手机控电脑的延迟在 20ms 左右操作非常跟手4G 网络下延迟在 80ms 到 150ms 之间轻度办公操作没问题但如果需要精细操作比如拖动 Excel 滑块、Photoshop 调色还是得回到 PC 端。5.3 实测数据内外网连接对比我在实际测试中记录了三种场景下的连接质量数据场景平均延迟画面质量操作跟手度局域网 P2P 直连约 20ms原画质完全跟手4G 网络 P2P 打洞成功约 60ms原画质轻微延迟感4G 网络走中继转发约 120ms根据带宽自适应有一定延迟但不影响操作走中继时如果两台设备之间的网络状况差RustDesk 会自动降低画质来保证流畅度。实测中中继模式下看文档、操作文件管理器都很流畅播放视频会有明显卡顿这属于中继方案的物理限制不是软件问题。6. 常见问题与排查技巧实录6.1 能互相看到设备 ID 但连不上这是最典型的故障。能注册到服务器、能看到设备列表说明 hbbs 的连接是通的问题一般出在 P2P 打洞失败后无法走中继。可能的原因有几个hbbr 进程没有正常运行检查 21117 端口监听状态frp 没有转发 UDP 21116导致心跳信息无法通过中继UDP 打洞需要的 NAT 类型过于严格比如对称型 NAT无法打洞也无法中转排查时先看服务器日志journalctl -u rustdesk-hbbr -n 50如果日志里显示有连接进来但立刻断开大概率是中继端口不通。如果日志里没有动静则可能是 hbbs 层面的路由问题。6.2 内网连接正常外网超时这个问题的 80% 出在 NAT / 端口转发 / 安全组配置上。按顺序检查云端安全组是否放行了 21115-21119frps 的 allowPorts 是否正确包含目标端口frpc 的 UDP 代理是否配置了云服务器系统防火墙ufw/firewalld是否放行端口另外一个容易忽略的点是如果你用了 frp并修改了 remotePort比如把 21117 映射到公网上的 40000 端口RustDesk 客户端是无法区分中继端口的它只会连接 ID 服务器返回的中继地址的固定端口。所以不要随意改 RustDesk 对应端口的 remotePort保持原端口号最省心。6.3 密钥错误或客户端无法验证部署后客户端连接提示“Key 不匹配”或者“无法验证服务器”。这种情况一般发生在你修改过 hbbs 的-k参数后或者客户端配置里 Key 少了一位。RustDesk 的密钥验证是严格匹配的一个字符不对都会拒绝连接。解决方式很简单删除服务器数据目录中生成的密钥文件/opt/rustdesk/data/下的id_ed25519*重启 hbbs 和 hbbr然后用新版密钥重新配置客户端。注意这么做会重置所有客户端的密钥验证信息如果有多台设备都配置过得全部更新。6.4 RustDesk 连接异常时的日志排查路径RustDesk 的客户端日志默认写在本地临时目录Linux 下在/tmp/rustdesk-$USERWindows 下在%TEMP%macOS 下在/tmp。日志文件为.log格式一般从debug.log开始看如果找不到就用grep -i error过滤关键错误。日志中常见的报错信息日志关键字含义处理方向Failed to connect rendezvous无法连接 ID 服务器检查 21116 端口、frp UDP 转发Failed to connect relay无法连接中继服务器检查 21117 端口、云服务器安全组Key mismatch密钥不匹配重新配置客户端 Keynat type: symmetricNAT 为对称型打洞困难依赖中继模式连接客户端日志的详细程度比服务器日志高很多连接失败时优先看客户端日志能省不少排查时间。7. 这套方案做完后后续还能怎么玩RustDesk 服务器搭好之后其实还有很多扩展玩法。我目前只用到最基本的远程桌面但下一步准备把文件传输、远程打印也纳入日常使用。文件传输功能可以直接替代一些中转网盘。我经常需要从办公室电脑传文件到家里电脑以前用微信或者网盘中转有了 RustDesk 之后直接两台机器建立连接拖文件速度取决于本地上传带宽实测比经过网盘中转快不少而且不用担心文件在第三方服务器留存。RustDesk 还支持地址簿功能把常用设备的 ID 和备注都记录在服务器端。设置好权限后多台设备共用同一个服务器任何一台客户端登录都会同步看到地址簿里的设备对比一下远程管理的体验和 TeamViewer 的“计算机和联系人”列表差不多但完全自主可控。另外RustDesk 也支持通过 Web 客户端访问虽然目前 Web 端的体验还没有桌面端完善但在某些不方便安装软件的设备上应急用一下聊胜于无。如果你搞定了这些基础功能后续还能把树莓派接上 UPS 电源实现断电自动关机、来电自动启动整个远程访问方案就真的做到了 7x24 小时无人值守。我目前就在折腾这个后面有空再单独写文章聊聊。这套部署方案的整体投入其实很小树莓派加 SD 卡的硬件成本约两三百元如果本来就有树莓派那就只花一个晚上的时间。相比每个月几十块钱的商业远程控制订阅费自建方案的性价比和可控性都很高。如果你手头的设备正好吃灰不妨把这台 Raspberry Pi 变成你的专属远程桌面入口。