> For AI agents: the complete documentation index is available at https://renmori.mewbaka.cn/llms.txt, the full documentation bundle is available at https://renmori.mewbaka.cn/llms-full.txt.

# renmori gui

`renmori gui` 打开一个基于 Tkinter 的原生窗口，用于在不使用终端的情况下完成保护、校验与配置文件编辑。

图形界面自 1.1.0 起提供，它不实现独立的保护逻辑，而是以子进程方式调用与终端完全相同的 `renmori protect` 与 `renmori verify` 命令，因此插件自动下载、校验与 JSON 结果等行为与 CLI 一致。

## 语法

```bash
renmori gui [--lang {auto,en,zh}]
```

界面语言与 CLI 的规则相同：`--lang` 优先，其次为环境变量 `RENMORI_LANG`，再次为系统区域设置；图形界面提供中文与英文两种语言，其他区域设置下显示英文，`--no-color` 与 `--quiet` 对图形界面没有作用。

## 运行环境

Tkinter 随 CPython 一同发行，图形界面不引入任何额外依赖；未调用 `renmori gui` 时，CLI 不会导入 Tkinter，以下环境需要单独处理：

| 环境                                      | 处理方式                                                           |
| --------------------------------------- | -------------------------------------------------------------- |
| Debian、Ubuntu 等发行版自带的 Python            | Tkinter 拆分为独立软件包，需执行 `sudo apt install python3-tk` 或使用发行版对应的包名 |
| Homebrew 安装的 Python（macOS）              | 需执行 `brew install python-tk`                                   |
| uv 或 python-build-standalone 提供的 Python | Tcl/Tk 数据随解释器提供但未设置 `TCL_LIBRARY`、`TK_LIBRARY`，图形界面启动时会自动定位并设置 |
| 无显示环境（SSH 会话、CI runner、容器）              | 无法打开窗口，请改用 CLI                                                 |

无法启动时，`renmori gui` 向 stderr 输出原因并以退出码 2 结束：

| 输出                                          | 原因                          |
| ------------------------------------------- | --------------------------- |
| `GUI needs Tkinter, which is not available` | 当前 Python 未包含 Tkinter，按上表安装 |
| `无法打开窗口（没有可用显示）。`                           | 没有可用的图形显示                   |

## 窗口结构

窗口包含「保护」「校验」「配置」三个标签页，底部为状态栏；状态栏依次显示「就绪」「运行中…」，任务结束后显示「✓ 完成」或「✗ 失败」，保存配置文件后显示保存路径。

「保护」与「校验」标签页下方各有一个日志区：任务开始时，日志区首行显示实际执行的完整命令（以 `$` 开头），随后实时显示 CLI 的全部输出，包括 stderr 中的进度信息与 stdout 最后一行的 JSON 结果；这些内容即 CLI 的原始输出，可直接用于问题排查。

同一时间只能运行一个任务，任务运行期间对应按钮不可点击，请在任务结束前保持窗口打开。

## 保护

「保护」标签页对应 [`renmori protect`](https://renmori.mewbaka.cn/cli/protect.md)。

### 路径

| 字段        | 对应参数                     | 说明                                                    |
| --------- | ------------------------ | ----------------------------------------------------- |
| 游戏构建      | `<game-dir \| game.zip>` | 通过「选目录…」选择包含 `game/` 的发行版构建目录，或通过「选 .zip…」选择启动器打出的压缩包 |
| 输出目录 (-o) | `-o, --output`           | 留空则原地保护（默认先备份到 `<dir>_bak`）；指定时该目录必须不存在               |

### 选项

| 控件                          | 对应参数               | 默认状态 | 说明                                                                                |
| --------------------------- | ------------------ | ---- | --------------------------------------------------------------------------------- |
| 强度                          | `--strength`       | 空    | 可选空、`full`、`auto`、`baseline`；为空时不传参，沿用配置文件中的值，未配置时为 `full`                        |
| 分块大小                        | `--chunk-size`     | 空    | 单位为字节；为空时沿用配置文件或默认值 65536                                                         |
| 目标平台                        | `--platforms`      | 自动检测 | 取消勾选「自动检测」后可选择 `mac-universal`、`linux-x64`、`win-x64`；取消勾选但未选择任何平台时仍按自动检测处理；仅对插件生效 |
| 锁定（关闭 console/developer/导出） | `--no-lockdown`    | 勾选   | 取消勾选等同于 `--no-lockdown`；保持勾选时不传参，沿用配置文件中的 `lockdown`，未配置时为开启                      |
| 绑定原生启动器（--launcher）         | `--launcher`       | 不勾选  | 仅对插件生效                                                                            |
| 不备份（原地）                     | `--no-backup`      | 不勾选  | 原地保护时不创建 `<dir>_bak`；指定输出目录时无效                                                    |
| 保留明文（调试）                    | `--keep-plaintext` | 不勾选  | 不删除已打包的原始文件，仅用于调试，切勿用于发行版构建                                                       |
| 插件路径                        | `--plugin`         | 空    | 使用指定的插件二进制，而非自动下载的插件                                                              |
| 配置文件 (-c)                   | `-c, --config`     | 空    | 为空时自动探测 `<game-dir>/renmori.toml` 或当前工作目录下的 `renmori.toml`                        |

「保护」标签页不提供排除清单与密钥来源设置；需要这些设置时，请在「配置」标签页生成 `renmori.toml`，再通过「配置文件 (-c)」指定，或将其保存到构建目录中由自动探测读取。

### 执行流程

1. 点击「保护」后，图形界面弹出确认对话框，显示输入路径与输出路径
2. 确认后，图形界面以 `-y` 参数调用 `renmori protect`，CLI 不再进行终端确认
3. 完整保护首次运行时，插件会**直接下载**，不再单独征询；下载后的插件按 Release 的 `SHA256SUMS` 校验并缓存，不希望联网时请设置 `RENMORI_PLUGIN` 或 `RENMORI_NO_DOWNLOAD=1`，详见 [保护强度与闭源插件](https://renmori.mewbaka.cn/cli/plugin.md)
4. 任务结束后，仅当退出码为 0 且 JSON 结果的 `status` 为 `ok` 时，状态栏显示「✓ 完成」

成功后的发布指引会输出在日志区中，图形界面不提供 `--no-hints`、`--quiet` 与 `--no-color` 选项。

:::warning
由于图形界面始终传入 `-y`，确认对话框是保护前的唯一确认步骤；原地保护会覆盖所选目录，请在确认前核对路径，并保留「不备份（原地）」为不勾选状态。
:::

## 校验

「校验」标签页对应 [`renmori verify`](https://renmori.mewbaka.cn/cli/verify.md)，通过「浏览…」选择由 `renmori protect` 生成的受保护构建目录，点击「校验」即可开始；校验内容与 CLI 相同，包括容器哈希、必需文件是否齐全，以及磁盘上是否残留明文脚本与封包，校验结果以 JSON 形式显示在日志区末尾。

## 配置

「配置」标签页是 `renmori.toml` 的表单编辑器，用于生成、打开与保存配置文件；它不会直接影响「保护」标签页的设置，保存后需在「保护」标签页通过「配置文件 (-c)」指定，或将文件放在构建目录中，各配置键的完整语义参阅 [配置文件 renmori.toml](https://renmori.mewbaka.cn/cli/configuration.md)。

### 表单字段

| 控件                | 配置键                        | 说明                                          |
| ----------------- | -------------------------- | ------------------------------------------- |
| 强度                | `[protect] strength`       | 为空时不写入该键                                    |
| 分块大小              | `[protect] chunk_size`     | 为空时不写入该键                                    |
| 目标平台              | `[protect] platforms`      | 均不勾选时不写入该键，保护时按自动检测处理                       |
| 锁定                | `[protect] lockdown`       | 始终写入，取值为 `true` 或 `false`                   |
| 绑定原生启动器           | `[protect] launcher`       | 仅在勾选时写入                                     |
| 保留明文（调试）          | `[protect] keep_plaintext` | 仅在勾选时写入                                     |
| 排除 glob（每行一个）     | `[protect] exclude`        | 匹配到的文件保持不加密                                 |
| 保留在磁盘（每行一个）       | `[protect] keep_on_disk`   | 保留在磁盘上供引擎以外的程序读取的文件，`steam_appid.txt` 已默认包含 |
| 密钥（仅基线）master_env | `[keys] master_env`        | 填写**环境变量名**，而非密钥本身                          |
| 密钥（仅基线）script_env | `[keys] script_env`        | 同上                                          |

### 按钮

| 按钮   | 作用                                       |
| ---- | ---------------------------------------- |
| 打开…  | 读取已有的 `renmori.toml` 并填入表单               |
| 生成预览 | 按当前表单内容重新生成预览区中的配置文本                     |
| 另存为… | 按当前表单内容重新生成配置文本并保存，默认文件名为 `renmori.toml` |

### 注意事项

- 预览区的文本**仅供查看**，「另存为…」会按表单内容重新生成并覆盖预览区，在预览区中的手动修改不会被保存
- 打开文件时，仅上表列出的键会被读入表单，其他键与注释在保存后不会保留
- 读取配置文件需要 Python 3.11+ 或已安装 `tomli`；无法解析时，图形界面会提示原因，并将原始文本载入预览区供查看
- 密钥字段仅记录环境变量名，切勿将密钥写入配置文件，CI 中的密钥管理参阅 [CI 与密钥管理](https://renmori.mewbaka.cn/integration/ci.md)

## 故障排查

| 现象                            | 原因 / 处理                                                                                |
| ----------------------------- | -------------------------------------------------------------------------------------- |
| 执行 `renmori gui` 后立即退出，退出码为 2 | 缺少 Tkinter 或没有可用显示，参见「运行环境」                                                            |
| macOS 上窗口打开后短暂显示空白            | Tk 在部分环境下首次绘制较慢，图形界面会在启动后自动刷新一次布局；仍为空白时调整一次窗口大小即可                                      |
| 状态栏显示「✗ 失败」                   | 查看日志区中以 `error:` 开头的行，并对照 [故障排查](https://renmori.mewbaka.cn/cli/troubleshooting.md) 处理 |
| 在「配置」标签页修改的设置未生效              | 配置文件需保存后在「保护」标签页通过「配置文件 (-c)」指定，或放在构建目录中                                               |
| 预览区中的手动修改丢失                   | 设计如此，「另存为…」按表单内容重新生成配置文本；需要手动编辑时，请保存后使用文本编辑器修改                                         |

## 相关页面

- [`renmori protect`](https://renmori.mewbaka.cn/cli/protect.md)：全部参数、文件处理规则与执行流程
- [`renmori verify`](https://renmori.mewbaka.cn/cli/verify.md)：校验项目与使用方式
- [配置文件 renmori.toml](https://renmori.mewbaka.cn/cli/configuration.md)：全部配置键与合并规则
- [保护强度与闭源插件](https://renmori.mewbaka.cn/cli/plugin.md)：插件的获取、校验与缓存
