KDE上创建虚拟屏幕用于Sunshine串流
在Wayland环境下,KDE无法实现headless output。Hyprland或sway上,我们可以很容易创建虚拟屏幕。而在KDE上,只能通过krfb-virtualmonitor创建虚拟显示器,即使这样也不能被Sunshine检测。因此若希望完全通过软件方法实现上述效果,我们可以通过内核参数强制设置显示模式和EDID,以便不使用显卡欺骗器而让虚拟显示器正常工作。
获取EDID文件
EDID是一种元数据格式,用于描述显示设备的特性。我们可以从实际的显示器获取EDID信息,或者使用一些公开的配置文件
若你希望直接使用现有显示器的edid文件:
ls /sys/class/drm/
可以看到类似card1-eDP-1,card1-HDMI-A-1的设备,每一个代表一个输出口,查找对应输出口的edid文件:
cat /sys/class/drm/card1-eDP-1/edid > edid.bin
放置文件
sudo mkdir -p /usr/lib/firmware/edid
sudo cp edid.bin /usr/lib/firmware/edid/
选择输出
ls /sys/class/drm/card*
/sys/class/drm/card1:
. card1-HDMI-A-1 engine gt_act_freq_mhz gt_max_freq_mhz gt_RP1_freq_mhz power
.. dev error gt_boost_freq_mhz gt_min_freq_mhz gt_RPn_freq_mhz subsystem
card1-eDP-1 device gt gt_cur_freq_mhz gt_RP0_freq_mhz metrics uevent
/sys/class/drm/card1-eDP-1:
. ddc drm_dp_aux0 firmware_node modes status waiting_for_supplier
.. device edid i2c-9 physical_location subsystem
connector_id dpms enabled intel_backlight power uevent
/sys/class/drm/card1-HDMI-A-1:
. connector_id device edid firmware_node power subsystem waiting_for_supplier
.. ddc dpms enabled modes status uevent
选择card1-HDMI-A-1作为输出设备。
编辑内核参数
根据上面选择的输出设备编辑内核参数
grub
修改/etc/default/grub文件,添加以下内容到GRUB_CMDLINE_LINUX:
GRUB_CMDLINE_LINUX=“drm.edid_firmware=HDMI-A-1:edid/edid.bin video=HDMI-A-1:1920x1080@120e”
可以自行指定分辨率和帧数,其中video=HDMI-A-1:1920x1080@120e中的最后一个e告诉作系统即使没有连接显示器,也要把相应的 GPU 端口当作连接了显示器一样处理
随后重新生成grub配置:
sudo grub-mkconfig -o /boot/grub/grub.cfg
重启,并在KDE设置中检查显示器,应该能看到HDMI-A-1的虚拟显示器。
串流
在终端启动Sunshine,应当可以在日志中看到如下内容
[2025-07-11 18:31:17.267]: Info: Found display [wayland-0]
[2025-07-11 18:31:17.267]: Info: Found interface: zxdg_output_manager_v1(32) version 3
[2025-07-11 18:31:17.267]: Info: Found interface: zwp_linux_dmabuf_v1(57) version 5
[2025-07-11 18:31:17.267]: Info: Found interface: wl_output(65) version 4
[2025-07-11 18:31:17.267]: Info: Found interface: wl_output(66) version 4
[2025-07-11 18:31:17.267]: Info: Resolution: 1920x1080
[2025-07-11 18:31:17.267]: Info: Resolution: 1920x1080
[2025-07-11 18:31:17.267]: Info: Offset: 1920x0
[2025-07-11 18:31:17.267]: Info: Logical size: 1920x1080
[2025-07-11 18:31:17.267]: Info: Name: eDP-1
[2025-07-11 18:31:17.267]: Info: Found monitor: BOE eDP-1-0x0936
[2025-07-11 18:31:17.267]: Info: Offset: 0x0
[2025-07-11 18:31:17.267]: Info: Logical size: 1920x1080
[2025-07-11 18:31:17.267]: Info: Name: HDMI-A-1
[2025-07-11 18:31:17.267]: Info: Found monitor: AOC HDMI-A-1-28E850
[2025-07-11 18:31:17.267]: Info: -------- Start of KMS monitor list --------
[2025-07-11 18:31:17.267]: Info: Monitor 0 is eDP-1: BOE eDP-1-0x0936
[2025-07-11 18:31:17.267]: Info: Monitor 1 is HDMI-A-1: AOC HDMI-A-1-28E850
[2025-07-11 18:31:17.267]: Info: --------- End of KMS monitor list ---------
[2025-07-11 18:31:17.267]: Info: Monitor 1 is HDMI-A-1: AOC HDMI-A-1-28E850告诉我们Sunshine已经检测到了虚拟显示器HDMI-A-1,编号为1。随后打开Sunshine的webui界面,找到Configuration->Audio/Video->Display number,将其设置为1,保存配置并等待Sunshine自动重启,即可正常进行串流。