前言

这是云桌面的第三篇,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

安装Fedora

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

截屏2023-07-20 15.13.56

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

截屏2023-07-20 15.17.09

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

截屏2023-07-20 15.18.34

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

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

截屏2023-07-20 15.22.37

添加Swap(可选)

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

截屏2023-07-20 15.25.58

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

截屏2023-07-20 15.27.41

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

安装NVIDIA GRID驱动

{% note color:green 提示 本文所用驱动为GRID 16.0,版本为535.54.03 %}

确保系统最新

sudo dnf update

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

reboot

安装依赖

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

blacklist nouveau

编辑/etc/default/grub

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

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

更新grub配置:

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

删除nouveau驱动:

sudo dnf remove xorg-x11-drv-nouveau

备份旧initramfs:

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

生成initramfs:

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

重启到多用户模式

sudo systemctl set-default multi-user.target
reboot

安装驱动

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

安装32位兼容库

截屏2023-07-20 16.34.12

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

截屏2023-07-20 16.36.00

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

重启到图形模式

sudo systemctl set-default graphical.target
reboot

激活vGPU许可

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

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

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

安装Sunshine

添加rpmfusion

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

{% link https://github.com/LizardByte/Sunshine/releases/ %}

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

添加udev规则

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

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

随后重启

reboot

配置GDM

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

[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的注释:

# 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为用户名:

# 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

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

[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服务

systemctl enable --now --user sunshine

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

截屏2023-07-20 17.20.36

首次配置用户名密码

截屏2023-07-20 17.49.20

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

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

截屏2023-07-20 18.00.43

可以看到GPU是在工作的:

截屏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)

标签: 云桌面, PVE, Linux

已有 2 条评论

  1. 你的文章让我心情愉悦,真是太棒了!http://www.boyahy.com

  2. 你的文章让我感受到了快乐,每天都要来看一看。http://www.518zsc.com

添加新评论