Proxmox VE 云桌面实战 ③ - 打造属于自己的Linux云电脑 - Fedora篇
前言
这是云桌面的第三篇,Windows云电脑大家听过很多,可你有曾想过,Linux搭配Desktop Environment也能打造云电脑,本文将介绍如何在Fedora 38上使用Sunshine搭建云桌面服务。
虚拟机配置
虚拟机配置如下,hostpci0为P40 vGPU,mDev型号为GRID-P40-8Q,hostpci1为82599 SR-IOV网卡,由于需要安装NVIDIA驱动,创建EFI磁盘时不勾选预注册密钥
一项。

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

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

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

进行分区,这里使用Btrfs分区
添加一个300M分区,挂载点/boot/efi

添加Swap(可选)

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

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

随后开始安装,喝杯☕️吧!
安装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=nouveau
和nvidia-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 | sudo systemctl set-default multi-user.target |
安装驱动
1 | sudo -i |

安装32位兼容库

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

我们需要手动生成X配置文件,选择No
重启到图形模式
1 | sudo systemctl set-default graphical.target |
激活vGPU许可
1 | sudo curl --insecure -X GET https://<fastapi-dls-ip>/client-token -o /etc/nvidia/ClientConfigToken/client_configuration_token.tok |
可以执行以下命令查看是否生效:
1 | [rickg@clouddesktop ~]$ nvidia-smi -q | grep "License" |
安装Sunshine
添加rpmfusion
1 | sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \ |
安装Sunshine
前往GitHub Release页面下载Sunshine
1 | sudo dnf install ./sunshine-fedora-38-amd64.rpm |
添加udev规则
Sunshine需要uinput的权限才能创建鼠标和虚拟手柄事件
1 | echo 'KERNEL=="uinput", SUBSYSTEM=="misc", OPTIONS+="static_node=uinput", TAG+="uaccess"' | \ |
随后重启
1 | reboot |
配置GDM
由于X的权限问题,以用户身份运行的Sunshine无法访问GDM登录界面,因此需要配置GDM自动登录。
1 | [root@clouddesktop ~]$ xrandr --display :0 |
禁用Wayland
笔者需要自定义X配置文件,而GDM默认在Wayland上运行,因此需要禁用Wayland,使GDM在Xorg上运行。
编辑/etc/gdm/custom.conf
,去除WaylandEnable=false
的注释:
1 | # GDM configuration storage |
配置自动登录
在[daemon]
下添加AutomaticLoginEnable=true
和AutomaticLogin=user
,其中user
为用户名:
1 | # GDM configuration storage |
配置Xorg
编辑/etc/X11/xorg.conf
:
1 | Section "ServerLayout" |
BoardName即GPU型号,BusID根据实际情况来,执行lspci | grep VGA
:
1 | [rickg@clouddesktop ~]$ lspci | grep VGA |
可以看到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

首次配置用户名密码

可以看到启用了NVENC硬件编码
打开Moonlight,连接,配对,云桌面就在眼前:

可以看到GPU是在工作的:

如果网络环境好的话,云桌面体验下来还是非常流畅的
参考资料
Fedora 38/37/36 NVIDIA Drivers Install Guide :: If Not True Then False (if-not-true-then-false.com)