Arch 系统Wayland上安装并使用sunlight串流 使用虚拟显示器实现平板副屏

前言

最近在配置Arch的各种小功能,想把所有win的体验移植过来,前段时间win经常蓝屏也不知道为啥,好像是显示驱动有问题但是我回退了也是蓝屏,有时间再研究吧。现在已经开始arch日用了,感觉还不错,在win上有一个好用的软件SpaceDesk可以实现平板作为电脑的副屏,arch上肯定是不行的,不过我发现Sunshine + Moonlight串流是一个非常好的办法不过就是他并不支持有线连接,如果网络环境不好的话可能有延迟,ai说了个邪修办法,是平板有线和电脑共享网络,有时间我试试有没有更好用。安装过程发现坑有点多,尤其是配置虚拟显示器那里,于是想着记录下写一篇博客,好久没更新了,失踪人口回归…

配置防火墙

当我们安装好Sunshine会发现平板连接不到,显示:无法连接至指定电脑。请确保所需端口没有被防火墙阻止。可以先执行下下面的命令开放端口

# 1. 开放 TCP 端口 (用于握手和控制)
sudo firewall-cmd --permanent --zone=public --add-port=47984/tcp
sudo firewall-cmd --permanent --zone=public --add-port=47989/tcp
sudo firewall-cmd --permanent --zone=public --add-port=48010/tcp

# 2. 开放 UDP 端口 (用于音视频推流)
sudo firewall-cmd --permanent --zone=public --add-port=48010/udp
sudo firewall-cmd --permanent --zone=public --add-port=47998-48000/udp

# 3. 重载防火墙使配置生效
sudo firewall-cmd --reload

现在应该可以正常连接了,可能显示还有问题,下面解决,也可以使用下面的命令看一下规则是否配置成功了

sudo firewall-cmd --list-all

创建虚拟显示器

下面就是最麻烦的一个就是创建虚拟显示器,我这里提供一个非常简单的办法

常见分辨率虚拟显示器的配置

查看接口状态

我们需要找到显卡上一个未连接 (disconnected) 的接口来作为虚拟显示器的输出接口,运行下面的命令可以进行查看

for p in /sys/class/drm/*/status; do 
  con=${p%/status}
  echo -n "${con#*/card?-}: "
  cat $p
done

随便找一个后面是disconnect的接口

配置

使用下面的命令打开grub文件

sudo nano /etc/default/grub

找到GRUB_CMDLINE_LINUX_DEFAULT=这个参数,一般就在最前面,在他的引号的里面的最后面添加一个参数video=DP-1:1920×1080@60e其中DP-1是你的空闲端口,1920×1080是分辨率,60是刷新率,最后的e是强制的意思,这个只对常见分辨率刷新率的有效果,如果要是特殊的,系统里面没有配置的话就会显示一个类似的安全配置,这个后面再说,这比如我图片里面的那样,因为我图片这样的比较特别没有完全成功,解决办法后面再说

Ctrl+O 保存,Enter 确认,Ctrl+X 退出

然后运行下面命令重新生成配置

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

reboot重启电脑

现在虚拟显示器就已经配置成功了,平板上的moonlight客户端应该就可以正常显示了,enjoy

发生意外错误的“救砖”办法

在配置的时候我有一次尝试使用dp-3,发生了显示错位如下图…完全进不了系统,这时候可以在grub选择系统的那个界面在选择到Arch linux的选项上面按下键盘e,这个时候删除你的配置就可以恢复了,有的接口显示会有问题,具体原因我也不清楚

壁纸和低栏错位

因为kde是可以每一个显示器单独配置壁纸和低栏的,就会出现不同的显示器有不同的配置文件,我是笔记本还有一个外界屏幕,然后配置虚拟显示器之后,外接显示器之前的配置到虚拟显示器里面了,其实解决的办法也很简单,在设置里面调节一下这几个显示器的优先级就可以,把之前的外界显示器的优先级调到第二就行了

常见分辨率虚拟显示器的配置

由于我需要的分辨率和刷新率比较多特殊,2480×1860的38hz,所以需要手动制作下EDID文件

# 下载所需的工具
git clone https://github.com/akatrevorjay/edid-generator.git
cd edid-generator
# 创建一个文件,也可以使用现成里面有的进行修改
nano 2480x1860.S

这里给出我使用的配置文件,每一个人的可能都不一样,可以让ai生成计算一下,我这个就是

/* * 2480x1860 @ 38Hz EDID 配置文件 
 * 基于 cvt 2480 1860 38 计算所得
 */
#define VERSION 1
#define REVISION 3

/* 核心时序参数 */
#define CLOCK 236500     /* 像素时钟 236.50 MHz */
#define XPIX 2480        /* 宽度 */
#define YPIX 1860        /* 高度 */
#define XY_RATIO XY_RATIO_4_3  /* 宽高比 4:3 (关键!否则平板画面会拉伸) */

/* 下面是根据 CVT 算法算出来的“黑边”和同步信号数据 */
#define XBLANK 848       
#define YBLANK 49        
#define XOFFSET 168      
#define XPULSE 256       
#define YOFFSET 3        
#define YPULSE 10        

#define DPI 96           /* 默认 DPI */
#define VFREQ 38         /* 你的目标刷新率 */
#define TIMING_NAME "Linux Custom"

/* 信号极性 (标准 CVT 通常是 -hsync +vsync,这里用默认即可) */
#define HSYNC_POL 1
#define VSYNC_POL 1

/* 引用生成逻辑 */
#include "edid.S"

使用make命令编译生成
然后应该就可以看到生成的几个文件,其中最重要的就是.bin文件,也是我们唯一需要的

# 创建文件夹
sudo mkdir -p /usr/lib/firmware/edid
# 复制文件到内核
sudo cp 2480x1860.bin /usr/lib/firmware/edid/custom_2480.bin
# 更新 initramfs (把文件打包进启动镜像)
sudo mkinitcpio -P

然后编辑下grub文件,还是在GRUB_CMDLINE_LINUX_DEFAULT=参数后面添加drm.edid_firmware=DP-1:edid/custom_2480.bin video=DP-1:e

sudo nano /etc/default/grub

修改完成后执行下面的代码,重新配置grub

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

reboot重启电脑,现在你的配置应该就没有问题了,可以去设置里面查看

配置自动启动和禁用虚拟显示器

因为我们可能不是所有时候都需要串流,不使用的时候显卡还在渲染那个显示器可能需要占用一些资源,所以我想实现一个开启串流自动开启虚拟显示器,推出串流就自动禁用

我sunlight有一个非常优雅的解决办法,在网页端的应用程序一栏,点击你使用的后面点击编辑,在下面有一个打开时执行命令退出应用时要执行的命令,在那里面填写对应的命令,命令可以先在终端上测试一下是不是可以正常使用,其中DP-1是刚刚使用的虚拟显示器对应的接口

# 开启虚拟显示器
kscreen-doctor output.DP-1.enable
# 关闭虚拟显示器
kscreen-doctor output.DP-1.disable

好了现在的配置应该就完美了!

致谢

感谢w568w写的博文为我提供了一个思路
感谢gemini

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇