Intro
记录一下笨人日常使用的设备间的互通功能,主要是将宿舍里的一台 Windows Desktop PC 部分地用作服务器,写一下踩过的坑 XD
不管是在宿舍里还是在外,相当多情况下,将电脑以服务器的方式来提供服务都有不小的优势。以 MacBook 控制 Windows PC 为例,相较于远程桌面,服务器访问可以实现接近本地的开发体验、接近本地的文件访问体验、融入本地应用的窗口管理等等诸多妙处(因为减少了 Mac 上的运行压力,笨人的使用体验比本地还好)
宿舍局域网内
下面的部分内容都要求宿舍装有私人 Wi-Fi,使用需要学生账号登录的校园网通常不可使用。
在交大,可以自备路由器,之后向 网管部 / NIMO 申请开通私人宿舍网络。
1. 文件共享服务
快速上手(~15 min)
Windows 和 macOS 都提供了基于 SMB 的文件共享服务,也就是将其作为一台 NAS。推荐两个入门的配置视频:
- Mac mini: https://www.bilibili.com/video/BV1mT41187DD
- Windows: https://www.bilibili.com/video/BV13A4m1V7ig
如果已经拥有相关设备,参照这两个视频就可以快速上手
以 Windows 为例:
右键开始按钮,打开
计算机管理
创建用户
侧边栏定位到
系统工具 -> 本地用户和组 -> 用户
右键空白处
新建用户
,并取消勾选用户下次登录时须更改密码
,创建一个用于访问文件的用户
创建共享
侧边栏定位到
系统工具 -> 共享文件夹 -> 共享
右键空白处
新建共享
,并选择需要共享的文件夹编辑权限,允许刚刚创建的用户访问此共享
一些坑
网络发现
Windows 的网络类型分为公用网络和专用网络,公用网络通常不允许网络共享。有两种选择:
- 打开公用网络的网络发现和文件共享
- 仅打开专用网络的网络发现和文件共享,然后在设置里将 Wi-Fi 改为专用网络
但是!如果你选择了后者,笨人遇到了每次 Windows 重启都会自动将网络类型改为公用,试了改注册表并限制注册表权限、在组策略中设置等等方案都不行😠
这里还得再找找解决方案()
共享文件夹权限
虽然上面已经设置了共享文件夹权限,但是实际访问时可能仍然会遇到权限问题,这里可以找到要共享的文件夹,同样右键 属性 -> 安全 -> 编辑 -> 添加
,在这里添加刚刚的用户,并授予其完全控制权限
现在再打开 Terminal,输入 ipconfig
获取本机的内网 IP,例如 192.168.114.51
,之后即可在其他设备访问。
在 macOS 上,右键访达;在 iOS/iPadOS 上,打开文件应用,选择连接到服务器
,之后输入 smb://192.168.114.51
,再使用刚刚创建的用户名密码即可链接。在局域网内,这可以获得接近本地存储的浏览和管理体验,并可以实现比 LocalSend 更高效的文件共享。
2. VSCode Remote SSH
快速上手(~10 min)
在 Windows 设置中搜索 可选功能
,之后选择 添加可选功能
,添加 OpenSSH 服务器和客户端
打开高级 Windows 防火墙设置,添加允许 22 端口 TCP 协议访问的入站规则。
检查防火墙规则:
1 | Get-NetFirewallRule -Name *OpenSSH-Server* | select Name, DisplayName, Description, Enabled |
设置 SSH 服务自启动,并启动服务
1 | Set-Service -Name sshd -StartupType 'Automatic' |
1 | Start-Service sshd |
然后就可以在同一内网使用 VSCode 通过 SSH 连接并开发。
一个小坑
第一次链接的时候,可能会被安全软件阻断,需要手动在主机(服务端)通过访问请求(最好勾选下次自动通过)
3. WebUI 服务
现在相当大部分本地的 AI 应用都有基于 Gradio 的 WebUI 版本,例如:
- 绘图
- Stable Diffusion WebUI
- ComfyUI
- 音频
- GPT-SoVITS
- SoVITS SVC
- 语音转文字
- Whisper WebUI
- 面部修改
- LivePortrait
在本机部署这些服务之后,就可以通过浏览器访问 localhost
加上对应端口来使用这些应用。显然,既然作为服务器,同一局域网内的设备直接使用对应主机的 IP 加上同样的端口访问应用。
当然,基于 WSL 的运行在 Docker 中的服务,例如 Open WebUI 也可以用同样的方式访问。
例如,可以在 macOS 上访问 SD WebUI,并通过文件共享服务来管理模型文件
故障排查
如果无法连接,考虑以下可能的问题:
- (同上)网络发现设置
- Windows Defender 设置
- 可以前往服务端的 Windows 高级防火墙设置,添加入站规则以允许访问
- macOS
- 前往
设置 -> 隐私与安全性 -> 本地网络
,允许自己使用的浏览器发现本地网络中的设备
- 前往
- iOS/iPadOS
- 和 macOS 类似,前往设置中的 App 权限,允许访问本地网络
4. Sunshine + Moonlight 串流
笨人测试过感觉这套方案确实不错,但是没有什么局域网串流的需求,体验不多,就不写了。
宿舍局域网外
1. 远程控制
这部分分享的帖子已经很多了,笨人自己是 Parsec 为主 + GameViewer 备用(Windows 自带的 Remote Desktop 有点用不来)
2. 内网穿透
著名的 ZeroTier 使用体验相当不错。注册流程也比较简单,在官网注册账号并创建一个虚拟局域网,之后在 Windows 服务端和 macOS 等客户端都安装 ZeroTier 即可加入同一虚拟局域网(首次加入需要前往 ZeroTier 手动通过加入请求)。
在 Windows 的 PowerShell 中使用 Get-NetConnectionProfile
找到 ZeroTier 的网络适配器,并找到其中的 IP。在内网穿透访问时,应该使用这里的虚拟局域网 IP,而非上面的宿舍内网 IP。
同样的,这里需要修改 ZeroTier
网络为专用网络,或者直接允许公用网络类型的内网访问。可以直接复制上面 ipconfig
中 ZeroTier 网络的索引(假设这里是 12
),并在终端中设置:
1 | Set-NetConnectionProfile -InterfaceIndex 12 -NetworkCategory Private |
之后再次通过 Get-NetConnectionProfile
命令检查,连接到此虚拟局域网的设备就可以使用 ZeroTier IP 使用服务啦。