发布于 

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

虚拟机配置

截屏2023-07-19 08.58.23
截屏2023-07-19 08.58.23

包含一块NVIDIA vGPU,mDev类型为nvidia-52,对于vGPU类型,见上一篇文章

截屏2023-07-19 08.52.34
截屏2023-07-19 08.52.34

配置SPICE

SPICE基本不需要配置,只需要安装spice-guest-tools即可

下载spice-guest-tools

截屏2023-07-19 09.06.04
截屏2023-07-19 09.06.04

同意许可协议

截屏2023-07-19 09.06.38
截屏2023-07-19 09.06.38

同意安装驱动

截屏2023-07-19 09.07.27
截屏2023-07-19 09.07.27

安装完成

登录Proxmox VE,点击VM,点击控制台,下载pve-spice.vv文件

截屏2023-07-19 09.10.43
截屏2023-07-19 09.10.43

下载virt-viewer并安装

对于Linux,执行以下命令

1
2
3
4
# Fedora
sudo dnf install virt-manager
# Ubuntu & Debian
sudo apt install virt-manager

打开pve-spice.vv,可以看到VM画面并控制VM

截屏2023-07-19 09.18.18
截屏2023-07-19 09.18.18

配置VNC

下载任意VNC Server软件,这里我使用TightVNC

截屏2023-07-19 09.23.28
截屏2023-07-19 09.23.28

同意许可协议

安装方式选择“Custom”,勾选TightVNC Server

截屏2023-07-19 09.24.10
截屏2023-07-19 09.24.10

将TightVNC Server注册为系统服务

截屏2023-07-19 09.24.54
截屏2023-07-19 09.24.54

安装完成后,会提示是否设置VNC密码,这里设置一个

打开VNC Viewer,这里我使用的是RealVNC Viewer

输入VM的IP,回车连接

截屏2023-07-19 09.40.19
截屏2023-07-19 09.40.19

提示连接未加密,点击“Continue”继续

截屏2023-07-19 09.40.48
截屏2023-07-19 09.40.48

输入密码,点击OK连接

截屏2023-07-19 09.42.44
截屏2023-07-19 09.42.44

由于VNC服务器的限制,会话没有声音,如果有需求,建议使用RealVNC Server或者SPICE。

配置Parsec

安装

前往Parsec官网下载Parsec

截屏2023-07-20 08.56.04
截屏2023-07-20 08.56.04
平台 作为主机 作为客户端
Windows
Linux
Mac
Android

安装时务必选择Shared方式安装,这样Parsec会以系统用户权限运行,开机时就自动服务,可以显示登录画面而后手动登录。

截屏2023-07-20 09.05.50
截屏2023-07-20 09.05.50

安装完成后弹出登录界面

截屏2023-07-20 09.07.30
截屏2023-07-20 09.07.30

Parsec需要联网登录使用,如果是内网环境是使用不了Parsec的

没有账户的,直接点击Sign up注册即可

系统要求

客户端

没有硬性要求硬件解码,但若要有良好体验,则Intel QSV / AMD AMF / NVENC是必须的

对于网络,有IPv6为最好

服务端

服务端要求较为严苛,硬件编解码为必须(即类似NVENC / NVDEC),若没有则会在连接时提示主机不支持硬件编解码

截屏2023-07-20 09.14.17
截屏2023-07-20 09.14.17

对于网络,有IPv6为最好,在无IPv6情况下,全锥NAT > 限制NAT > 对称NAT

对称型NAT可能导致无法连接

具体可以参见佛西大佬的教程

配置vGPU授权

由于目前vGPU没有授权,所以是不能编解码的,这是就要用上之前配置好的fastapi-dls项目了

打开https://<fastapi-dis-ip>/,可以看到fastapi-dls的介绍页面

截屏2023-07-20 09.23.04
截屏2023-07-20 09.23.04

往下翻,找到这一部分,这就是官方的配置教程:

截屏2023-07-20 09.24.00
截屏2023-07-20 09.24.00

下载https://<fastapi-dls-ip>/client-token,保存到C:\Program Files\NVIDIA Corporation\vGPU Licensing\ClientConfigToken目录,而后重启VM或重启NVContainerLocalSystem服务,可以看到获得了vGPU授权:

截屏2023-07-20 09.30.29
截屏2023-07-20 09.30.29

参数配置

服务端

参数 解释
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 挂机自动踢出

客户端

配置的项目不多,连上服务端后,有以下几个选项

截屏2023-07-20 09.38.21
截屏2023-07-20 09.38.21
参数 解释
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

截屏2023-07-20 09.48.34
截屏2023-07-20 09.48.34

随后打开配置文件,在配置文件中加入以下内容:

1
2
3
4
app_proxy_address = 127.0.0.1
app_proxy_scheme = http
app_proxy = true
app_proxy_port = 7890

其中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即可

截屏2023-07-20 12.44.14
截屏2023-07-20 12.44.14

选择组件时,注意勾选Launch on Startup(开机自启动)和Add Firewall Exclude(添加防火墙例外)

配置

安装完成后,访问https://localhost:47990/进入Sunchine配置界面,首次配置需要设置用户名和密码

首先打开Troubleshooting,在Logs处往下拉,若找到Found encoder nvenc: [h264_nvenc, hevc_nvenc],则表明GPU编码工作正常,否则将使用软件编码

截屏2023-07-20 13.23.09
截屏2023-07-20 13.23.09

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

截屏2023-07-20 13.59.16
截屏2023-07-20 13.59.16

添加后出现计算机,但是现在有锁,需要进行PIN验证,点击计算机图标,弹出对话框

截屏2023-07-20 14.01.15
截屏2023-07-20 14.01.15

随后在Sunshine控制面板的PIN页面中输入PIN,建立连接

截屏2023-07-20 14.04.02
截屏2023-07-20 14.04.02

点击Desktop,稍等片刻,云桌面就出现在我们眼前了。

截屏2023-07-20 14.06.28
截屏2023-07-20 14.06.28

参考资料

SPICE - Proxmox VE

Home (spice-space.org)

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)

Connect to Work or Games from Anywhere | Parsec

佛西博客 - 人人走向云游戏——Parsec详解 (buduanwang.vip)