Proxmox VE 云桌面实战 ② - Windows篇
前言
上文笔者配置好了vGPU相关,那么本文笔者将创建一个简单的Windows云桌面。
方案
对于云桌面,不谈那些高大上的企业级方案,毕竟搞到了也没有授权(
既然说“简单”,那来讲讲以下几个简单的方案吧:
- SPICE
- VNC
- Parsec
- Moonlight + Sunshine
SPICE
可以说是最快捷的方案了,直接被Proxmox VE所集成,甚至VM在安装QXL驱动之后还能拥有简单的3D功能(前提要Windows 8.1以上
缺点也很明显,有点卡,只支持Windows、Linux、Mac(Mac甚至要自己编译
QXL羸弱的图形性能,跑3D应用是别想了
PVE里面有个SPICE增强,里面可以开启Video Streaming,个人认为也就是所谓的串流,但感觉开启了也没什么效果。
不过对于轻度使用和没有vGPU的情况,SPICE倒是不错的方案(毕竟不需要在VM上装VNC Server什么的,并且支持剪贴板共享
VNC
VNC(Virtual Network Computing)是一种图形桌面共享系统,使用RFB(远程帧缓冲)协议来提供远程控制功能。在云桌面应用中,VNC可以用来实现对远程虚拟机的访问和管理。
VNC的优点在于跨平台,其客户端非常之多,安全性也较高,同时也支持剪贴板共享
缺点在于,貌似也不支持GPU加速(如有知道的大佬请在评论区指正
串流
最棒的方案,但是对于网络和硬件要求也最苛刻
你需要有一块支持编解码的GPU,以及较高的网络上行带宽
这里介绍两种:Parsec、Moonlight
Parsec是付费软件,但有免费版本,只不过少了无头显示,4:4:4颜色模式等功能。
Moonlight则完全免费、开源,配合Sunshine使用可以实现4K HDR云游戏(如果条件符合的话)
对于网络,Parsec支持P2P连接 & IPv6,而Moonlight + Sunshine需要手动配置端口转发(不支持IPv6)
虚拟机配置
包含一块NVIDIA vGPU,mDev类型为nvidia-52,对于vGPU类型,见上一篇文章
配置SPICE
SPICE基本不需要配置,只需要安装spice-guest-tools即可
下载spice-guest-tools
同意许可协议
同意安装驱动
安装完成
登录Proxmox VE,点击VM,点击控制台,下载pve-spice.vv
文件
下载virt-viewer并安装
对于Linux,执行以下命令
1 | # Fedora |
打开pve-spice.vv,可以看到VM画面并控制VM
配置VNC
下载任意VNC Server软件,这里我使用TightVNC
同意许可协议
安装方式选择“Custom”,勾选TightVNC Server
将TightVNC Server注册为系统服务
安装完成后,会提示是否设置VNC密码,这里设置一个
打开VNC Viewer,这里我使用的是RealVNC Viewer
输入VM的IP,回车连接
提示连接未加密,点击“Continue”继续
输入密码,点击OK连接
由于VNC服务器的限制,会话没有声音,如果有需求,建议使用RealVNC Server或者SPICE。
配置Parsec
安装
前往Parsec官网下载Parsec
平台 | 作为主机 | 作为客户端 |
---|---|---|
Windows | ✅ | ✅ |
Linux | ✅ | |
Mac | ✅ | ✅ |
Android | ✅ |
安装时务必选择Shared方式安装,这样Parsec会以系统用户权限运行,开机时就自动服务,可以显示登录画面而后手动登录。
安装完成后弹出登录界面
Parsec需要联网登录使用,如果是内网环境是使用不了Parsec的
没有账户的,直接点击Sign up注册即可
系统要求
客户端
没有硬性要求硬件解码,但若要有良好体验,则Intel QSV / AMD AMF / NVENC是必须的
对于网络,有IPv6为最好
服务端
服务端要求较为严苛,硬件编解码为必须(即类似NVENC / NVDEC),若没有则会在连接时提示主机不支持硬件编解码
对于网络,有IPv6为最好,在无IPv6情况下,全锥NAT > 限制NAT > 对称NAT
对称型NAT可能导致无法连接
具体可以参见佛西大佬的教程
配置vGPU授权
由于目前vGPU没有授权,所以是不能编解码的,这是就要用上之前配置好的fastapi-dls项目了
打开https://<fastapi-dis-ip>/
,可以看到fastapi-dls的介绍页面
往下翻,找到这一部分,这就是官方的配置教程:
下载https://<fastapi-dls-ip>/client-token
,保存到C:\Program Files\NVIDIA Corporation\vGPU Licensing\ClientConfigToken
目录,而后重启VM或重启NVContainerLocalSystem
服务,可以看到获得了vGPU授权:
参数配置
服务端
参数 | 解释 |
---|---|
Hosting Enabled | 是否运行为服务端 |
Host Name | 主机名,请通过Windows设置修改 |
Resolution | 分辨率 |
Bandwidth | 码率限制 |
FPS | 帧率,一般选60 |
Exclusive Input Mode | 鼠标独占模式 |
Display | 使用的显示器,免费版只能选一个 |
Audio | 使用的声卡 |
Echo cancelling | 回声消除 |
Virtual Gamepad Type | 虚拟手柄类型,有Xbox 360、PS4、PS5三种 |
Quality | 质量,有低延迟、平衡、高质量三种 |
Idle Kick Timer | 挂机自动踢出 |
客户端
配置的项目不多,连上服务端后,有以下几个选项
参数 | 解释 |
---|---|
Hide Button | 隐藏Parsec按钮 |
Chat | 聊天,用于多人控制一台服务端时 |
Windowed | 窗口模式 |
Sound On | 打开声音 |
Codec | 编码器 |
Decoder | 解码器 |
Prefer 4:4:4 Color | 优先4:4:4(需要付费) |
Resolution | 分辨率 |
Bandwidth Limit | 码率限制 |
Constant FPS | 恒定FPS |
Send CTRL+ALT+DEL | 发送CTRL+ALT+DEL |
-800错误解决办法
有时打开Parsec会提示-800错误,无法连接到服务器,此情况一般是登录服务器被运营商屏蔽或是受到其他影响,需要为Parsec配置代理。
打开Parsec,点击Settings,一直往底下拉,找到edit the configuration file directly
随后打开配置文件,在配置文件中加入以下内容:
1 | app_proxy_address = 127.0.0.1 |
其中7890(端口)和http(代理类型)根据你本地运行的代理软件而定。
配置Sunshine
介绍
Sunshine是一个为Moonlight设计的云游戏服务端,它提供低延迟的云游戏能力,支持用AMD、Intel和Nvidia的GPU进行硬件编码,同时也支持软件编码。您可以从任何设备的Moonlight客户端连接到Sunshine,Sunshine提供了一个网页用户界面,用户可以从浏览器进行配置和客户端配对。可以从本地服务器或任何移动设备进行配对。
官方配置要求
该配置要求仅供参考,请勿按照此表格购买相关硬件
最低配置
类型 | 要求 |
---|---|
GPU | AMD:VCE 1.0或更高,参见obs-amd hardware support |
Intel:兼容,VA-API,参见VAAPI hardware support | |
Nvidia:支持NVENC的GPU,参见nvenc support matrix | |
CPU | AMD: Ryzen 3 或更高 |
Intel: Core i3 或更高 | |
RAM | 4GB + |
OS | Windows: 10 +(不支持Windows Server) |
macOS: 11.7 + | |
Linux/Debian: 11 (bullseye) | |
Linux/Fedora: 36 + | |
Linux/Ubuntu: 20.04 + (focal) | |
网络 | 服务端:5GHz, 802.11ac |
客户端:5GHz, 802.11ac |
4K推荐配置
类型 | 要求 |
---|---|
GPU | AMD: Video Coding Engine 3.1 + |
Intel: HD Graphics 510 + | |
Nvidia: GeForce GTX 1080 + | |
CPU | AMD: Ryzen 5 + |
Intel: Core i5 + | |
网络 | Host: CAT5e ethernet or better |
Client: CAT5e ethernet or better |
安装
前往Sunshine的Release页面下载
Windows平台下载sunshine-windows-installer.exe
即可
选择组件时,注意勾选Launch on Startup
(开机自启动)和Add Firewall Exclude
(添加防火墙例外)
配置
安装完成后,访问https://localhost:47990/
进入Sunchine配置界面,首次配置需要设置用户名和密码
首先打开Troubleshooting,在Logs处往下拉,若找到Found encoder nvenc: [h264_nvenc, hevc_nvenc]
,则表明GPU编码工作正常,否则将使用软件编码
General页
该页面主要配置一些通用选项
名称 | 解释 |
---|---|
Sunshine Name | 主机名,显示在Moonlight连接页面中,若不填为计算机名 |
Log Level | 日志等级,默认为Info |
Logfile Path | 日志文件目录,默认为sunshine.log |
Origin Web UI Allowed | 允许哪些网络上的计算机访问WebUI,默认为局域网 |
UPnP | 通用即插即用(端口转发),默认为关 |
Gamepads | 虚拟游戏手柄,有Xbox 360和PS4,默认为Xbox 360 |
Ping Timeout | Ping 超时,超出此时间则断开连接 |
Advertised Resolutions and FPS | Sunshine向客户端发送的建议的分辨率,一些客户端(如Switch客户端)需要此分辨率来确定请求的分辨率是否被支持。不影响实际推流的分辨率。 |
Map Right Alt key to Windows key | 将右Alt键映射到Win键,当按Win键没反应时可以使用 |
Command Preparations | 配置一个命令列表,这些命令将在运行任何应用程序之前或之后执行。如果任何指定的预备命令失败,应用程序的启动过程将被终止。 |
Files页
该页面主要配置HTTPS证书和配置文件的目录
名称 | 解释 |
---|---|
Private Key | HTTPS私钥,必须为2048 bits |
Cert | HTTPS证书,必须签名为一个2048 bits密钥 |
State File | 存储Sunshine当前状态的文件 |
Apps File | 存储Sunshine Apps的文件 |
Input页
该页面主要配置输入相关
名称 | 解释 |
---|---|
Home/Guide Button Emulation Timeout | 游戏手柄Home键模拟超时。如果按住Back/Select按钮的时间达到指定的毫秒数,将会模拟按下Home/Guide按钮。如果设置为小于0的值(默认情况下),按住返回/选择按钮不会模拟按下Home/Guide按钮。 |
Enable Mouse Input | 启用鼠标输入 |
Enable Keyboard Input | 启用键盘输入 |
Enable Gamepad Input | 启用手柄输入 |
Key Repeat Delay | 按键重复延迟,单位毫秒 |
Key Repeat Frequency | 按键重复频率,即每秒一个键最多按几次 |
Audio / Video页
该页主要配置音视频相关
名称 | 解释 |
---|---|
Audio Sink | 音频源,建议留空以便自动检测。运行安装目录下的tools\audio-info.exe 获取声卡名称。 |
Virtual Sink | 虚拟音频源,建议留空以便自动检测 |
Install Steam Audio Drivers | 安装Steam音频驱动,如果Steam在服务器上安装,这会自动安装驱动以支持5.1/7.1环绕声并将原有声卡静音 |
Adapter Name | 用于捕获的显卡名称,建议留空以便自动检测,该显卡必须连接到显示器且通电。运行安装目录下的tools\dxgi-info.exe 获取显卡名称 |
Output Name | 连接到该显卡的显示器名称,若留空则使用主显示器,一般配合Adapter Name 使用 |
DwmFlush | 提升鼠标移动时的捕获平滑度。若遇到和垂直同步相关问题请禁用 |
Advanced页
该页主要配置高级选项
名称 | 解释 |
---|---|
Port | Sunshine服务使用的端口,留空为47989。关于端口转发相关请往下看 |
Quantization Parameter | 量化参数,在不支持CBR(恒定比特率)的设备上使用,更高表示更大的压缩、更差的质量 |
Minimum Software Encoding Thread Count | 最小软件编码线程数。稍微增加该值会降低编码效率,但通常为了能够使用更多的CPU核心进行编码,这种权衡是值得的。理想的值是能在您的硬件上可靠地按照您期望的流媒体设置进行编码的最低值。 |
HEVC Support | HEVC支持。对于软件编码服务端请谨慎考虑。 |
Force a Specific Encoder | 强制指定编码器,不建议使用 |
FEC Percentage | 每个视频帧中每个数据包的纠错包的百分比。更高的值可以纠正更多的丢包,但代价是增加带宽使用。默认值20是GeForce Experience所使用的值。 |
Channels | 频道,一般用于以下场景:1.多个客户端分别从LAN和WAN连接,需要不同的码率。2.解码器需要不同的颜色配置。 |
Web Manager Credentials File | Web UI凭据文件,保存用户名和密码( |
Origin PIN Allowed | 要求PIN配对的来源,默认为localhost不需要PIN配对 |
External IP | 监听的外部IP,留空为自动检测 |
配置端口转发
在路由器 / FRP上转发以下端口
端口 | 类型 |
---|---|
47984 | TCP |
47989 | TCP |
47998 | UDP |
47999 | UDP |
48000 | UDP |
48002 | UDP |
48010 | TCP / UDP |
连接到Sunshine
前往Moonlight Github Release页面下载Moonlight客户端
安装完成后打开,点击右上角的手动添加计算机,输入IP
添加后出现计算机,但是现在有锁,需要进行PIN验证,点击计算机图标,弹出对话框
随后在Sunshine控制面板的PIN页面中输入PIN,建立连接
点击Desktop,稍等片刻,云桌面就出现在我们眼前了。
参考资料
Virtual Network Computing - Wikipedia
Moonlight Game Streaming: Play Your PC Games Remotely (moonlight-stream.org)
LizardByte/Sunshine: Self-hosted game stream host for Moonlight. (github.com)