一句话: 跨平台 GUI 工具,一键检测 银河麒麟 / 统信 UOS / Ubuntu 18.04+ / Windows 10/11 的系统激活状态,读取设备 SN,e-log 把明细写入程序目录 logs/{操作系统}-{名称}-{product_serial}.log(如 uos-os-active-8CG2100C5Z.log),退出输出 ETest 标准 R<{json}>R。
- ✅ 激活状态检测: 启动即自动检测,大字英雄区显示 已激活 / 未激活 / 无需激活 / 无法判定
- ✅ 授权到期时间: GUI 系统信息区显示授权到期(麒麟
.kyinfoterm / 统信到期时间/ Windows 批量激活过期) - ✅ SN 读取: 多方案自动探测(见下文),工具路径可在配置表自配
- ✅ GUI 明细: 系统信息(系统/版本/架构/SN/发行版) + 检测明细表格(检测项/命令/判定/原始输出)
- ✅ e-log 日志: 明细写入
logs/{操作系统}-{名称}-{product_serial}.log(如uos-os-active-8CG2100C5Z.log,程序目录,避免写 U 盘) - ✅ 确认流程: 已激活点「确认激活状态」→ 倒计时自动关闭;未激活时 auto_close 开→自动关窗,关→显示「重新检测」
- ✅ ETest R 标准输出: 退出时输出
R<{json}>R,仅「激活校验通过 + 已确认」才status:true - ✅ 配置表自动生成: 首次运行无
os-active.toml自动生成默认配置(含注释) - ✅ tools 工具 + start.sh: 按
tools/<工具名>/<架构>/<os>/<工具>放置,start.sh一键提权启动+EGL 回退 - ✅ 文件夹部署包:
just pack产出与产测工具一致的部署目录
| 系统 | PASS(全部校验通过) | FAIL(存在未通过项) |
|---|---|---|
| Windows 10 | ![]() |
— |
| 银河麒麟 V10 | ![]() |
![]() |
| 统信 UOS V20 | ![]() |
![]() |
主界面:大字
PASS/FAIL= 全部启用校验(产品序列号/主板序列号/激活状态)通过与否;「校验流程」逐项列出 通过/跳过/失败;「系统信息」含 产品序列号/主板序列号/激活状态/授权到期(检测明细表仅 debug 构建);确认后倒计时自动关闭,退出输出 ETestR<...>R结果。
| 系统 | 检测方式 | 判定依据 |
|---|---|---|
| Windows 10/11 | slmgr.vbs -xpr + -dlv |
永久激活/已激活/将在…到期 → 已激活;通知模式/未授权 → 未激活 |
| 银河麒麟 | kylin_activation_check(官方) |
含已激活 → 已激活;含未激活/试用/已过期 → 未激活 |
| 统信 UOS V20 | uos-activator-cmd -q(官方) |
激活状态=免费授权/已激活 → 已激活;试用期/未激活 → 未激活 |
| Ubuntu 18.04+ | 无激活机制 | 无需激活 |
麒麟激活:仅用
kylin_activation_check(非空才判定;已移除 licence -l / nklicadm -s / 文件式 .kyinfo/.kyactivation/kylin-verify);到期时间取自其「试用到期时间」。
系统激活(生产激活):UOS/麒麟界面提供「系统激活」面板(仅未激活时显示)——UOS 选激活码/KMS/试用;麒麟选激活码/一键激活(-b),若配置
[activate].qrcode=true再加「扫码激活(-q)」。输入激活码后点「执行激活」调用uos-activator-cmd/kylin_activate执行,执行后自动重新检测并更新激活状态。
多方案自动探测,工具路径可在 os-active.toml 的 [sn].tool_path 自配:
| # | 方案 | 来源 | 需 root |
|---|---|---|---|
| product_serial(主 SN)链 — 查询默认全开,查到即跳过后续: |
| # | 方案 | 来源 | 需 root |
|---|---|---|---|
| 1 | ByoDmi 工具 -smbiosinfo |
DMI SMBIOS Type1 Serial(对齐产测烧录位置) | 是 |
| 2 | dmidecode -s system-serial-number |
DMI 标准命令 | 是 |
| 3 | /sys/class/dmi/id/product_serial |
DMI sysfs | 否 |
board_serial 链 — 查询默认全开,查到即跳过后续:
| # | 方案 | 来源 | 需 root |
|---|---|---|---|
| 1 | dmidecode -s baseboard-serial-number |
DMI 标准命令 | 是 |
| 2 | /sys/class/dmi/id/board_serial |
DMI 主板序列号 | 否 |
Windows: Win32_BIOS.SerialNumber
查询按优先级、查到即跳过后续;过滤占位符(
To be filled/None);是否校验由os-active.toml的[sn].require_product_serial(product_serial)与[sn].require_board_serial(board_serial)控制。
./scripts/start.sh # 一键:root 提权(读 SN)+ 图形环境保留 + EGL 三级回退 + 启动
# 或手动(需 root 读 SN,EGL 回退):
E_AUTOTEST_GL=egl ./os-activeos-active.exe首次运行自动生成(含注释),可修改后重启生效:
[app]
close_after_secs = 3 # PASS 后倒计时 N 秒自动关闭窗口(默认 3)
auto_close = false # true:全部校验通过自动确认并倒计时关闭
[sn]
# SN 工具(ByoDmi)路径,可自配;留空自动探测 tools/ByoDmi/<架构>/<os>/ByoDmi
tool_path = "" # SN 工具路径,留空自动探测
require_product_serial = true # 是否校验 product_serial 非空(计入 PASS)
require_board_serial = true # 是否校验 board_serial 非空(计入 PASS)
[activate]
qrcode = true # 是否开启「扫码激活」
check_activation = true # 是否把「系统激活状态」计入 PASS(默认 true)退出时(on_exit)输出一行 R<{json}>R(ETest 插件标准,主程序正则提取判定):
R<{"content":"PASS;银河麒麟已激活;auto确认","status":true,"opts":{"activation":"已激活","sn":"MT81...","board_serial":"...","all_pass":true,"checks":[{"name":"产品序列号(product_serial)校验","enabled":true,"passed":true,"detail":"MT81..."},...],"expire_at":"2027-05-29",...}}>Rstatus:true需同时满足: 1) 全部启用校验通过(product_serial/board_serial/激活状态,按 toml 启用) 2) 已确认(按钮 或 auto_close=true)content:PASS;...(通过) /NG;...(未通过,含原因)opts: 系统信息 + product_serial/board_serial + 校验流checks+ 授权到期 + 激活判定 + 确认方式 + 检测明细(details,仅 debug 构建)
主界面大字
PASS/FAIL由校验流决定:全部启用校验通过→PASS;任一失败→FAIL;下方「校验流程」逐项列出 通过/跳过/失败 与详情,系统激活状态在「系统信息」栏单独显示。
- 程序目录
logs/{操作系统}-{名称}-{product_serial}.log(如uos-os-active-8CG2100C5Z.log;当前软件路径,避免写 U 盘;不可写则 fallback 家目录): 检测明细(每条命令 + 原始输出 + 判定,仅 debug 构建;release 仅结果级日志) logs/bug.os-active.log: panic 崩溃现场- GUI 底部展示日志文件路径与最新日志,一键打开日志目录
release(生产)剔除检测明细:GUI「检测明细」表、逐条命令日志、R 输出
details均仅 debug 构建携带(#[cfg(debug_assertions)]);生产版只显示 校验流/系统信息/激活状态,输出 R 结果。debug 构建用just run(cargo build),release 用just build-win/build-linux(cargo build --release)。
依赖 Rust(≥1.85)与 just:
cargo install just
just setup # 一键装齐工具链
just doctor # 环境自检
just run # 本机运行
just dist # Windows 包 → dist/os-active-v<版本>.zip
just deb-native # Linux deb(Linux 原生构建,推荐)
just pack # 文件夹部署包 → dist/os-active-pack-v<版本>/(主程序+tools+README+start.sh+config)Linux 二进制以 glibc 2.27 为基线,一次构建可在 Ubuntu 18.04+ / Kylin / UOS 全系运行;start.sh/deb 启动器内置 GLX→EGL→软件渲染三级显示回退。
双源发布:GitHub(境外)+ Gitee(国内),同一批安装包两边都出 tag/release(参考 dsh-desktop 联动)。
① 一键自动(推荐,CI)
.github/workflows/release.yml 在推送 v* tag 时自动:
- 构建 Windows zip + Linux deb(CI runner 原生编译;老系统 Ubuntu18+/Kylin/UOS 用本地
just deb-native或 Windows 交叉just deb打 glibc 2.27 包) release:GitHub Release 建 tag + 上传 zip/deb(用自动github.token,无需额外 secret)gitee:同步分支/tag 到 Gitee +scripts/publish-gitee.mjs上传到 Gitee 发行版(用 secretOS_ACTIVE_TOKEN)
just dist && git tag v0.2.0 && git push origin v0.2.0 github v0.2.0 # 推 tag 触发 CI
# 或 GitHub Actions 页手动 Run workflow,填 tag(如 v0.2.0)补发前置 secret(GitHub 仓库 → Settings → Secrets and variables → Actions → New repository secret):
OS_ACTIVE_TOKEN= Gitee 私人令牌(gitee.com → 设置 → 安全设置 → 私人令牌,勾选projects/releases)。- 网页建 secret 只填「名称 + 值」即可,无需公钥;若走 REST API 才需仓库加密公钥:
gh api repos/EternalNight996/os-active/actions/secrets/public-key --jq '{key,key_id}'(先gh auth login)。
② 手动 CLI(本地/补发)
# GitHub(需 gh 已登录,scope 含 repo)
gh release create v0.2.0 "dist/os-active-v0.2.0.zip" "dist/os-active_0.2.0-1_amd64.deb" --repo EternalNight996/os-active --title v0.2.0 --notes "os-active v0.2.0 跨平台发布"
# Gitee(需 GITEE_TOKEN)
GITEE_TOKEN=<令牌> node scripts/publish-gitee.mjs --tag v0.2.0 --artifacts-dir dist --repo eternalnight996/os-activeGitHub 附件上传 zip + deb;Gitee 发行版同样上传
*.zip+*.deb。
tools/ 存放产测/硬件工具,按 工具名 → 架构 → 操作系统 → 具体工具 分层。具体工具不上传 git(体积大/产线定制),用户自行放置,程序自动探测:
tools/
<工具名>/
<架构>/ # x86_64 / aarch64 ...
<操作系统>/ # linux / windows ...
具体工具
当前预留:ByoDmi(DMI/SN 烧录与读取)。详见 tools/README.md。
推 tag 自动完成:Windows zip + Linux deb 跨平台构建 → 发布 GitHub Release → 同步分支/tag 到 Gitee → 上传 Gitee 发行版(.github/workflows/release.yml)。首次需在 GitHub Actions secrets 配 GITEE_TOKEN。
git tag v0.2.0 && git push origin master github v0.2.0 # 双源推 tag 触发 CIsrc/ # 源码(main/app/config/data/detect)
tools/ # 工具(不上传 git,用户自添;按 工具名/架构/os/工具 分层)
assets/ # 界面截图
docs/ # 文档(含 TP100 分析)
vendor/ # EGL patch 的 eframe 0.36.1
justfile # 构建/打包统一入口
.github/ # CI 发布工作流
scripts/ # 启动脚本(start.sh + start.bat)与发布脚本
- eframe 0.36.1(vendor)—— 国产 OS EGL 回退 patch(
E_AUTOTEST_GL=egl→PreferEgl,绕开 UOS/Kylin 损坏的 GLX;Linux 默认 EGL)




