• 首页
  • 加入
  • RSS
  • Friday, June 27, 2025

    镜像更新

    • deepin-ports-image 镜像打包脚本:
      • 现可实验性支持 grub 启动方式的镜像构建,以便在内核/驱动尚未主线化前发布部分通过支持 UEFI 启动的设备的预览镜像。
      • 现可支持 efi/boot/root 三分区的镜像打包,方便构建通过 grub 启动的镜像。
      • 安装行为改为在 mmdebstrap 基础系统后,使用 apt 安装剩余组件,避免潜在的依赖问题。
      • 现可选择 deepin 内网源加速软件包下载(仅 deepin 内部可用)
      • 新增 dp1000 支持
    • 新增了以下设备的 deepin 25 测试镜像:
      • generic:
        • 20250621-023448
        • 20250622-022810
        • 20250623-214346
        • 20250625-171832 (deepin 25 发布版本)
      • dp1000:
        • 20250625-030117
    • 与 deepin 25 正式版同步发布 RISC-V 版本的 ISO,可通过「镜像下载」页面最新的 deepin 25(磐石)QEMU/通用镜像对应的链接下载。
    • 已有的基于任何先前版本的 deepin 25 镜像安装的设备均可通过 apt 升级至 deepin 25 发布版本。

    驱动更新

    • deepin-ports-profiles 包为所有 Imagination 设备启用 QT_FORCE_OPENGL_TYPE=OpenGLES 以在 Qt6 上强制使用 GLES。
      • 已知存在 shader 渲染问题,已转交 DTK 开发人员处理。

    测试

    • 测试了以下镜像:

    文档

    活动

    • 继续筹备参展 RISC-V 峰会的海报和材料。
      • 海报制作完毕,设计稿如下: Poster

    Wednesday, June 25, 2025

    编辑的话请把自己的名字加到作者名单里

    即将发布(你阅读到这个文章的时候可能已经发布了)的 deepin 25 正式版将会包含对应的新版 DDE。为了方便各个其它发行版的包维护者可以更方便的移植 DDE 到对应的发行版,这里提供一篇简要的移植指南,用以描述常见的移植问题和解决方案。

    下面对项目名称的称呼均以 GitHub 对应的原始仓库名为准。

    概览

    相对于 deepin 25 beta,在 deepin 25 正式版中并不存在较大幅的架构调整,而是以缺陷修复以及完善之前尚未完善但计划涵盖在最终版本的组件(例如 QML 版控制中心)作为研发的重心。本阶段中有部分组件的首位版本号存在调整,另存在一些注意事项,详情请参见后续的描述。

    由于这些项目的版本间互相影响,我们建议移植人员参照 deepin 25 正式版所使用的包版本进行打包,下面会对主要的部分进行详细说明。

    需要注意的是,由于此文章编写时间早于版本发布时间,故最终版本镜像中使用的版本可能高于下面列出的版本。我们尽可能确保此文章的准确性,但若您需要获取 ISO 镜像中使用的确切软件版本列表,请挂载 ISO 后参阅 LIVE/FILESYS{T,0,1}.MAN/live/filesystem.manifest 路径对应的文件的内容。

    另外,由于前述 manifest 文件包含了 ISO 所附带的所有软件包的版本信息,而 DDE 移植并不需要关注整个列表,你可以参考 deepin-community/deepin-desktop-environment 提供的几个 Meta 包中描述的依赖关系,来了解哪些软件包和 DDE 有关。

    主要组件

    DTK 与 DTK6

    DTK 是 DDE 组件与应用的基础依赖,适用于deepin 25 正式版的版本参照如下:

    packageversion
    dtkcommon5.7.17
    dtklog0.0.4
    dtkcore5.7.17
    dtkgui5.7.17
    dtkwidget5.7.17
    dtkdeclarative5.7.17
    qt5integration5.7.17
    qt5platform-plugins5.7.17.1
    dtk6core6.0.37
    dtk6gui6.0.37
    dtk6widget6.0.37
    dtk6declarative6.0.37
    qt6integration6.0.37
    qt6platform-plugins6.0.37

    本次 DTK 组件大部分版本号以及相对应的平台插件等版本号均已对齐,例外的有 dtkcommon 与 dtklog。可参照上表进行打包。

    关于 qt5platform-plugins,现有的 dwayland 插件可能对非 DDE 环境(例如 KDE)的 wayland 用户存在影响,可参照 linuxdeepin/developer-center#7217 打对应的 patch 规避影响。

    DDE 主要组件

    下面仅涉及变化较大或影响较广的组件。其余未涉及的组件可正常参照最新 tag 进行打包与移植。

    在 alpha 与 beta 阶段使用 1.99.z 系列版本号的项目现均启用了 2.0.z 版本号,以表示相关的行为变动。针对 dde-shell 所提供库的依赖的 SOVERSION 仍为 1,不受打包版本号的影响。

    下面涉及到的组件的版本参照如下:

    packageversion
    deepin-desktop-schemas6.0.11
    dde-daemon6.1.40
    dde-session2.0.2
    dde-session-ui6.0.30
    dde-session-shell6.0.41
    dde-application-manager1.2.31
    dde-shell2.0.1
    dde-launchpad2.0.1
    dde-tray-loader2.0.2
    dde-application-wizard0.1.15
    dde-clipboard6.1.9
    deepin-service-manager1.0.13
    dde-launcher被 dde-launchpad 取代,不再使用
    dde-dock被 dde-shell 取代,不再使用
    startdde已被废弃,不再使用

    dde-application-manager

    由于涉及到诸多关于应用识别的改善,故建议总是使用最新版本。

    dde-session-shell

    相比 beta ,此项目不涉及较大的结构调整,但你可能希望阅读 beta 时的变动描述,涉及到了仓库位置和提交历史相关的说明。

    dde-shell

    dde-shell 旨在将 DDE 桌面环境插件化与模块化,降低开发难度,使各个组件的替换变得更加容易,并且提供更好的桌面环境集成支持。正式阶段相比 beta 阶段集中在缺陷的修复上,并未涵盖太多的结构调整和新特性。对于 beta 以及更早版本的变化,请阅读之前的博客文章。

    为保障 dde-shell 在 Qt 6.8.0 或 6.8.1 的环境可以正常运行(即使是X11环境下),若 ,则 必须 给 qtwayland 打下面的 patch:

    dde-shell 在 alpha 中为修正一个特定问题所包含的一个变更依赖另一个 Qt Wayland 的 patch:

    若你所移植的目标发行版不接受此补丁,则可考虑对 dde-shell 项目 revert 于此相关的对应 commit:

    dde-launchpad

    dde-launchpad 现仅支持以 dde-shell 插件的形式被最终用户使用。因而,打包 dde-launchpad 现需要先打包 dde-shell,并确保用户最终使用的是 dde-shell。

    dde-session

    我们已在 deepin 23 beta3 起放弃了对 deepin-kwin wayland 的支持,DDE 后续所有 wayland 相关的支持均由 treeland 提供。请参见后续的 Treeland 段落。

    下面涉及到的组件的版本参照如下。对于位于非 linuxdeepin 组织的软件包,此处一并给出了组织名:

    packageversion
    vioken/waylib0.6.13
    vioken/qwlroots0.5.3
    treeland0.5.20
    ddm0.1.10

    deepin-kwin 环境

    此部分相对 beta 也未存在较大变动,但由于此组件的重要性,方便起见,此处重新阐述 beta 阶段的变化:

    deepin-kwin 对 Qt 的版本依赖切换到了 Qt 6,不过值得注意的是,当前的 deepin-kwin 并非从上游 kwin 6.x 中 fork 出来的,而是基于 uos 20 版本的 kwin 5.27.x 进行的 qt6/kf6 迁移,并且由于一些原因,其二进制可执行的文件名恢复到了 kwin,这会导致与上游原版 kwin 的冲突。

    就于此事项的详细介绍,请参见 https://github.com/orgs/linuxdeepin/discussions/11471 讨论。对于移植人员,我们建议考虑下面三种方案:

    • 使用 Qt 6 的 deepin-kwin,放弃与上游 kwin 的共存支持。
    • 继续使用 deepin-kwin 5.27,尽管存在一些问题,但此版本仍然可保证和上游版本 kwin 共存。
    • 考虑打包 Treeland 环境。

    Treeland 环境

    Treeland 环境在 alpha -> beta 阶段无较大变化,alpha 阶段的移植注意事项仍然适用于 beta。

    DDM

    尽管 DDM 目前是基本功能可用状态,DDM 目前仍相对而言不够稳定。对于打包移植而言,建议采用其他DM来启动用户级的treeland。

    对于其它 DM,只需要打包时安装 usr/share/wayland-sessions/treeland-user.desktop 即可。

    Qt 补丁

    下述假定您的发行版使用的 Qt 版本为 Qt 6.8.2。

    如果你在 Treeland 下遇到小 launchpad 无法输入中文的问题,可以打下面的 patch,但是该 patch 目前尚未进行完整测试,可能存在一些问题。

    https://codereview.qt-project.org/c/qt/qtbase/+/611940

    另外,如果你的发行版所附的 Qt 6.8 版本并未更新至 Qt 6.8.2,则可能需要打三个额外的补丁,可参见 DDE Qt 6.8 适配说明(针对 Qt 6.8.0) 以及 deepin 25 preview DDE 移植简要指南(针对 Qt 6.8.1)

    Qt 6.9 说明

    DDE 尚未完整针对 Qt 6.9 进行测试,但存在一些已知问题,下面列出了对应的问题和处理方式:

    1. QML 的 DelegateChoice/DelegateChooser 组件不存在问题

    Qt 6.9 中,此组件被从 labs “转正”到了 QtQml.Models 下,相应的 import 需要修正。已知 dde-shell 存在此问题(修正相关问题的 patch)。

    若有其他项目存在相同问题,则对于此问题的修正,可参考 dde-shell 的相关提交:

    建议忽略移植的组件

    deepin-anything

    尽管被部分 DDE 组件依赖,但均为可选。anything 提供了内核模块,对于滚动发行版移植可能不友好,可能移植并不能得到很高的体验改善。

    若忽略 deepin-anything 移植,则下列组件也应当被忽略(因为依赖了 deepin-anything):

    • dde-grand-search

    dde-application-wizard

    尽管此项目初衷之一是提供可移植的模块化卸载服务,但并未达到理想状态。尽管事实上可被顺利移植,此项目可以考虑忽略。缺失此组件并不会影响 DDE 主要功能。

    获取移植帮助

    如果您希望得到移植相关的帮助,请考虑加入我们 DDE 移植小组的在线交流群(下列房间有桥接,任选其一即可),一起展开相关的交流:

    Thursday, June 19, 2025

    从本次报告开始,deepin-ports SIG 将在每周末发布每周的进展报告。

    镜像更新

    • 为 u-boot 默认配置增加 U_BOOT_SYNC_DTBS 选项以自动拷贝设备树文件。
    • 新增了以下设备的 deepin 25 测试镜像:
      • k1:
        • 20250617-161611
        • 20250617-135113
      • generic:
        • 20250618-150752

    驱动更新

    imggpu

    应用更新

    • 为 deepin 安装器修复 riscv64 ISO 全盘安装未正确设置分区的问题。

    测试

    • deepin-ports RISC-V 测试规范撰写中
    • 测试了以下镜像:

    文档

    网页

    • 上线新版网页
      • 新增「支持矩阵」提供支持设备列表及基本信息
      • 新增「测试报告」提供各镜像的测试结果(如果有)
      • 新增「文档列表」列出全部的安装指南和测试报告
      • 界面风格改进

    活动

    • 筹备参展 RISC-V 峰会的海报和材料
    • OSPP 2025 RISC-V 相关项目已结束申请,即将正式开始,包括:
      • 为 deepin RISC-V 移植 GCC 12 的 RISC-V Vector (RVV) 扩展支持
      • 为Linux Kernel扩充更多基于RISC-V V扩展和K扩展的SHA-3算法加速实现

    Tuesday, May 27, 2025

    编辑的话请把自己的名字加到作者名单里

    已经发布的 deepin 25 beta 包含了对应的新版 DDE。为了方便各个其它发行版的包维护者可以更方便的移植 DDE 到对应的发行版,这里提供一篇简要的移植指南,用以描述常见的移植问题和解决方案。

    下面对项目名称的称呼均以 GitHub 对应的原始仓库名为准。

    概览

    相对于 deepin 25 alpha,在 deepin 25 beta 中并不存在较大幅的架构调整,而是以缺陷修复以及完善之前尚未完善但计划涵盖在最终版本的组件(例如 QML 版控制中心)作为研发的重心。需要注意的是,部分 DDE 组件在本版本中已被废弃,另外本次发布过程中也存在一个组件的 git 仓库有变动的情况,详情请参见后续的描述。

    由于这些项目的版本间互相影响,我们建议移植人员参照 deepin 25 beta 所使用的包版本进行打包,下面会对主要的部分进行详细说明。

    需要注意的是,由于此文章编写时间早于版本发布时间,故最终版本镜像中使用的版本可能高于下面列出的版本。我们尽可能确保此文章的准确性,但若您需要获取 ISO 镜像中使用的确切软件版本列表,请挂载 ISO 后参阅 LIVE/FILESYS{T,0,1}.MAN/live/filesystem.manifest 路径对应的文件的内容。

    主要组件

    DTK 与 DTK6

    DTK 是 DDE 组件与应用的基础依赖,适用于 RC 的版本参照如下:

    packageversion
    dtkcommon5.7.16
    dtklog0.0.2
    dtkcore5.7.16
    dtkgui5.7.16
    dtkwidget5.7.16
    dtkdeclarative5.7.16
    qt5integration5.7.16
    qt5platform-plugins5.7.16
    dtk6core6.0.36
    dtk6gui6.0.36
    dtk6widget6.0.35
    dtk6declarative6.0.36.4
    qt6integration6.0.35
    qt6platform-plugins6.0.35

    本次 DTK 组件大部分版本号以及相对应的平台插件等版本号均已对齐,例外的有 dtklog、dtk6widget、dtk6declarative、qt6integration、qt6platform-plugins。可参照上表进行打包。

    关于 qt5platform-plugins,现有的 dwayland 插件可能对非 DDE 环境(例如 KDE)的 wayland 用户存在影响,可参照 linuxdeepin/developer-center#7217 打对应的 patch 规避影响。

    DDE 主要组件

    下面仅涉及变化较大或影响较广的组件。其余未涉及的组件可正常参照最新 tag 进行打包与移植。

    由于 deepin 25 preview 仍在持续开发过程中,故较多组件采取了 x.99.z 的版本号策略。此外,一般情况下,此类 tag 并不会实际以 git tag 的形式存在,而只会体现在 debian/changlog 文件中。下面涉及到的此类版本号将会在版本发布前后补充对应的 git tag。

    下面涉及到的组件的版本参照如下:

    packageversion
    deepin-desktop-schemas6.0.10
    dde-daemon6.1.32
    dde-session1.99.17
    dde-application-manager1.2.28
    dde-shell1.99.36
    dde-launchpad1.99.15
    dde-tray-loader1.99.26
    dde-application-wizard0.1.14
    dde-clipboard6.1.8
    dde-launcher被 dde-launchpad 取代,不再使用
    dde-dock被 dde-shell 取代,不再使用
    startdde已被废弃,不再使用

    dde-application-manager

    由于涉及到诸多关于应用识别的改善,故建议总是使用最新版本。

    dde-session-shell

    此项目未涉及到结构性的巨大调整,但存在仓库历史与 tag 历史变化的事项。由于项目维护需要,之前的 dde-session-shell 仓库被重命名为了 dde-session-shell-snipe,并在此后新建了名为 dde-session-shell 的仓库,这导致你无法在 dde-session-shell 仓库下找到历史(例如alpha之前)的 tag 信息。若有移植需求,可移步 dde-session-shell-snipe 仓库。

    对于 beta 以及未来版本的移植,仍然保持使用 dde-session-shell 仓库即可。

    dde-shell

    dde-shell 旨在将 DDE 桌面环境插件化与模块化,降低开发难度,使各个组件的替换变得更加容易,并且提供更好的桌面环境集成支持。alpha 阶段相比 preview 阶段集中在缺陷的修复上,并未涵盖太多的结构调整和新特性。对于 alpha 以及更早版本的变化,请阅读之前的博客文章。

    为保障 dde-shell 在 Qt 6.8.0 或 6.8.1 的环境可以正常运行(即使是X11环境下),若 ,则 必须 给 qtwayland 打下面的 patch:

    dde-shell 在 alpha 中为修正一个特定问题所包含的一个变更依赖另一个 Qt Wayland 的 patch:

    若你所移植的目标发行版不接受此补丁,则可考虑对 dde-shell 项目 revert 于此相关的对应 commit:

    dde-launchpad

    dde-launchpad 现仅支持以 dde-shell 插件的形式被最终用户使用。因而,打包 dde-launchpad 现需要先打包 dde-shell,并确保用户最终使用的是 dde-shell。

    dde-session

    我们已在 deepin 23 beta3 起放弃了对 deepin-kwin wayland 的支持,DDE 后续所有 wayland 相关的支持均由 treeland 提供。请参见后续的 Treeland 段落。

    下面涉及到的组件的版本参照如下。对于位于非 linuxdeepin 组织的软件包,此处一并给出了组织名:

    packageversion
    vioken/waylib0.6.13
    vioken/qwlroots0.5.3
    treeland0.5.20
    ddm0.1.10

    deepin-kwin 环境

    deepin-kwin 对 Qt 的版本依赖切换到了 Qt 6,不过值得注意的是,当前的 deepin-kwin 并非从上游 kwin 6.x 中 fork 出来的,而是基于 uos 20 版本的 kwin 5.27.x 进行的 qt6/kf6 迁移,并且由于一些原因,其二进制可执行的文件名恢复到了 kwin,这会导致与上游原版 kwin 的冲突。

    就于此事项的详细介绍,请参见 https://github.com/orgs/linuxdeepin/discussions/11471 讨论。对于移植人员,我们建议考虑下面两种方案:

    • 继续使用 deepin-kwin 5.27,尽管存在一些问题,但此版本仍然可保证和上游版本 kwin 共存。
    • 考虑打包 Treeland 环境。

    Treeland 环境

    Treeland 环境在 alpha -> beta 阶段无较大变化,alpha 阶段的移植注意事项仍然适用于 beta。

    DDM

    尽管 DDM 目前是基本功能可用状态,DDM 目前仍相对而言不够稳定。对于打包移植而言,建议采用其他DM来启动用户级的treeland。

    对于其它 DM,只需要打包时安装 usr/share/wayland-sessions/treeland-user.desktop 即可。

    Qt 补丁

    下述假定您的发行版使用的 Qt 版本为 Qt 6.8.2。

    如果你在 Treeland 下遇到小 launchpad 无法输入中文的问题,可以打下面的 patch,但是该 patch 目前尚未进行完整测试,可能存在一些问题。

    https://codereview.qt-project.org/c/qt/qtbase/+/611940

    另外,如果你的发行版所附的 Qt 6.8 版本并未更新至 Qt 6.8.2,则可能需要打三个额外的补丁,可参见 DDE Qt 6.8 适配说明(针对 Qt 6.8.0) 以及 deepin 25 preview DDE 移植简要指南(针对 Qt 6.8.1)

    Qt 6.9 说明

    DDE 尚未完整针对 Qt 6.9 进行测试,但存在一些已知问题,下面列出了对应的问题和处理方式:

    1. QML 的 DelegateChoice/DelegateChooser 组件不存在问题

    Qt 6.9 中,此组件被从 labs “转正”到了 QtQml.Models 下,相应的 import 需要修正。已知 dde-control-center 与 dde-shell 存在此问题,其中 dde-control-center 已进行了修正:

    获取移植帮助

    如果您希望得到移植相关的帮助,请考虑加入我们 DDE 移植小组的在线交流群(下列房间有桥接,任选其一即可),一起展开相关的交流:

    Wednesday, May 14, 2025

    起因

    之前已经写过一篇使用 distrobox 加速开发的文章,主要动机就是在面对不同版本的系统时,准备多份开发环境将变得十分痛苦,最终就演变成了基于 VSCode 的 Remote 开发搭配容器环境。

    这样只需要准备一份 base 环境,每次只需要设置环境版本就可以安装对应的开发依赖,并且不需要更换开发工具,甚至可以在环境变量中设置好 DISPLAY 等,还能直接让容器内的程序显示在宿主环境上。

    本篇文章是基于 podman 的技术方案执行的。

    环境准备

    安装 podman

    sudo pacman -Sy podman

    确认配置

    cat /etc/subuid

    内容应该是 lxz:100000:65536

    VSCode

    打开 VScode 的设置,搜索 container,将 docker 的二进制改成 podman。

    .devcontainer.json

    VSCode 会识别打开目录下的 .devcontainer 目录和 .devcontainer.json 文件,本文会先介绍 json 格式的配置,之后会介绍使用 Dockerfile 构建运行环境的方式。

    {
    "name": "UOS Dev Container",
    "containerUser": "root",
    "image": "uos:base",
    "customizations": {
    "vscode": {
    "extensions": [
    "llvm-vs-code-extensions.vscode-clangd",
    "donjayamanne.git-extension-pack",
    "donjayamanne.githistory",
    "theqtcompany.qt-cpp-pack",
    "eamodio.gitlens",
    "ms-vscode.cmake-tools",
    "go2sh.cmake-integration-vscode",
    "josetr.cmake-language-support-vscode",
    "VisualStudioExptTeam.vscodeintellicode",
    "VisualStudioExptTeam.intellicode-api-usage-examples",
    "esbenp.prettier-vscode",
    "ms-vscode.cpptools",
    "twxs.cmake"
    ]
    }
    },
    "runArgs": [
    "--rm",
    "--network=host",
    "--privileged",
    "--userns=host"
    ],
    "remoteEnv": {
    },
    "onCreateCommand": "apt update && apt install -y clangd-13 ninja-build curl jq && update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-13 13 && echo > /etc/apt/sources.list",
    "postCreateCommand": "echo \"请输入系统版本:\" && read version && sh -c \"curl -s 'https://xxx/api/shuttle/repo/info?type=deb&reponame=eagle-$version' | jq -r '.data.repobase.archives[].address' | tee /etc/apt/sources.list\" && echo 'deb [trusted=yes] https://xxx/pkg/eagle-1073/release-candidate/MDQyNeeql-euoeS4u-e6v-aPkOa1izIwMjUtMDQtMjUgMTQ6NTk6MDE/ unstable main' >> /etc/apt/sources.list && apt update && apt build-dep -y . && apt install -y qt5-default qtwayland5-private-dev"
    }

    在 json 中,需要指定一个运行时环境,在这里使用的是本地手动准备的镜像,为了确保开发和服务器构建环境的一致,我直接使用了服务器提供的构建环境,并使用 podman image import 命令导入。

    runArgs 中 --userns=host 的作用是使用主机的 user namespace,而 containerUser 必须指定成 root,因为容器内没有别的用户。

    为了防止泄露内网信息,postCreateCommand 内已将域名屏蔽。

    在 UOS 中,clangd 的版本有点低,需要手动创建符号,否则 VSCode 的 clangd 插件无法正常工作。这个事情就放在 onCreateCommand 中执行了,postCreateCommand 则是配置仓库和安装项目的构建依赖。

    当打开项目后,VSCode 会提醒在容器内重新打开。

    容器内打开容器内打开容器内打开

    之后等待 VSCode 完成 server 的下载,就会开始执行 onCreateCommandpostCreateCommand

    启动完毕后就会开始安装插件,是一个正常的工作环境了。

    容器内打开容器内打开

    打开终端,可以看到是 root 用户,但 podman 做了 uid 映射,实际目录的权限会是用户自身,不必担心。

    容器内打开容器内打开

    Dockerfile

    通常情况下应当使用 image,这样能确保所有人的环境是一致的,但仍然有时候想在 Dockerfile 里提前准备好一些事情,而不是在容器启动后进行配置,只需要把 image 字段改成 build。

    "build": { "dockerfile": "Dockerfile" },

    这种情况更推荐放在 .devcontainer 目录。在这个目录下,可以放置 Dockerfile 和其他配置文件,以便在构建容器时使用。

    FROM --platform=$TARGETPLATFORM hub.deepin.com/kwin-devcontainer/linuxdeepin/eagle:base

    ARG USERNAME=user
    ARG UID=1000
    ARG GID=1000
    ARG UOS_VERSION=1073

    RUN groupadd --gid $GID $USERNAME && \
    useradd --uid $UID --gid $GID -m $USERNAME

    RUN apt-get update && \
    apt-get install -y \
    curl \
    jq \
    && \
    apt-get dist-upgrade -y && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

    RUN apt-get update && \
    apt-get install -y \
    sudo \
    clangd-13 \
    apt-utils \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release \
    && \
    update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-13 13 && \
    echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
    apt-get dist-upgrade -y && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

    USER $USERNAME

    json 也稍微修改了一下,使用 Dockerfile,并且使用参数控制一些构建过程,并且增加了本地用户。

    {
    "name": "UOS Dev Container",
    "remoteUser": "lxz",
    "build": {
    "dockerfile": "Dockerfile",
    "args": {
    "UOS_VERSION": "1073",
    "USERNAME": "lxz"
    }
    },
    "customizations": {
    "vscode": {
    "extensions": [
    "llvm-vs-code-extensions.vscode-clangd",
    "donjayamanne.git-extension-pack",
    "donjayamanne.githistory",
    "theqtcompany.qt-cpp-pack",
    "eamodio.gitlens",
    "ms-vscode.cmake-tools",
    "go2sh.cmake-integration-vscode",
    "josetr.cmake-language-support-vscode",
    "VisualStudioExptTeam.vscodeintellicode",
    "VisualStudioExptTeam.intellicode-api-usage-examples",
    "esbenp.prettier-vscode",
    "saoudrizwan.claude-dev"
    ]
    }
    },
    "runArgs": [
    "--rm",
    "--network=host",
    "--privileged",
    "--env",
    "XDG_RUNTIME_DIR=${env:XDG_RUNTIME_DIR}",
    "-v",
    "${env:SSH_AUTH_SOCK}:/tmp/ssh-agent.socket",
    "-e",
    "SSH_AUTH_SOCK=/tmp/ssh-agent.socket"
    ],
    "remoteEnv": {
    "XDG_RUNTIME_DIR": "${env:XDG_RUNTIME_DIR}",
    "PODMAN_USERNS": "host"
    },
    "postCreateCommand": "sudo apt update && sudo apt build-dep -y . && sudo apt install -y qt5-default qtwayland5-private-dev"
    }

    https://code.visualstudio.com/docs/devcontainers/create-dev-container

    Tuesday, April 22, 2025

    最近遇到了两起 X11 下客户端报 Maximum number of clients reached 的错误,并且无法连接到 Xorg。

    搜到了一个排查方法,执行

    sudo ss -x src "*/tmp/.X11-unix/*" | grep -Eo "[0-9]+\s*$" | while read port
    do
    sudo ss -p -x | grep -w $port | grep -v X11-unix
    done | grep -Eo '".+"' | sort | uniq -c | sort -rn

    这将列出每个进程及其打开的 X 连接数,按连接数降序排列。

    13 "dde-session-dae"
    5 "fcitx"
    3 "kwin_x11"
    3 "kglobalaccel5"
    2 "cpis-panel-serv"
    1 "uos-activator"
    1 "startdde"

    https://snapoverflow.com/ubuntu/question/4499/how-can-i-diagnose-debug-maximum-number-of-clients-reached-x-errors/

    Wednesday, April 16, 2025

    编辑的话请把自己的名字加到作者名单里

    deepin 23.1 现已发布。为了方便各个其它发行版的包维护者可以更方便的移植 DDE 到对应的发行版,这里提供一篇简要的移植指南,用以描述常见的移植问题和解决方案。

    下面对项目名称的称呼均以 GitHub 对应的原始仓库名为准。 {.note}

    概览

    对于 DDE 本次更新并未包含大规模的结构调整,而是比较存催的缺陷修复为主的更新,对于比较值得注意的事项将会列在下方。对于 deepin 23 的注意事项,可参见 deepin 23 正式版发布时的移植指南文章所给出的说明。

    由于 DDE 涉及到的各个组件项目的版本间互相影响,我们强烈建议移植人员参照 deepin 23.1 正式版所使用的包版本进行打包(也务必遵循依赖顺序打包)。下面会对主要的部分进行详细说明。

    下面给出的版本号信息供打包移植时参考。若您需要获取 ISO 镜像中使用的确切软件版本列表,请挂载 ISO 后参阅 LIVE/FILESYSTEM.MANIFEST (也可能是 LIVE/FILESYS0.MAN)路径对应的文件的内容。

    主要组件

    DTK 与 DTK6

    DTK 是 DDE 组件与应用的基础依赖,适用于 RC 的版本参照如下:

    packageversion
    dtkcommon5.7.5
    dtklog0.0.2
    dtkcore5.7.5
    dtkgui5.7.5
    dtkwidget5.7.5
    dtkdeclarative5.7.5
    qt5integration5.7.5
    qt5platform-plugins5.7.5
    dtk6log0.0.2
    dtk6core6.0.25
    dtk6gui6.0.25
    dtk6widget6.0.25
    dtk6declarative6.0.25
    qt6integration6.0.25
    qt6platform-plugins6.0.25

    除新增的 dtklog 外,本次 DTK 版本号以及相对应的平台插件等版本号均已对齐,可直接参照打包。

    deepin-kwin wayland 功能已经废弃,未来将由 treeland 替代。目前 dwayland 包已经不再使用,依赖此包的应用比如 qt5platform-plugins,不应该继续编译依赖 dwayland 的功能,可参照 linuxdeepin/developer-center#7217 打对应的 patch 规避。

    目前,使用 dtk6 的正式组件有 dde-application-manager,dde-launchpad 与 dde-shell。需要注意,deepin 23 环境中 dde-shell 的托盘组件 dde-tray-loader 仍然需要使用 qt5。

    DDE 主要组件

    下面仅涉及变化较大或影响较广的组件。其余未涉及的组件可正常参照最新 tag 进行打包与移植。

    下面涉及到的组件的版本参照如下:

    packageversion
    deepin-osconfig2024.08.06
    dde-app-services1.0.27
    dde-session1.2.13
    dde-application-manager1.2.27
    dde-tray-loader1.0.10
    dde-shell1.0.10
    dde-launchpad1.0.11
    dde-application-wizard0.1.10
    deepin-wayland-protocols1.10.0.28
    deepin-kwin5.27.2.213
    dde-launcher被 dde-launchpad 取代,不再使用
    dde-dock被 dde-shell 取代,不再使用

    dde-application-manager

    此组件现已使用主干分支最新版本(当前为 1.2.27)。请注意,较早的主干版本(例如 1.2.26)在 deepin 23 环境存在一些已知行为问题,故移植最新的 deepin 23 DDE 时,请至少使用 1.2.27 版本。

    dde-session-shell

    尽管此组件不存在架构性质层面的较大调整,但涉及到打包移植相关的注意事项。此组件由于主干分支的研发需求,对仓库进行过迁移到。当前 GitHub 上的 linuxdeepin/dde-session-shell 仓库历史已与之前不同。故如果你需要适用于 deepin 23 的此仓库的完整历史,请转到 dde-session-shell-snipe。所有原始仓库的提交历史以及 tag 均可在这个仓库中找到(实质是仓库重命名后新建了与原名的同名仓库)。

    (注:相关请参见此邮件列表存档

    Qt 6.9 编译问题

    如果遇到 qmlsc 崩溃问题,见 QTBUG-135885QTBUG-135885,需要为 qtdeclarative 增加以下 patch:

    技术预览组件

    原本涉及的技术预览组件在 23 至 23.1 的这个阶段均无较大进展,故不再于此罗列。

    获取移植帮助

    如果您希望得到移植相关的帮助,请考虑加入我们 DDE 移植小组的在线交流群(下列房间有桥接,任选其一即可),一起展开相关的交流:

    Friday, March 21, 2025

    编辑的话请把自己的名字加到作者名单里

    即将发布(你阅读到这个文章的时候可能已经发布了)的 deepin 25 alpha 将会包含对应的新版 DDE。为了方便各个其它发行版的包维护者可以更方便的移植 DDE 到对应的发行版,这里提供一篇简要的移植指南,用以描述常见的移植问题和解决方案。

    下面对项目名称的称呼均以 GitHub 对应的原始仓库名为准。 {.note}

    概览

    相对于 deepin 25 preview,在 deepin 25 alpha 中并不存在较大幅的架构调整,而是以缺陷修复以及完善之前尚未完善但计划涵盖在最终版本的组件(例如 QML 版控制中心)作为研发的重心。同时,我们也对 Qt、DTK 进行了更多完善,以供 DDE 组件以及 Treeland 能够更好的运行。

    由于这些项目的版本间互相影响,我们建议移植人员参照 deepin 25 alpha 所使用的包版本进行打包,下面会对主要的部分进行详细说明。

    需要注意的是,由于此文章编写时间早于版本发布时间,故最终版本镜像中使用的版本可能高于下面列出的版本。我们尽可能确保此文章的准确性,但若您需要获取 ISO 镜像中使用的确切软件版本列表,请挂载 ISO 后参阅 LIVE/FILESYS{T,0,1}.MAN/live/filesystem.manifest 路径对应的文件的内容。

    主要组件

    DTK 与 DTK6

    DTK 是 DDE 组件与应用的基础依赖,适用于 RC 的版本参照如下:

    packageversion
    dtkcommon5.7.12
    dtklog0.0.2
    dtkcore5.7.12
    dtkgui5.7.12
    dtkwidget5.7.12
    dtkdeclarative5.7.12
    qt5integration5.7.12
    qt5platform-plugins5.7.7
    dtk6core6.0.32.1
    dtk6gui6.0.32
    dtk6widget6.0.32
    dtk6declarative6.0.32.1
    qt6integration6.0.32
    qt6platform-plugins6.0.32

    除 dtklog 以及 dtk6 的 core 于 declarative 外,本次 DTK 版本号以及相对应的平台插件等版本号均已对齐,可直接参照打包。

    关于 qt5platform-plugins,现有的 dwayland 插件可能对非 DDE 环境(例如 KDE)的 wayland 用户存在影响,可参照 linuxdeepin/developer-center#7217 打对应的 patch 规避影响。

    DDE 主要组件

    下面仅涉及变化较大或影响较广的组件。其余未涉及的组件可正常参照最新 tag 进行打包与移植。

    由于 deepin 25 preview 仍在持续开发过程中,故较多组件采取了 x.99.z 的版本号策略。此外,一般情况下,此类 tag 并不会实际以 git tag 的形式存在,而只会体现在 debian/changlog 文件中。下面涉及到的此类版本号将会在版本发布前后补充对应的 git tag。

    下面涉及到的组件的版本参照如下:

    packageversion
    dde-session1.99.11
    dde-application-manager1.2.26
    dde-shell1.99.28
    dde-launchpad1.99.9
    dde-tray-loader1.99.19
    dde-application-wizard0.1.13
    dde-clipboard6.1.6
    dde-launcher被 dde-launchpad 取代,不再使用
    dde-dock被 dde-shell 取代,不再使用

    dde-application-manager

    由于涉及到诸多关于应用识别的改善,故建议总是使用最新版本。

    dde-shell

    dde-shell 旨在将 DDE 桌面环境插件化与模块化,降低开发难度,使各个组件的替换变得更加容易,并且提供更好的桌面环境集成支持。alpha 阶段相比 preview 阶段集中在缺陷的修复上,并未涵盖太多的结构调整和新特性。对于 alpha 以及更早版本的变化,请阅读之前的博客文章。

    为保障 dde-shell 在 Qt 6.8.0 或 6.8.1 的环境可以正常运行(即使是X11环境下),若 ,则 必须 给 qtwayland 打下面的 patch:

    另外,dde-shell 在 alpha 中为修正一个特定问题所包含的一个变更依赖另一个 Qt Wayland 的 patch:

    若你所移植的目标发行版不接受此补丁,则可考虑对 dde-shell 项目 revert 于此相关的对应 commit:

    dde-launchpad

    dde-launchpad 现仅支持以 dde-shell 插件的形式被最终用户使用。因而,打包 dde-launchpad 现需要先打包 dde-shell,并确保用户最终使用的是 dde-shell。

    dde-session

    需要注意的是,我们已在 deepin 23 beta3 起放弃了对 deepin-kwin wayland 的支持,DDE 后续所有 wayland 相关的支持均由 treeland 提供。请参见后续的 Treeland 段落。

    下面涉及到的组件的版本参照如下。对于位于非 linuxdeepin 组织的软件包,此处一并给出了组织名:

    packageversion
    vioken/waylib0.6.13
    vioken/qwlroots0.5.3
    treeland0.5.20
    ddm0.1.10

    Treeland 环境

    Treeland 环境相较于 deepin 23 阶段有了较多的提升,不过由于 Treeland 迭代开发过程中我们对 Qt 以及 wlroots 进行了诸多完善,故 Treeland 对 Qt 以及 wlroots 等组件有较高的版本要求,以及可能需要应用一些额外的 patch。

    DDM

    尽管 DDM 目前是基本功能可用状态,DDM 目前仍相对而言不够稳定。对于打包移植而言,建议采用其他DM来启动用户级的treeland。

    对于其它 DM,只需要打包时安装 usr/share/wayland-sessions/treeland-user.desktop 即可。

    Qt 补丁

    下述假定您的发行版使用的 Qt 版本为 Qt 6.8.2。

    如果你在 Treeland 下遇到小 launchpad 无法输入中文的问题,可以打下面的 patch,但是该 patch 目前尚未进行完整测试,可能存在一些问题。

    https://codereview.qt-project.org/c/qt/qtbase/+/611940

    另外,如果你的发行版所附的 Qt 6.8 版本并未更新至 Qt 6.8.2,则可能需要打三个额外的补丁,可参见 DDE Qt 6.8 适配说明(针对 Qt 6.8.0) 以及 deepin 25 preview DDE 移植简要指南(针对 Qt 6.8.1)

    获取移植帮助

    如果您希望得到移植相关的帮助,请考虑加入我们 DDE 移植小组的在线交流群(下列房间有桥接,任选其一即可),一起展开相关的交流:

    Thursday, January 16, 2025

    编辑的话请把自己的名字加到作者名单里

    即将发布(你阅读到这个文章的时候可能已经发布了)的 deepin 25 preview 将会包含对应的新版 DDE。为了方便各个其它发行版的包维护者可以更方便的移植 DDE 到对应的发行版,这里提供一篇简要的移植指南,用以描述常见的移植问题和解决方案。

    下面对项目名称的称呼均以 GitHub 对应的原始仓库名为准。 {.note}

    概览

    相对于 deepin 23,在 deepin 25 中,包括桌面、通知中心在内的大部分旧的 DDE 桌面组件已转化为 dde-shell 插件形式,以供更好的跨显示环境兼容性。包括控制中心在内的组件也已开始提供全新设计以及基于 QML 的全新界面。同时,我们也对 Qt、DTK 进行了更多完善,以供 DDE 组件以及 Treeland 能够更好的运行。

    由于这些项目的版本间互相影响,我们建议移植人员参照 deepin 25 preview 所使用的包版本进行打包,下面会对主要的部分进行详细说明。

    需要注意的是,由于此文章编写时间早于版本发布时间,故最终版本镜像中使用的版本可能高于下面列出的版本。我们尽可能确保此文章的准确性,但若您需要获取 ISO 镜像中使用的确切软件版本列表,请挂载 ISO 后参阅 LIVE/FILESYS{0,1}.MAN/live/filesystem.manifest 路径对应的文件的内容。

    主要组件

    DTK 与 DTK6

    DTK 是 DDE 组件与应用的基础依赖,适用于 RC 的版本参照如下:

    packageversion
    dtkcommon5.7.7
    dtklog0.0.2
    dtkcore5.7.7
    dtkgui5.7.7
    dtkwidget5.7.7
    dtkdeclarative5.7.7
    qt5integration5.7.7
    qt5platform-plugins5.7.7
    dtk6core6.0.27
    dtk6gui6.0.27
    dtk6widget6.0.27
    dtk6declarative6.0.27
    qt6integration6.0.27
    qt6platform-plugins6.0.27

    除 dtklog 外,本次 DTK 版本号以及相对应的平台插件等版本号均已对齐,可直接参照打包。

    关于 qt5platform-plugins,现有的 dwayland 插件可能对非 DDE 环境(例如 KDE)的 wayland 用户存在影响,可参照 linuxdeepin/developer-center#7217 打对应的 patch 规避影响。

    DDE 主要组件

    下面仅涉及变化较大或影响较广的组件。其余未涉及的组件可正常参照最新 tag 进行打包与移植。

    由于 deepin 25 preview 仍在持续开发过程中,故较多组件采取了 x.99.z 的版本号策略。此外,一般情况下,此类 tag 并不会实际以 git tag 的形式存在,而只会体现在 debian/changlog 文件中。下面涉及到的此类版本号将会在版本发布前后补充对应的 git tag。

    下面涉及到的组件的版本参照如下:

    packageversion
    dde-session1.99.7
    dde-application-manager1.2.23
    dde-shell1.99.19
    dde-launchpad1.99.5
    dde-tray-loader1.99.12
    dde-application-wizard0.1.11
    dde-clipboard6.1.4
    dde-launcher被 dde-launchpad 取代,不再使用
    dde-dock被 dde-shell 取代,不再使用

    dde-application-manager

    由于涉及到诸多关于应用识别的改善,故建议总是使用最新版本。

    dde-shell

    dde-shell 旨在将 DDE 桌面环境插件化与模块化,降低开发难度,使各个组件的替换变得更加容易,并且提供更好的桌面环境集成支持。preview 阶段,dde-shell 已经可以满足原计划的部分目标。现 DDE 环境下,dde-shell 已取代 dde-dock 来负责管理整个 dock 区域、 dde-launchpad 提供了对应的 dde-shell 插件用以展示启动器相关的界面、原 dde-session-ui 中的通知中心部分也转到了 dde-shell 中,且转用了新的界面设计。

    关于 shell 的服务启动方面,为了方便故障排查,dde-shell 从原本的单进程转为了两个进程(分别提供桌面和任务栏两个部分)。另外,shell项目的任务栏部分在此阶段也配合 dde-application-manager 对应用识别的准确度进行了诸多完善。若仍有发现应用错误识别和错误分组的问题,欢迎及时反馈。

    为保障dde-shell在Qt6.8之后的环境可以正常运行(即使是X11环境下),必须给qtwayland打下面的patch:

    https://codereview.qt-project.org/c/qt/qtwayland/+/603556

    dde-launchpad

    dde-launchpad 现仅支持以 dde-shell 插件的形式被最终用户使用。因而,打包 dde-launchpad 现需要先打包 dde-shell,并确保用户最终使用的是 dde-shell。

    dde-session

    需要注意的是,我们已在 deepin 23 beta3 起放弃了对 deepin-kwin wayland 的支持,DDE 后续所有 wayland 相关的支持均由 treeland 提供。请参见后续的 Treeland 段落。

    下面涉及到的组件的版本参照如下。对于位于非 linuxdeepin 组织的软件包,此处一并给出了组织名:

    packageversion
    vioken/waylib0.6.10
    vioken/qwlroots0.5.2
    treeland0.5.17
    ddm0.1.9

    Treeland 环境

    Treeland 环境相较于 deepin 23 阶段有了较多的提升,不过由于 Treeland 迭代开发过程中我们对 Qt 以及 wlroots 进行了诸多完善,故 Treeland 对 Qt 以及 wlroots 等组件有较高的版本要求,以及可能需要应用一些额外的 patch。

    DDM

    尽管 DDM 目前是基本功能可用状态,DDM 目前仍相对而言不够稳定。对于打包移植而言,建议采用其他DM来启动用户级的treeland。

    对于其它 DM,只需要打包时安装 usr/share/wayland-sessions/treeland-user.desktop 即可。

    Qt 补丁

    下述假定您的发行版使用的 Qt 版本为 Qt 6.8.1。

    为保障 dde-shell 在 Treeland 上可以正常运行,需要打下面的 patch,否则可能会出现 dde-shell 崩溃的情况。

    https://codereview.qt-project.org/c/qt/qtbase/+/607654

    如果你在 Treeland 下遇到小 launchpad 无法输入中文的问题,可以打下面的 patch,但是该 patch 目前尚未进行完整测试,可能存在一些问题。

    https://codereview.qt-project.org/c/qt/qtbase/+/611940

    另外,如果你的发行版所附的 Qt 6.8 版本并未更新至 Qt 6.8.1,则可能需要打两个额外的补丁,可参见 DDE Qt 6.8 适配说明

    获取移植帮助

    如果您希望得到移植相关的帮助,请考虑加入我们 DDE 移植小组的在线交流群(下列房间有桥接,任选其一即可),一起展开相关的交流:

    Thursday, January 2, 2025

    UOS 这仓库有多鬼畜,就不用我多说了,开发的时候每次都要重装一个不同版本的系统也挺麻烦,比如 1060、1063、1070、1070u1。。。

    所以我就想到,我可以用构建用的 rootfs 加上仓库,整出来一个基础环境,然后通过 distrobox 来启动,这样随时都可以快速准备一个环境。

    平时我用的开发工具就 neovim 和 vscode 居多,所以再配合上 nix 把 neovim 和一些 UOS 缺少的工具都装上,想想都是美滋滋。

    说干就干!

    构建 Docker 镜像

    由于 UOS 有多个不同架构的支持,肯定不能绑死到一个平台上,我使用 docker buildx 来构建多架构镜像。rootfs 我就不公开了,直接上 Dockerfile。

    FROM --platform=$TARGETPLATFORM scratch

    ARG TARGETARCH
    ARG UOS_VERSION

    ADD buster-${TARGETARCH}-1050update4.tgz /

    RUN echo "deb [trusted=yes] http://pools.uniontech.com/desktop-professional ${UOS_VERSION:-eagle/1070} main contrib non-free" > /etc/apt/sources.list

    RUN apt-get update && apt-get install -y \
    apt-utils \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release \
    && apt-get dist-upgrade -y \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

    CMD [ "bash" ]

    这里为了方便我构建,我将仓库的名称使用变量控制了。

    docker buildx build --platform=linux/amd64 -t linuxdeepin/1063:base --build-arg UOS_VERSION=eagle/1063 . --load

    只需要控制 label 和 仓库名称,就能快速的创建出一个可用的 docker 镜像。使用 --load 参数构建完以后直接导入镜像,可以在 docker images 中看到。

    创建 Distrobox 环境

    现在有个可用的 docker 镜像,就可以使用 distrobox 创建环境了。

    distrobox create --image linuxdeepin/1063:base --name 1063 --volume /nix:/nix:rw --additional-flags "--pids-limit -1"

    安装 nix 的过程请参考上一篇文章,这里是把 nix 挂载到环境里了。

    运行以后等待一会儿,就看到创建成功了。

    Creating '1063' using image linuxdeepin/1063:base        [ OK ]
    Distrobox '1063' successfully created.
    To enter, run:

    distrobox enter 1063

    Successfully copied 2.05kB to /tmp/1063.os-release

    提醒我们用 distrobox enter 1063 进入环境。

    运行

    运行的话没啥问题,只是需要设置一下用户密码,不知道是不是 distrobox 改变策略了,以前应该是首次进入的时候就提醒设置密码,现在必须手动先运行一下 passwd,不然 sudo 之类的命令是不能用的。

    ❯ distrobox enter 1063
    Starting container... [ OK ]
    Installing basic packages... [ OK ]
    Setting up devpts mounts... [ OK ]
    Setting up read-only mounts... [ OK ]
    Setting up read-write mounts... [ OK ]
    Setting up host's sockets integration... [ OK ]
    Integrating host's themes, icons, fonts... [ OK ]
    Setting up distrobox profile... [ OK ]
    Setting up sudo... [ OK ]
    Setting up user groups... [ OK ]
    Setting up user's group list... [ OK ]
    Adding user... [ OK ]
    Ensuring user's access... [ OK ]

    Container Setup Complete!