发布于 

Proxmox VE 云桌面实战 ③ - 打造属于自己的Linux云电脑 - Fedora篇

前言

这是云桌面的第三篇,Windows云电脑大家听过很多,可你有曾想过,Linux搭配Desktop Environment也能打造云电脑,本文将介绍如何在Fedora 38上使用Sunshine搭建云桌面服务。

虚拟机配置

虚拟机配置如下,hostpci0为P40 vGPU,mDev型号为GRID-P40-8Q,hostpci1为82599 SR-IOV网卡,由于需要安装NVIDIA驱动,创建EFI磁盘时不勾选预注册密钥一项。

截屏2023-07-20 15.06.23
截屏2023-07-20 15.06.23

安装Fedora

从ISO启动,因为这是虚拟镜像,选择Install Fedora 38

截屏2023-07-20 15.13.56
截屏2023-07-20 15.13.56

选择语言后继续,配置安装源,如图所示,这里使用清华源

截屏2023-07-20 15.17.09
截屏2023-07-20 15.17.09

选择软件,这里我选择Fedora Workstation,如果喜欢别的DE也可以选择其他的

截屏2023-07-20 15.18.34
截屏2023-07-20 15.18.34

进行分区,这里使用Btrfs分区

添加一个300M分区,挂载点/boot/efi

截屏2023-07-20 15.22.37
截屏2023-07-20 15.22.37

添加Swap(可选)

添加Btrfs卷,大小为剩下的所有,名称为@,如图所示

截屏2023-07-20 15.25.58
截屏2023-07-20 15.25.58

数据中添加/home挂载点,名称为@home,如图所示

截屏2023-07-20 15.27.41
截屏2023-07-20 15.27.41

随后开始安装,喝杯☕️吧!

安装NVIDIA GRID驱动

提示

本文所用驱动为GRID 16.0,版本为535.54.03

确保系统最新

1
sudo dnf update

如果升级了内核,需要重启

1
reboot

安装依赖

1
sudo dnf install kernel-devel kernel-headers gcc make dkms acpid libglvnd-glx libglvnd-opengl libglvnd-devel pkgconfig

禁用nouveau

nouveau是开源nvidia驱动,它与grid驱动冲突,必须禁用它

编辑/etc/modprobe.d/blacklist-nouveau.conf

1
blacklist nouveau

编辑/etc/default/grub

GRUB_CMDLINE_LINUX=”…”中添加rd.driver.blacklist=nouveaunvidia-drm.modeset=1,如下所示:

1
GRUB_CMDLINE_LINUX="rhgb quiet rd.driver.blacklist=nouveau nvidia-drm.modeset=1"

更新grub配置:

1
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

删除nouveau驱动:

1
sudo dnf remove xorg-x11-drv-nouveau

备份旧initramfs:

1
sudo mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img

生成initramfs:

1
sudo dracut /boot/initramfs-$(uname -r).img $(uname -r)

重启到多用户模式

1
2
sudo systemctl set-default multi-user.target
reboot

安装驱动

1
2
3
sudo -i
chmod +x ./NVIDIA-Linux-x86_64-535.54.03-grid.run
./NVIDIA-Linux-x86_64-535.54.03-grid.run
截屏2023-07-20 16.33.03
截屏2023-07-20 16.33.03

安装32位兼容库

截屏2023-07-20 16.34.12
截屏2023-07-20 16.34.12

注册为DKMS模块,这样内核更新后驱动会重新编译以自动适配新内核

截屏2023-07-20 16.36.00
截屏2023-07-20 16.36.00

我们需要手动生成X配置文件,选择No

重启到图形模式

1
2
sudo systemctl set-default graphical.target
reboot

激活vGPU许可

1
2
sudo curl --insecure -X GET https://<fastapi-dls-ip>/client-token -o /etc/nvidia/ClientConfigToken/client_configuration_token.tok
sudo systemctl restart nvidia-gridd

可以执行以下命令查看是否生效:

1
2
3
[rickg@clouddesktop ~]$ nvidia-smi -q | grep "License"
vGPU Software Licensed Product
License Status : Licensed (Expiry: 2028-7-18 9:24:33 GMT)

安装Sunshine

添加rpmfusion

1
2
sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \
https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

安装Sunshine

前往GitHub Release页面下载Sunshine

1
sudo dnf install ./sunshine-fedora-38-amd64.rpm

添加udev规则

Sunshine需要uinput的权限才能创建鼠标和虚拟手柄事件

1
2
echo 'KERNEL=="uinput", SUBSYSTEM=="misc", OPTIONS+="static_node=uinput", TAG+="uaccess"' | \
sudo tee /etc/udev/rules.d/85-sunshine.rules

随后重启

1
reboot

配置GDM

由于X的权限问题,以用户身份运行的Sunshine无法访问GDM登录界面,因此需要配置GDM自动登录。

1
2
[root@clouddesktop ~]$ xrandr --display :0
Authorization required, but no authorization protocol specified. Can't open display :0

禁用Wayland

笔者需要自定义X配置文件,而GDM默认在Wayland上运行,因此需要禁用Wayland,使GDM在Xorg上运行。

编辑/etc/gdm/custom.conf,去除WaylandEnable=false的注释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# GDM configuration storage

[daemon]
# Uncomment the line below to force the login screen to use Xorg
WaylandEnable=false

[security]

[xdmcp]

[chooser]

[debug]
# Uncomment the line below to turn on debugging
#Enable=true

配置自动登录

[daemon]下添加AutomaticLoginEnable=trueAutomaticLogin=user,其中user为用户名:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# GDM configuration storage

[daemon]
# Uncomment the line below to force the login screen to use Xorg
WaylandEnable=false
AutomaticLoginEnable=true
AutomaticLogin=rickg

[security]

[xdmcp]

[chooser]

[debug]
# Uncomment the line below to turn on debugging
#Enable=true

配置Xorg

编辑/etc/X11/xorg.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0"
EndSection

Section "Monitor"
Identifier "Monitor0"
EndSection

Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GRID P40-8Q"
BusID "PCI:1:0:0"
EndSection

Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubSection
EndSection

BoardName即GPU型号,BusID根据实际情况来,执行lspci | grep VGA

1
2
3
[rickg@clouddesktop ~]$ lspci | grep VGA
00:01.0 VGA compatible controller: Device 1234:1111 (rev 02)
01:00.0 VGA compatible controller: NVIDIA Corporation GP102GL [Tesla P40] (rev a1)

可以看到vGPU的ID是01:00.0,BusID则为”PCI:1:0:0”

连接到VM

重启VM,可以看到PVE VNC端画面定在了开机画面的最后,这是因为输出已经指向vGPU内建的虚拟显示器

SSH连接到VM,启动Sunshine服务

1
systemctl enable --now --user sunshine

访问https://<vm-ip>:47990/,进入WebUI

截屏2023-07-20 17.20.36
截屏2023-07-20 17.20.36

首次配置用户名密码

截屏2023-07-20 17.49.20
截屏2023-07-20 17.49.20

可以看到启用了NVENC硬件编码

打开Moonlight,连接,配对,云桌面就在眼前:

截屏2023-07-20 18.00.43
截屏2023-07-20 18.00.43

可以看到GPU是在工作的:

截屏2023-07-20 18.02.59
截屏2023-07-20 18.02.59

如果网络环境好的话,云桌面体验下来还是非常流畅的

参考资料

Fedora 38/37/36 NVIDIA Drivers Install Guide :: If Not True Then False (if-not-true-then-false.com)

GDM - ArchWiki (archlinux.org)

Sunshine documentation (lizardbyte.dev)