Intro

记录一下笨人日常使用的设备间的互通功能,主要是将宿舍里的一台 Windows Desktop PC 部分地用作服务器,写一下踩过的坑 XD

不管是在宿舍里还是在外,相当多情况下,将电脑以服务器的方式来提供服务都有不小的优势。以 MacBook 控制 Windows PC 为例,相较于远程桌面,服务器访问可以实现接近本地的开发体验、接近本地的文件访问体验、融入本地应用的窗口管理等等诸多妙处(因为减少了 Mac 上的运行压力,笨人的使用体验比本地还好)




宿舍局域网内

下面的部分内容都要求宿舍装有私人 Wi-Fi,使用需要学生账号登录的校园网通常不可使用。

在交大,可以自备路由器,之后向 网管部 / NIMO 申请开通私人宿舍网络。


1. 文件共享服务

快速上手(~15 min)

Windows 和 macOS 都提供了基于 SMB 的文件共享服务,也就是将其作为一台 NAS。推荐两个入门的配置视频:

如果已经拥有相关设备,参照这两个视频就可以快速上手

  • 以 Windows 为例

    • 右键开始按钮,打开 计算机管理

    • 创建用户

      • 侧边栏定位到 系统工具 -> 本地用户和组 -> 用户

        pc-manage

      • 右键空白处新建用户,并取消勾选 用户下次登录时须更改密码,创建一个用于访问文件的用户

    • 创建共享

      • 侧边栏定位到 系统工具 -> 共享文件夹 -> 共享

      • 右键空白处新建共享,并选择需要共享的文件夹

      • 编辑权限,允许刚刚创建的用户访问此共享

        pc-sharing-manage

一些坑

网络发现

Windows 的网络类型分为公用网络和专用网络,公用网络通常不允许网络共享。有两种选择:

  • 打开公用网络的网络发现和文件共享
  • 仅打开专用网络的网络发现和文件共享,然后在设置里将 Wi-Fi 改为专用网络

但是!如果你选择了后者,笨人遇到了每次 Windows 重启都会自动将网络类型改为公用,试了改注册表并限制注册表权限、在组策略中设置等等方案都不行😠

这里还得再找找解决方案()

network-sharing

共享文件夹权限

虽然上面已经设置了共享文件夹权限,但是实际访问时可能仍然会遇到权限问题,这里可以找到要共享的文件夹,同样右键 属性 -> 安全 -> 编辑 -> 添加 ,在这里添加刚刚的用户,并授予其完全控制权限

access-manage


现在再打开 Terminal,输入 ipconfig 获取本机的内网 IP,例如 192.168.114.51,之后即可在其他设备访问。

在 macOS 上,右键访达;在 iOS/iPadOS 上,打开文件应用,选择连接到服务器,之后输入 smb://192.168.114.51,再使用刚刚创建的用户名密码即可链接。在局域网内,这可以获得接近本地存储的浏览和管理体验,并可以实现比 LocalSend 更高效的文件共享。


2. VSCode Remote SSH

快速上手(~10 min)

在 Windows 设置中搜索 可选功能,之后选择 添加可选功能,添加 OpenSSH 服务器和客户端

屏幕截图 2024-11-28 211915

打开高级 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,并通过文件共享服务来管理模型文件

mac-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 使用服务啦。