Skip to content
EternalNight996Public

About

一句话: 跨平台 GUI 工具,一键检测 银河麒麟 / 统信 UOS / Ubuntu 18.04+ / Windows 10/11 的系统激活状态,读取设备 SN,e-log 把明细写入程序目录 logs/<SN>-os-active.log,退出输出 ETest 标准 R<{json}>R。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

OS Active 系统激活状态检测

GUI Platform Log

🌟 Gitee | 🐙 GitHub | 📦 下载

一句话: 跨平台 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 系统信息区显示授权到期(麒麟 .kyinfo term / 统信 到期时间 / 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 Windows PASS —
银河麒麟 V10 麒麟 PASS 麒麟 FAIL
统信 UOS V20 UOS PASS UOS FAIL

主界面:大字 PASS/FAIL = 全部启用校验(产品序列号/主板序列号/激活状态)通过与否;「校验流程」逐项列出 通过/跳过/失败;「系统信息」含 产品序列号/主板序列号/激活状态/授权到期(检测明细表仅 debug 构建);确认后倒计时自动关闭,退出输出 ETest R<...>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 执行,执行后自动重新检测并更新激活状态。

SN 读取

多方案自动探测,工具路径可在 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)控制。

使用

Linux(麒麟/统信/Ubuntu)

./scripts/start.sh        # 一键:root 提权(读 SN)+ 图形环境保留 + EGL 三级回退 + 启动
# 或手动(需 root 读 SN,EGL 回退):
E_AUTOTEST_GL=egl ./os-active

Windows

os-active.exe

配置表 os-active.toml

首次运行自动生成(含注释),可修改后重启生效:

[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)

ETest R 输出

退出时(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",...}}>R
  • status: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→软件渲染三级显示回退。

发布(Release)

双源发布:GitHub(境外)+ Gitee(国内),同一批安装包两边都出 tag/release(参考 dsh-desktop 联动)。

① 一键自动(推荐,CI)

.github/workflows/release.yml 在推送 v* tag 时自动:

  1. 构建 Windows zip + Linux deb(CI runner 原生编译;老系统 Ubuntu18+/Kylin/UOS 用本地 just deb-native 或 Windows 交叉 just deb 打 glibc 2.27 包)
  2. release:GitHub Release 建 tag + 上传 zip/deb(用自动 github.token,无需额外 secret)
  3. gitee:同步分支/tag 到 Gitee + scripts/publish-gitee.mjs 上传到 Gitee 发行版(用 secret OS_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-active

GitHub 附件上传 zip + deb;Gitee 发行版同样上传 *.zip + *.deb。

tools 工具目录

tools/ 存放产测/硬件工具,按 工具名 → 架构 → 操作系统 → 具体工具 分层。具体工具不上传 git(体积大/产线定制),用户自行放置,程序自动探测:

tools/
  <工具名>/
    <架构>/          # x86_64 / aarch64 ...
      <操作系统>/     # linux / windows ...
        具体工具

当前预留:ByoDmi(DMI/SN 烧录与读取)。详见 tools/README.md。

发布与双源管理(GitHub + Gitee)

推 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 触发 CI

目录结构

src/            # 源码(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)

About

一句话: 跨平台 GUI 工具,一键检测 银河麒麟 / 统信 UOS / Ubuntu 18.04+ / Windows 10/11 的系统激活状态,读取设备 SN,e-log 把明细写入程序目录 logs/<SN>-os-active.log,退出输出 ETest 标准 R<{json}>R。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages