vdi-cloud/docs/linux-desktop-onboarding-20261104.md

7.8 KiB
Raw Blame History

Ubuntu / 麒麟云桌面接入记录(2026-11-04)

后续更新:麒麟已升级真实2560×1440/30FPS配置与30Mbps,动态短测约23FPS,见麒麟2K调优记录。以下1080p参数属于初次接入记录。

两台 Linux 已接入现场盒子的正常桌面选择流程。实际验证了连接、画面、键盘、鼠标、退出和再次连接;最终回到桌面列表。Windows 也完成了原配置连接回归。

现场配置

桌面 地址 / 用户 系统与服务端 串流配置
Ubuntu 192.168.1.72 / test2 Ubuntu 24.04.4;Sunshine 2026.914.233613 Desktop,1920×1080,30 FPS,H.264 软件编码
麒麟 192.168.1.71 / test1 银河麒麟 V10 SP1;Sunshine v0.21.0 Ubuntu20.04 构建 Desktop,1920×1080,30 FPS,H.264 软件编码
Windows 192.168.1.70 原 Sunshine 服务端 原 Desktop,2560×1440,45 FPS 配置

盒子为 armbian@192.168.1.188。原 Linux 桌面上的 Moonlight 是客户端,用于连接其他主机;本次补齐 Linux 的 Sunshine 服务端,让盒子 Moonlight 可以连接它们。未移除原 Moonlight。

盒子使用原 RKMPP 私有客户端与 EGL/GLES 呈现路径;本次没有修改产品源码,也没有把现场 IP 写入源码默认值。

Linux 服务

两台均使用登录用户的 systemd 服务与 XDG 自启动:

  • ~/.config/systemd/user/vdi-sunshine.service:已 enabled,现场为 active。
  • ~/.config/autostart/vdi-sunshine.desktop:图形登录后导入 DISPLAY、XAUTHORITY 等会话环境并启动服务。
  • ~/.config/sunshine/sunshine.conf:X11 捕获、software 编码、ultrafast、zerolatency、禁用 UPnP、Web 管理来源限制为本机。
  • ~/.config/sunshine/apps.json:发布 Desktop。
  • ~/.config/sunshine/vdi-admin.json:随机生成的各自主机管理凭据,权限 600;未复制进仓库。

服务启动前把 Virtual-1 设置为 1920×1080,创建或复用 vdi_audio 虚拟音频 sink,并设为默认。Sunshine 配置使用 audio_sink = vdi_audio,采集端自动选中 vdi_audio.monitor。两台最后一轮串流均未出现采音初始化失败;Ubuntu 日志明确显示 Opus 初始化,盒子日志显示双声道音频流启动。实际扬声器听感尚未验收。

Ubuntu 登录配置

用户明确授权 test2 自动登录并使用 Xorg,修改前已备份:

  • /etc/gdm3/custom.conf:WaylandEnable=false、AutomaticLoginEnable=true、AutomaticLogin=test2、DefaultSession=ubuntu-xorg.desktop。
  • /var/lib/AccountsService/users/test2:Session / XSession 为 ubuntu-xorg。
  • 备份目录 /var/backups/vdi-linux-20261104-100722/,文件 custom.conf、test2。

重启 GDM 后已进入 test2 的 Xorg 桌面,DISPLAY=:0、XAUTHORITY=/run/user/1000/gdm/Xauthority。未重启虚拟机;整机重启后的自动恢复仍待验证。另补装 pulseaudio-utils,未执行系统整体升级。

麒麟兼容部署

现场 glibc 2.31,选择可兼容的官方 v0.21.0 Ubuntu20.04 构建。麒麟安全策略拒绝未签名 DEB 后,采用解包部署:

  • root 拥有的 /opt/vdi-sunshine-0.21.0/。
  • /usr/share/sunshine 指向其资源目录。
  • 对具体 Sunshine 二进制及当次临时安装脚本做 kysec_set -n exectl -v verified 单文件认证;未全局关闭 KYSEC。
  • /etc/udev/rules.d/85-vdi-sunshine.rules 配置 uinput,现场 ACL 已赋予 test1 读写权限。

麒麟沿用已有 test1 图形会话;当时锁屏已临时解锁,未关闭长期锁屏,也未配置新的自动登录。后续若回到登录界面或锁屏,需要按原策略登录或解锁。

盒子配置与配对

只更新 ~/.config/vdi-terminal/desktops.json 中 Ubuntu / 麒麟对象,Windows 对象保留原值。原配置备份:

/home/armbian/vdi-terminal/backups/linux-desktops-20261104-101507/desktops.json

两台均完成盒子原 Moonlight 配对;Sunshine 服务重启后原配对仍有效。只在无串流时重启 kiosk 刷新列表。正常客户端路径:

/home/armbian/vdi-build/rkmpp-experiment/build/moonlight/app/moonlight

退出串流回列表使用 Ctrl+Alt+Shift+Q。

验证结果与证据

证据目录:linux-desktops-20261104。

项目 结果 证据
三张卡可连接 通过 列表截图
Ubuntu 实际画面与输入 F8(65477)及鼠标左键事件到达虚拟机临时 GTK 窗口 截图、事件
麒麟实际画面与输入 F8(65477)及鼠标左键事件到达虚拟机临时 GTK 窗口 截图、事件
最后 Ubuntu / 麒麟 / Windows 依次连接再返回列表 三项均硬解就绪且保持运行,最后正常退出 结果 JSON
Linux 实际视频尺寸与渲染路径 h264_rkmpp、drm_prime、EGL/GLES、1920×1080 Ubuntu 日志、麒麟日志
Windows 原配置回归 2560×1440 硬解就绪,正常退出 客户端日志

最后约十秒有效视频样本中 Ubuntu 渲染 29.59 FPS、麒麟 29.35 FPS,仅用于确认短时链路可运行,不代表长时间性能验收。Windows 这轮短测渲染 35.76 FPS,不据此重新定义原 45 FPS 配置的性能结论。

*-sunshine.service、*-sunshine.conf 是最终配置快照,*-sunshine-final.log 是最后串流服务端日志,*-final-state.txt 记录服务、音频和 uinput 状态,ubuntu-login-config.txt 记录登录配置。截图是盒子 2560×1440 输出,Linux 视频本身为 1920×1080。

Ubuntu 日志仍有 CAP_SYS_ADMIN 探测失败及显示信息回退提示,但实际选中了 X11 并成功捕获 1080p;本次没有为消除这些提示授予额外高权限。麒麟退出时有 GLib Source ID 警告,服务仍为 active 且可再次连接。

最初 Xvfb + 软件解码独立探测曾出现控制断开,同期原 Windows 会话也断开,原因未确定;后续以上正常硬解入口回归均通过。安装 Xvfb 时 apt 同时升级了盒子的 libpciaccess0、xserver-common、xserver-xorg-core;未重启 Xorg。临时 Xvfb 与输入测试服务已停止。

当前验收覆盖基础画面与输入及短时重连;Linux 2K、GPU 编码、长期稳定性、重启恢复、锁屏策略、音质与生产多用户隔离尚未验收。

回退与后续维护

  1. 盒子恢复上述备份的 desktops.json,在无活动会话时刷新 kiosk,可撤回本轮卡片配置。
  2. 在对应 Linux 图形用户下执行 systemctl --user disable --now vdi-sunshine.service,将 ~/.config/autostart/vdi-sunshine.desktop 移出自启动目录,可停止本次 Sunshine 自动启动。保留 ~/.config/sunshine/ 可保留配对与配置。
  3. Ubuntu 如需恢复原登录方式,以 sudo 将备份 custom.conf 放回 /etc/gdm3/custom.conf,备份 test2 放回 /var/lib/AccountsService/users/test2,保留原属主和权限;在维护窗口重启 GDM(会终止图形会话)。
  4. 麒麟如需彻底卸载,先停服务,再核对 /usr/share/sunshine 链接目标和 uinput 规则是否仍被其他应用使用,最后移除本次 /opt/vdi-sunshine-0.21.0 部署;不要直接覆盖发行版同名文件或全局修改 KYSEC。

排查服务可先运行 systemctl --user status vdi-sunshine.service 和 journalctl --user -u vdi-sunshine.service。麒麟版本较旧是当前兼容方案,后续升级需要重新评估系统库兼容性与安全维护。