2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00
2025-04-14 19:17:53 +08:00

Paw GUI

Paw 的 GUI 客户端,基于 Tauri 构建。

  • 有关系统服务部分,请看其[独立的文档](./src-tauri/system -service/README.md)
  • 有关 Rust 部分,请看其独立的文档,下文是前端的项目结构介绍

项目结构

  • index.html 前端入口
  • package.json 包管理器配置文件
  • tailwind.config.js tailwindcss配置文件
  • postcss.config.js postcss配置文件
  • tsconfig.json ts编译器配置
  • tsconfig.node.json 同上
  • vite.config.ts vite配置管理打包相关
  • build-sidecar.mjs 用于打包 sidecar 程序,在调试、发布前会被调用
  • src/
    • assets/ 前端使用的静态资源,如图片、字体
    • components/ 前端组件
    • pages/ 前端不同页面
    • utils/ 实用工具模块
    • App.css 全局 CSS 代码块,目前仅用于导入 tailwindcss
    • App.tsx 软件页面入口
    • bindings.ts 自动生成的 command、event 和类型的定义(从 rust 端)

如何启动/调试项目

  1. 安装语言工具链需要node、pnpm、rust工具链和go工具链目前需要go工具链是因为 build-sidecar.mjs 中也生成 CLI 的二进制文件,未来可能改为下载
  2. 安装依赖 pnpm i
  3. 启动调试模式 pnpm tauri dev build-sidecar.mjs会在其中自动先运行,但是如果更改了 sidecar 的源代码需要手动重新运行该命令sidecar 包括 src-tauri/system-service../proxy

如何打包测试客户端

假设你已经完成了调试的步骤,那么只需要执行 pnpm tauri build 即可构建项目,构建完成后会在 src-tauri/target/release/bundle 中生成对应的测试用安装包

如何打包正式客户端

首先,需要按照下表设置环境变量

变量名 值类型 示例值 说明
GRPC_ENDPOINT 用逗号分割的端点组 "156.229.167.121:9090," GRPC 服务的端点
COSMOS_ENDPOINT 用逗号分割的端点组 "http://156.229.167.121:26657," COSMOS 服务的端点
NODE_SECRET 字符串 "ZXN0YXRlIH…xhgdmlkZW8=" 账户助记词的base64
IS_DEBUG 字符串 "false" 必须为"true"或"false"
ACCOUNT_NAME 字符串 "de1" 账户名

然后,执行 pnpm tauri build 即可构建项目,构建完成后会在 src-tauri/target/release/bundle 中生成对应的正式用安装包

注意,启动后程序会将配置文件持久化到 %AppData%\com.paw.paw-gui,这个路径由 tauri 的 store 插件指定如果使用了不同的环境变量构建程序并且想要重复启动调试还需要删除这个里面的json文件

这个路径在不同操作系统是不同的查看Tauri的源代码发现其利用了库 dirs 的 data_dir如下

  • Linux: XDG_DATA_HOME/com.paw.paw-gui$HOME/.local/share/com.paw.paw-gui
  • Windows: %AppData%/com.paw.paw-gui
  • macOS: $HOME/Library/Application Support/com.paw.paw-gui

多个二进制之间的关系

  • GUI 本项目直接调用安装卸载器通过HTTP与Core、Service通信
  • Core Go编写的命令行程序位于 ../proxy/cmd/client
  • SystemService 运行在系统服务中的二进制,位于 src-tauri/system-service
  • ServiceInstaller 用于安装系统服务的二进制,位于 src-tauri/system-service/installer/install.rs
  • ServiceUninstaller 用于卸载系统服务的二进制,位于 src-tauri/system-service/installer/uninstall.rs
flowchart LR
    Core <-- HTTP --> GUI


    SystemService <-- HTTP --> GUI

    GUI -- sudo exec --> ServiceInstaller
    ServiceInstaller -- install --> SystemService
    GUI -- sudo exec --> ServiceUninstaller
    ServiceUninstaller -- uninstall --> SystemService

    SystemService -- exec/kill --> Core

如何更改 sidecar 的名称?

  1. 更改对应 Cargo.tomlbin/name 的名字系统服务这么改CLI直接修改GO项目输出文件名即可
  2. 更改 build-sidecar.mjs 脚本中 binaries 数组中的名称字符串与上一步匹配CLI则修改下载文件名
  3. 更改 tauri.config.jsonexternalBin 名称
  4. 更改 src-tauri/common/lib.rs 中的静态字符串名称
  5. 更改 src-tauri/install-scripts 中安装脚本中的字符串名称

如何更新程序版本号?

更改 src-tauri/Cargo.toml 中的 workspace.package.versionGUI、系统服务和 Common 的 package 版本号),不需要管理 package.json 版本号。不论是 cargo 识别到的环境变量,还是 tauri 中获取的版本号,都是以此为准。

若 GUI 发现系统服务返回的版本号与自身不一致,会执行卸载重装系统服务的操作,使得系统服务版本再次与自己匹配。

其他注意事项

  • 在 Linux 上,提权依赖 pkexec因此在 WSL 下,通过程序内安装服务需要先安装 polkit而且需要有桌面环境但是在程序通过包管理器安装时应该已经安装过服务了这个仅作为修复服务的方案
Description
paw的桌面端
Readme 256 MiB
Languages
TypeScript 90%
Rust 6.6%
SCSS 2.5%
Just 0.3%
JavaScript 0.2%
Other 0.2%