GitHub Actions下使用headless Wayland/Sway测试wl-clipboard方案求助
无头Wayland服务器搭建解决方案
你当前配置的核心问题有两个:一是sway启动为异步进程,未预留初始化完成的等待时间,二是前台启动会阻塞后续流程,后台启动时未验证服务可用性就直接执行后续操作。
可按照以下步骤修改配置:
1. 调整sway启动逻辑
将原有的前台运行sway -d -V改为后台启动+可用性校验:
- 用空配置文件启动sway,避免默认交互配置影响无头运行
- 记录sway进程PID,方便后续异常时回收
- 循环检测Wayland套接字文件生成,确认服务启动完成再执行后续操作
2. 优化依赖安装流程
无需卸载x11相关依赖,避免系统组件冲突,且wl-clipboard可直接通过apt源安装,无需手动编译节省构建时间。
3. 完整修改后的步骤代码
- name: Install wayland if: ${{ matrix.config.clip_type == 'wayland' }} run: | # 初始化XDG_RUNTIME_DIR mkdir -p $XDG_RUNTIME_DIR chown $USER $XDG_RUNTIME_DIR chmod 0700 $XDG_RUNTIME_DIR # 安装依赖 sudo apt-get update sudo apt-get install -y sway wl-clipboard # 后台启动sway,使用空配置避免交互逻辑 sway --config /dev/null 2>&1 > sway.log & SWAY_PID=$! # 等待最多10秒直到Wayland服务就绪 for _ in {1..10}; do if [ -S "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" ]; then break fi sleep 1 done # 校验启动结果 if ! [ -S "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" ]; then echo "Wayland server启动失败,sway日志:" cat sway.log kill $SWAY_PID 2>/dev/null || true exit 1 fi # 测试wl-clipboard可用性 echo "test content" | wl-copy --primary wl-paste --primary env: XDG_RUNTIME_DIR: /home/runner/work/clipr/xdg WLR_BACKENDS: headless WLR_LIBINPUT_NO_DEVICES: 1 WAYLAND_DISPLAY: wayland-1 GTK_USE_PORTAL: 0
额外注意事项
如果需要跨GitHub Actions步骤使用该Wayland服务,需将上述env变量写入$GITHUB_ENV文件,保证后续步骤可以读取到对应环境变量,同时注意不要提前杀死sway后台进程。
内容的提问来源于stack exchange,提问作者mdlincoln
相关产品推荐
相关产品推荐

