@clawhub-zaneniu-e89c4ed109
基于统信规范,使用 deb 格式将应用文件打包到 /opt/apps/${appid}/,并生成符合要求的 info、desktop 和图标文件。
# UOS/deepin 应用打包规范 UOS/deepin 应用基于统信打包规范,使用 deb 格式,所有应用文件必须安装到 `/opt/apps/appid/` 目录下。 ## 核心规则 ### 1. 应用标识(appid) 必须使用**倒置域名**规则,支持小写字母和点号。**包名(Package)必须与 appid 完全一致,且仅支持小写字母。** ``` org.deepin.browser cn.i4.i4tools com.example.myapp ``` ### 2. 目录结构(重要) ``` appid/ ← 直接作为打包根目录,不要有 data/opt 前缀 ├── DEBIAN/ # 打包根目录下的 DEBIAN/(不是 data/DEBIAN/) │ ├── control │ ├── postinst │ ├── prerm │ ├── postrm │ ├── preinst │ └── copyright # 版权文件不动 ├── opt/apps/appid/ ← 打包根目录下创建 opt/,不是 data/opt/ │ ├── entries/ # 资源映射到系统目录(DDE 自动处理) │ │ ├── applications/ # desktop → /usr/share/applications/ │ │ │ └── appid.desktop │ │ ├── icons/ # 图标 → /usr/share/icons/ │ │ │ └── hicolor/scalable/apps/appid.svg │ │ └── ... │ ├── files/ # 应用主体文件(原包内容放这里) │ │ ├── bin/ │ │ ├── lib/ │ │ ├── run.sh │ │ └── resources/ │ └── info # 应用描述文件(JSON,DDE 解析后自动配置映射) ``` **⚠️ 关键教训:** - `dpkg-deb` 打包时,`DEBIAN/` 和 `opt/` 必须**直接位于打包根目录**,不能套一层 `data/` 再放 opt - 正确:`./opt/apps/appid/...`;错误:`./data/opt/apps/appid/...`(会导致文件装到 `/data/opt/...`) - 打包命令在 repack 目录的**父目录**执行:`dpkg-deb --build repack_dir output.deb` ### 3. info 文件(必需) info 文件是 UOS 打包的**核心文件**,由 DDE 桌面环境解析后**自动配置** entries 到系统目录的映射(无需手动写 postinst 创建 symlink)。 路径:`opt/apps/appid/info` ```json { "appid": "cn.i4.i4tools", "name": "i4Tools", "version": "3.09.002", "arch": ["amd64"], "permissions": { "autostart": false, "notification": true, "trayicon": true, "clipboard": true, "account": false, "bluetooth": false, "camera": false, "audio_record": false, "installed_apps": false }, "support-plugins": [], "plugins": [] } ``` **字段说明:** | 字段 | 说明 | 要求 | |------|------|------| | appid | 应用唯一标识 | 必填,必须与包名一致 | | name | 应用默认名称 | 必填 | | version | 版本号 | 必填,格式 `{MAJOR}.{MINOR}.{PATCH}`,纯数字 | | arch | 支持的架构 | 必填,支持:amd64, arm64, loongarch64, mips64el, sw_64 | | permissions | 沙箱权限 | 布尔值,默认 false | | support-plugins | 支持的插件类型 | 可选 | | plugins | 实现的插件类型 | 可选 | ### 4. Desktop Entry 文件 路径:`opt/apps/appid/entries/applications/appid.desktop` 编码:**必须 UTF-8**(其他编码会导致中文乱码) ```ini [Desktop Entry] Version=3.09.002 Type=Application Name=i4Tools Name[zh_CN]=爱思助手 Comment=苹果设备管理工具 Comment[zh_CN]=苹果设备管理工具 GenericName=i4Tools GenericName[zh_CN]=爱思助手 Exec=/opt/apps/cn.i4.i4tools/files/run.sh Icon=/opt/apps/cn.i4.i4tools/files/resources/logo.png Terminal=false Categories=utils Keywords=i4Tools;i4 StartupNotify=true ``` **必填字段:** `[Desktop Entry]`、`Name`、`Exec`、`Icon`、`Type`、`Terminal`、`StartupNotify` **Icon 路径注意:** 如果图标在 entries/ 下但 logo 资源在 files/ 下,应使用 `files/resources/logo.png` 的绝对路径,或将图标文件放入 `files/resources/` 后在 desktop 中引用。 **Categories 可选值:** | 值 | 启动器分类 | |---|-----------| | Network | 网络应用 | | Chat | 社交沟通 | | Audio | 音乐欣赏 | | AudioVideo | 视频播放 | | Graphics | 图形图像 | | Game | 游戏娱乐 | | Office | 办公学习 | | Reading | 阅读翻译 | | Development | 编程开发 | | System | 系统管理 | | utils | 工具类(未在上表时归为"其他应用") | ### 5. 图标 矢量格式(推荐 SVG): ``` opt/apps/appid/entries/icons/hicolor/scalable/apps/appid.svg ``` 非矢量格式(PNG,分辨率 16/24/32/48/128/256/512): ``` opt/apps/appid/entries/icons/hicolor/24x24/apps/appid.png opt/apps/appid/entries/icons/hicolor/48x48/apps/appid.png opt/apps/appid/entries/icons/hicolor/128x128/apps/appid.png ``` ### 6. 文件系统权限 - **系统目录**:只读,不依赖其内容 - **应用数据目录**:使用 XDG 环境变量 | 环境变量 | 路径 | |----------|------| | `$XDG_DATA_HOME` | `~/.local/share` | | `$XDG_CONFIG_HOME` | `~/.config` | | `$XDG_CACHE_HOME` | `~/.cache` | 应用数据路径:`$XDG_DATA_HOME/appid`(例:`~/.local/share/org.deepin.browser`) **禁止直接写入 `$HOME`!** ### 7. DEBIAN 钩子脚本规范 #### 7.1 版权/归属信息不动 以下内容属于版权/归属信息,**不要修改**: - `DEBIAN/copyright` 文件 - `DEBIAN/control` 中的 `Maintainer` 字段 - 原包自带的业务逻辑(如 udev 规则内容) #### 7.2 可以修改的部分 - `DEBIAN/control` 中的 `Package`(包名,需与 appid 一致) - `DEBIAN/control` 中的 `Breaks`/`Replaces`(防冲突) - 所有维护脚本的功能逻辑(修复 bug、适配 UOS 环境) - desktop 文件、info 文件的内容 #### 7.3 rm -rf 命令规范 ```bash # ✅ 正确(带引号) rm -rf "$INSTALL_DIR/tmp" # ❌ 错误(未引用变量,重定向不受 sudo 影响) sudo echo xxx > /lib/udev/rules.d/xxx # 重定向不在 sudo 作用域 # 正确做法: printf '%s\n' "content" | sudo tee /lib/udev/rules.d/xxx > /dev/null ``` #### 7.4 sudo 与重定向 在脚本中,`sudo` **不影响重定向**(`>`、`>>`)。如果需要 sudo 写入文件,使用 `tee`: ```bash # 错误 sudo echo "rule" > /path/file # 正确 printf '%s\n' "rule" | sudo tee /path/file > /dev/null ``` #### 7.5 UOS 无 sudo 环境适配 UOS/统信环境下,普通用户可以直接写入 `/lib/udev/rules.d/` 等目录。可以通过 `/etc/os-release` 检测: ```bash if [ -f /etc/os-release ]; then . /etc/os-release case "$ID" in uos|uniontech|deepin) # UOS:直接写入,无需 sudo printf '%s\n' "$CONTENT" > /path/file ;; *) # 其他系统:使用 sudo printf '%s\n' "$CONTENT" | sudo tee /path/file > /dev/null ;; esac fi ``` #### 7.6 shellcheck 检查 ```bash sudo apt install shellcheck shellcheck DEBIAN/postinst DEBIAN/prerm DEBIAN/postrm DEBIAN/preinst ``` ## 完整打包流程 ### Step 1:分析原始 deb 包 ```bash dpkg-deb -I original.deb # 查看包信息 dpkg-deb -x original.deb /tmp/orig/ # 解压数据 dpkg-deb -e original.deb /tmp/orig/DEBIAN # 解压控制信息 ``` ### Step 2:建立 UOS 规范目录结构 ```bash APPID="cn.i4.i4tools" mkdir -p APPID/opt/apps/APPID/{entries/applications,entries/icons/hicolor/scalable/apps,files} ``` ### Step 3:迁移文件 - **应用主体(原包 opt/ 下的内容)** → `opt/apps/APPID/files/` - **desktop 文件** → `opt/apps/APPID/entries/applications/APPID.desktop` - **图标** → `opt/apps/APPID/entries/icons/hicolor/scalable/apps/APPID.svg` - **创建 info 文件** → `opt/apps/APPID/info` ### Step 4:更新 desktop 文件 - `Exec` 路径改为 `files/` 下的实际路径 - `Icon` 路径指向 `files/resources/` 下的图标 - 确认 `StartupNotify=true` - 确保编码为 UTF-8 ### Step 5:编写/更新 DEBIAN 脚本 - `preinst`:安装前清理旧目录(如有)、写入 udev 规则(用 tee 不用 echo+重定向) - `postinst`:写入 udev 规则(UOS 检测)、触发 udev reload - `prerm`:移除 desktop 链接(如有) - `postrm`:卸载后清理 udev 规则 - **不要删除或修改 copyright 文件** ### Step 6:写 control 文件 ``` Package: APPID Version: x.x.x Section: utils Priority: optional Architecture: amd64 Maintainer: <保持原样,不动> Breaks: APPID Replaces: APPID Description: 应用描述 ``` ### Step 7:打包 ```bash # 在 repack 目录的**父目录**执行 # 目录结构应为: # repack/ # ├── DEBIAN/ # ├── opt/ # └── usr/ (如需要) # 不要有 data/ 前缀 dpkg-deb --build repack/ output_VERSION_amd64.deb ``` ### Step 8:验证 ```bash dpkg-deb -I output.deb # 检查 control dpkg-deb -c output.deb | head -30 # 检查归档路径(应为 ./opt/...,不是 ./data/opt/...) sudo dpkg -i output.deb # 安装测试 dpkg -L APPID | grep -E "(entries|info)" # 检查文件列表 ls /opt/apps/APPID/ # 确认目录存在 ls /usr/share/applications/ | grep APPID # 确认 desktop 软链接 ls /usr/share/icons/.../APPID.svg # 确认 icon 软链接 cat /lib/udev/rules.d/38-APPID.rules # 确认 udev 规则 shellcheck DEBIAN/postinst DEBIAN/prerm DEBIAN/postrm DEBIAN/preinst ``` ## 支持的 CPU 架构 | 架构 | CPU 系列 | |------|---------| | amd64 | x86: 海光、兆芯、Intel、AMD | | arm64 | ARM64: 飞腾、鲲鹏、海思麒麟、瑞芯微 | | loongarch64 | 龙芯 3A5000/3B5000+ | | mips64el | 龙芯 3A4000/3A3000 及更早 | | sw_64 | 申威 CPU | ## 常见错误 | 错误 | 原因 | 解决 | |------|------|------| | 文件装到 `/data/opt/...` | 打包根目录内嵌套了 `data/` 层 | 打包时 `DEBIAN/` 和 `opt/` 直接在 repack 根目录下 | | 快捷方式不显示 | Exec 路径无效 / desktop 编码非 UTF-8 | 检查路径;保存为 UTF-8;确认 StartupNotify=true | | 图标不显示 | Icon 路径错误 | 使用 `files/resources/logo.png` 或确认 entries 下图标路径 | | DDE 未自动映射 entries | 缺少 info 文件 | 必须有 `opt/apps/appid/info` 文件 | | udev 规则无效 | sudo echo 重定向不生效 | 使用 `tee` 而非 `echo + 重定向` | | info 文件无效 | JSON 格式错误 | 严格 JSON 格式,注意字段名拼写 | | 中文乱码 | desktop 文件非 UTF-8 编码 | 保存为 UTF-8 编码 | | shellcheck 报错 | 脚本语法问题 | SC2024(sudo 重定向)、SC2129(多次重定向) | | 维护脚本执行失败 | 权限不够 / 路径问题 | UOS 下 `/etc/os-release` 检测判断是否需要 sudo | FILE:_meta.json { "ownerId": "kn7a4eewgbq6zevf2bshnrfqrh837td4", "slug": "uos-packager", "version": "1.0.0", "publishedAt": 1773926345329 } FILE:references/template_build.sh #!/bin/bash # # UOS 应用创建脚手架 # 自动生成符合 UOS 打包规范的目录结构 # set -e APPID="-" APPNAME="-" if [[ -z "$APPID" || -z "$APPNAME" ]]; then echo "用法: $0 <appid> <appname> [version]" echo "示例: $0 org.example.myapp 我的应用 1.0.0" exit 1 fi VERSION="-1.0.0" # 校验 appid 格式(倒置域名) if ! echo "$APPID" | grep -qE '^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$'; then echo "错误: appid 格式不正确,应使用倒置域名,如 org.deepin.browser" exit 1 fi echo "=== 创建 UOS 应用脚手架: $APPID ===" mkdir -p "$APPID/entries/applications" mkdir -p "$APPID/entries/icons/hicolor/scalable/apps" mkdir -p "$APPID/entries/icons/hicolor/128x128/apps" mkdir -p "$APPID/entries/icons/hicolor/256x256/apps" mkdir -p "$APPID/files/bin" mkdir -p "$APPID/entries/doc" mkdir -p "$APPID/entries/locale/zh_CN" mkdir -p "$APPID/DEBIAN" # ── info 文件 ──────────────────────────────────────────────── cat > "$APPID/info" << EOF { "appid": "APPID", "name": "APPNAME", "version": "VERSION", "arch": ["amd64"], "permissions": { "autostart": false, "notification": false, "trayicon": false, "clipboard": false, "account": false, "bluetooth": false, "camera": false, "audio_record": false, "installed_apps": false }, "support-plugins": [], "plugins": [] } EOF # ── desktop 文件 ──────────────────────────────────────────── cat > "$APPID/entries/applications/APPID.desktop" << EOF [Desktop Entry] Name=APPNAME Name[zh_CN]=APPNAME Comment=UOS Application Comment[zh_CN]=UOS 应用 Exec=/opt/apps/APPID/files/bin/APPID##*. Icon=APPID Type=Application Terminal=false StartupNotify=true Categories=Development; EOF # ── SVG 图标模板(占位符)─────────────────────────────────── cat > "$APPID/entries/icons/hicolor/scalable/apps/APPID.svg" << 'SVGEOF' <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128"> <rect width="128" height="128" rx="16" fill="#0081FF"/> <text x="64" y="80" font-size="64" text-anchor="middle" fill="white" font-family="sans-serif">APP</text> </svg> SVGEOF # ── PNG 占位符说明 ────────────────────────────────────────── touch "$APPID/entries/icons/hicolor/128x128/apps/APPID.png" touch "$APPID/entries/icons/hicolor/256x256/apps/APPID.png" # ── 可执行脚本模板 ────────────────────────────────────────── cat > "$APPID/files/bin/APPID##*." << 'BINEOF' #!/bin/bash # APPNAME - APPID # UOS 应用入口脚本 echo "APPNAME 已启动" # 在此替换为实际的应用启动命令 # exec /opt/apps/APPID/files/bin/real_app "$@" BINEOF chmod +x "$APPID/files/bin/APPID##*." # ── debian/control ────────────────────────────────────────── cat > "$APPID/DEBIAN/control" << EOF Package: APPID Version: VERSION Section: utils Priority: optional Architecture: amd64 Maintainer: $(whoami) <$(whoami)@localhost> Description: APPNAME EOF # ── README ───────────────────────────────────────────────── cat > "$APPID/README.md" << EOF # APPNAME (APPID) ## 打包说明 - **appid**: APPID - **version**: VERSION - **架构**: amd64(修改 info 和 DEBIAN/control 可添加其他架构) ## 待完成 1. 替换 \`entries/icons/hicolor/scalable/apps/APPID.svg\` 为实际 SVG 图标 2. 替换 \`files/bin/APPID##*.\` 为实际可执行文件 3. 填写 desktop 文件的 Comment、Categories 等字段 4. 检查并编写 DEBIAN/postinst(如需要,**禁止修改系统文件**) 5. 执行 \`./build_deb.sh APPID VERSION\` 生成 deb 包 ## 目录结构 \`\`\` APPID/ ├── entries/ │ ├── applications/APPID.desktop │ ├── icons/ │ │ └── hicolor/ │ │ ├── scalable/apps/APPID.svg ← 替换为实际图标 │ │ ├── 128x128/apps/APPID.png │ │ └── 256x256/apps/APPID.png │ └── doc/ ├── files/ │ └── bin/APPID##*. ← 替换为实际程序 ├── info ← 应用描述 ├── DEBIAN/control └── README.md \`\`\` EOF echo "" echo "✅ 脚手架创建完成: $APPID/" echo "" echo "下一步:" echo " 1. 替换图标和可执行文件" echo " 2. 编辑 $APPID/entries/applications/APPID.desktop" echo " 3. 修改 $APPID/info 中的架构等字段" echo " 4. 运行 ./build_deb.sh APPID VERSION 生成 deb" echo "" ls -la "$APPID/" FILE:scripts/build_deb.sh #!/bin/bash # # UOS 应用打包脚本 # 用法: ./build_deb.sh <appid> <version> [arch1,arch2] # 示例: ./build_deb.sh org.example.myapp 1.0.0 amd64 # set -e APPID="-" VERSION="-" ARCHS="-amd64" if [[ -z "$APPID" || -z "$VERSION" ]]; then echo "用法: $0 <appid> <version> [arch1,arch2...]" echo "示例: $0 org.example.myapp 1.0.0 amd64,arm64" exit 1 fi BUILD_DIR="/tmp/uos_build_$$" mkdir -p "$BUILD_DIR" echo "=== UOS 应用打包工具 ===" echo " appid: $APPID" echo " version: $VERSION" echo " archs: $ARCHS" echo " 输出: $BUILD_DIR" echo "" # 解析多架构 IFS=',' read -ra ARCH_ARRAY <<< "$ARCHS" for ARCH in "ARCH_ARRAY[@]"; do ARCH=$(echo "$ARCH" | tr -d ' ') PKG_DIR="$BUILD_DIR/APPID_VERSION_ARCH" echo "--- 打包 $ARCH ---" # 创建目录结构 mkdir -p "$PKG_DIR/DEBIAN" mkdir -p "$PKG_DIR/opt/apps/APPID/entries/applications" mkdir -p "$PKG_DIR/opt/apps/APPID/entries/icons/hicolor/scalable/apps" mkdir -p "$PKG_DIR/opt/apps/APPID/files/bin" # 检查 info 文件 if [[ ! -f "opt/apps/APPID/info" ]]; then echo "⚠ 警告: APPID/opt/apps/APPID/info 不存在,跳过此架构" continue fi # 复制应用目录 if [[ -d "$APPID/entries" ]]; then cp -r "$APPID/entries" "$PKG_DIR/opt/apps/APPID/" fi if [[ -d "$APPID/files" ]]; then cp -r "$APPID/files" "$PKG_DIR/opt/apps/APPID/" fi if [[ -f "$APPID/info" ]]; then cp "$APPID/info" "$PKG_DIR/opt/apps/APPID/" fi # 生成 debian/control cat > "$PKG_DIR/DEBIAN/control" << EOF Package: APPID Version: VERSION Section: utils Priority: optional Architecture: ARCH Maintainer: $(whoami) <$(whoami)@localhost> Description: UOS Application EOF # 复制 desktop 文件(从 entries 或创建空的) if [[ -f "$APPID/entries/applications/APPID.desktop" ]]; then cp "$APPID/entries/applications/APPID.desktop" \ "$PKG_DIR/DEBIAN/APPID.desktop" fi # 检查钩子脚本 for hook in postinst postrm preinst prerm; do if [[ -f "$APPID/DEBIAN/$hook" ]]; then cp "$APPID/DEBIAN/$hook" "$PKG_DIR/DEBIAN/$hook" echo "⚠ 检测到 $hook,已复制(请确保符合规范)" # 检查 rm -rf 用法 if grep -q 'rm -rf.*\$[A-Z_]' "$PKG_DIR/DEBIAN/$hook"; then echo "⚠ 警告: $hook 中 rm -rf 使用了变量,请确保加双引号" fi fi done # 打包 DEB_FILE="APPID_VERSION_ARCH.deb" dpkg-deb --build "$PKG_DIR" "$DEB_FILE" 2>/dev/null || \ fakeroot dpkg-deb --build "$PKG_DIR" "$DEB_FILE" echo "✅ 生成: $DEB_FILE" echo "" done echo "=== 打包完成 ===" ls -lh "APPID"_*.deb 2>/dev/null || true echo "输出目录: $BUILD_DIR" echo "" echo "提示: 安装测试" echo " sudo dpkg -i APPID_VERSION_ARCH_ARRAY[0].deb" echo " # 或在 UOS 桌面上双击 deb 文件安装" FILE:scripts/introspect.sh #!/bin/bash # # UOS deb 包检查脚本 # 检查 deb 包是否符合 UOS 打包规范 # set -e DEB_FILE="-" if [[ -z "$DEB_FILE" ]]; then echo "用法: $0 <xxx.deb>" exit 1 fi if [[ ! -f "$DEB_FILE" ]]; then echo "错误: 文件不存在: $DEB_FILE" exit 1 fi WORK_DIR="/tmp/uos_inspect_$$" mkdir -p "$WORK_DIR" echo "=== UOS deb 包检查: $DEB_FILE ===" echo "" dpkg-deb -e "$DEB_FILE" "$WORK_DIR/DEBIAN" 2>/dev/null || true dpkg-deb -x "$DEB_FILE" "$WORK_DIR/rootfs" 2>/dev/null || true ERRORS=0 WARNINGS=0 # ── 1. 检查 appid 格式 ─────────────────────────────────── INFO_FILE="$WORK_DIR/rootfs/opt/apps/"*/info 2>/dev/null || INFO_FILE="" if [[ -f "$INFO_FILE" ]]; then APPID=$(grep -oP '"appid"\s*:\s*"\K[^"]+' "$INFO_FILE" | head -1) echo "1. appid: $APPID" if ! echo "$APPID" | grep -qE '^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$'; then echo " ❌ appid 不符合倒置域名规范" ((ERRORS++)) else echo " ✅ 格式正确" fi # ── 2. 检查 info 版本格式 ───────────────────────────── VERSION=$(grep -oP '"version"\s*:\s*"\K[^"]+' "$INFO_FILE" | head -1) echo "2. version: $VERSION" if ! echo "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'; then echo " ❌ version 格式错误,应为 {MAJOR}.{MINOR}.{PATCH}.{BUILD}(纯数字)" ((ERRORS++)) else echo " ✅ 格式正确" fi # ── 3. 检查 arch ──────────────────────────────────── ARCH=$(grep -oP '"arch"\s*:\s*\[\K[^\]]+' "$INFO_FILE" | head -1) echo "3. arch: [$ARCH]" VALID_ARCHS="amd64 arm64 loongarch64 mips64el sw_64" for a in $(echo "$ARCH" | tr ',:' ' ' | tr -d '"'); do if echo "$VALID_ARCHS" | grep -qw "$a"; then echo " ✅ $a 是支持的架构" else echo " ❌ $a 是不支持的架构" ((ERRORS++)) fi done else echo "❌ 未找到 info 文件" ((ERRORS++)) fi echo "" # ── 4. 检查 desktop 文件 ────────────────────────────────── DESKTOP_FILE="$WORK_DIR/rootfs/usr/share/applications/"*.desktop 2>/dev/null || DESKTOP_FILE="" if [[ -f "$DESKTOP_FILE" ]]; then echo "4. desktop 文件: $(basename $DESKTOP_FILE)" # 检查编码 ENCODING=$(file -b --mime-encoding "$DESKTOP_FILE" 2>/dev/null || echo "unknown") if [[ "$ENCODING" == "utf-8" ]]; then echo " ✅ UTF-8 编码正确" else echo " ❌ 编码是 $ENCODING,必须为 UTF-8" ((ERRORS++)) fi # 检查必填字段 for field in Name Exec Icon Type Terminal StartupNotify; do if grep -q "^$field=" "$DESKTOP_FILE"; then echo " ✅ $field 已填写" else echo " ❌ 缺少必填字段: $field" ((ERRORS++)) fi done else echo "4. desktop 文件: 未找到(不会显示在启动器中)" ((WARNINGS++)) fi echo "" # ── 5. 检查安装路径 ────────────────────────────────────── OPT_APPS_DIR="$WORK_DIR/rootfs/opt/apps" if [[ -d "$OPT_APPS_DIR" ]]; then echo "5. 安装路径: ✅ 符合 /opt/apps 规范" ls "$OPT_APPS_DIR/" | while read d; do echo " - /opt/apps/$d" done else echo "5. 安装路径: ❌ 未找到 /opt/apps/" ((ERRORS++)) fi echo "" # ── 6. 检查钩子脚本 rm -rf 规范 ────────────────────────── for hook in postinst postrm preinst prerm; do HOOK_FILE="$WORK_DIR/DEBIAN/$hook" if [[ -f "$HOOK_FILE" ]]; then echo "6. 检测到 $hook:" # 检查危险的 rm -rf 用法 if grep -n 'rm\s*-rf\s\+[$]' "$HOOK_FILE" | grep -v '".*\$' | grep -v '"\$[^"]*"' > /dev/null; then echo " ⚠ 警告: $hook 中有未加引号的 rm -rf 变量" ((WARNINGS++)) fi if grep -qE 'rm\s+-rf\s+/\s*\$' "$HOOK_FILE"; then echo " ❌ 致命: $hook 中有递归删除根目录的操作" ((ERRORS++)) fi if grep -qE 'rm\s+-rf\s+/\*' "$HOOK_FILE"; then echo " ❌ 致命: $hook 中有删除系统目录的操作" ((ERRORS++)) fi # shellcheck 检查 if command -v shellcheck &>/dev/null; then if ! shellcheck "$HOOK_FILE" > /dev/null 2>&1; then echo " ⚠ shellcheck 发现问题:" shellcheck "$HOOK_FILE" | head -3 ((WARNINGS++)) else echo " ✅ shellcheck 通过" fi else echo " ℹ 未安装 shellcheck,跳过语法检查(建议安装: sudo apt install shellcheck)" fi fi done echo "" # ── 7. 检查文件权限 ─────────────────────────────────────── echo "7. 文件权限检查:" BIN_FILE="$WORK_DIR/rootfs/opt/apps/"*/files/bin/* 2>/dev/null || true if [[ -x "$BIN_FILE" ]]; then echo " ✅ 可执行文件权限正确" else echo " ℹ 未找到可执行文件或未设置执行权限" fi echo "" echo "=== 检查结果 ===" echo "错误: $ERRORS" echo "警告: $WARNINGS" rm -rf "$WORK_DIR" if [[ $ERRORS -gt 0 ]]; then echo "" echo "❌ 检查未通过,请修复上述错误" exit 1 elif [[ $WARNINGS -gt 0 ]]; then echo "" echo "⚠ 检查通过但有警告" exit 0 else echo "" echo "✅ 检查通过" exit 0 fi
Control and manage Deepin desktop settings including power, display, Bluetooth, airplane mode, user accounts, and time via D-Bus system services.
# Deepin Desktop Control
Manage deepin/UOS desktop settings via D-Bus. Covers all major control center modules including power, display, network, bluetooth, accounts, sound, datetime, boot (Grub2), app store, and more.
## All D-Bus Services
Bus: `--system` (root-level daemon services)
Bus: `--session` (user session services)
### System Services (dde-system-daemon)
| Service | Path | Description |
|---------|------|-------------|
| org.deepin.dde.Power1 | /org/deepin/dde/Power1 | Power, battery, CPU governor, power modes |
| org.deepin.dde.Display1 | /org/deepin/dde/Display1 | Display monitors, backlight brightness |
| org.deepin.dde.Bluetooth1 | /org/deepin/dde/Bluetooth1 | Bluetooth device management |
| org.deepin.dde.AirplaneMode1 | /org/deepin/dde/AirplaneMode1 | Airplane mode, WiFi/Bluetooth radio |
| org.deepin.dde.Timedate1 | /org/deepin/dde/Timedate1 | Date, time, timezone, NTP server |
| org.deepin.dde.Accounts1 | /org/deepin/dde/Accounts1 | User accounts, groups, login settings |
| org.deepin.dde.Daemon1 | /org/deepin/dde/Daemon1 | System daemon: wallpaper, TTY, VM detection |
| org.deepin.dde.InputDevices1 | /org/deepin/dde/InputDevices1 | Touchscreen, mouse, wakeup devices |
| org.deepin.dde.Gesture1 | /org/deepin/dde/Gesture1 | Touchpad/gesture settings |
| org.deepin.dde.Network1 | /org/deepin/dde/Network1 | Network device enable/disable |
| org.deepin.dde.ImageEffect1 | /org/deepin/dde/ImageEffect1 | Desktop blur effect |
| org.deepin.dde.SystemInfo1 | /org/deepin/dde/SystemInfo1 | OS version/info |
| org.deepin.dde.SoundThemePlayer1 | /org/deepin/dde/SoundThemePlayer1 | System sound themes |
| org.deepin.dde.Uadp1 | /org/deepin/dde/Uadp1 | ADP backlight control |
| org.deepin.dde.SwapSchedHelper1 | /org/deepin/dde/SwapSchedHelper1 | Swap scheduler |
| org.deepin.dde.KeyEvent1 | /org/deepin/dde/KeyEvent1 | Key event monitoring (signals only) |
| org.deepin.dde.Grub2 | /org/deepin/dde/Grub2 | Grub2 boot settings, theme, timeout |
### System Services (other daemons)
| Service | Path | Description |
|---------|------|-------------|
| org.deepin.linglong.PackageManager1 | /org/deepin/linglong/PackageManager1 | Linglong app package manager |
| org.deepin.dde.Lastore1 | /org/deepin/dde/Lastore1 | App store (lastore) manager |
| com.deepin.system.Network | /com/deepin/system/Network | Network (system) |
| com.deepin.system.Power | /com/deepin/system/Power | Power (system) |
| com.deepin.system.Display | /com/deepin/system/Display | Display (system) |
| com.deepin.daemon.Timedated | /com/deepin/daemon/Timedated | Timedate daemon proxy |
| com.deepin.daemon.Accounts | /com/deepin/daemon/Accounts | Accounts daemon proxy |
| com.deepin.daemon.PowerManager | /com/deepin/daemon/PowerManager | Power manager proxy |
| com.deepin.defender.* | various | Defender security settings |
| org.deepin.dde.Network1 | /org/deepin/dde/Network1 | Network via deepin-service-manager |
### Session Services
| Service | Path | Description |
|---------|------|-------------|
| dde-session (:1.83) | /org/deepin/dde/SessionManager | Session manager |
| dde-clipboard (:1.107) | /com/deepin/dde/Clipboard | Clipboard management |
| dde-shell (:1.106) | various | DDE shell |
## Reference Files
All raw introspection XML files are saved in:
`~/.openclaw/workspace/skills/deepin-desktop/references/`
## Quick Commands
### Generic Pattern
```bash
# Get all properties
busctl --system call <service> <path> org.freedesktop.DBus.Properties GetAll s "<interface>"
# Get single property
busctl --system call <service> <path> org.freedesktop.DBus.Properties Get s "<interface>" s "<property>"
# Set property (must be writable)
busctl --system call <service> <path> org.freedesktop.DBus.Properties Set s "<interface>" s "<property>" v "<value>"
# Call method
busctl --system call <service> <path> <interface>.<method> <signature> <args...>
```
---
## 1. Power (org.deepin.dde.Power1)
**Path:** `/org/deepin/dde/Power1`
**Service:** dde-system-daemon.service
### Properties (Read)
| Property | Type | Description |
|----------|------|-------------|
| Mode | s | Current power mode: "balance", "performance", "powersave" |
| BatteryPercentage | d | Battery level 0-100 |
| BatteryStatus | u | 0=Unknown, 1=Discharging, 2=Charging, 3=Full |
| BatteryTimeToEmpty | t | Seconds until empty |
| BatteryTimeToFull | t | Seconds until full |
| OnBattery | b | true if on battery |
| HasBattery | b | true if device has battery |
| HasLidSwitch | b | true if has lid switch |
| LidClosed | b | true if lid is currently closed |
| CpuBoost | b | CPU boost enabled |
| CpuGovernor | s | CPU governor string |
| IsBalanceSupported | b | Balance mode supported |
| IsHighPerformanceSupported | b | Performance mode supported |
| IsPowerSaveSupported | b | Power-save mode supported |
| IsInBootTime | b | Currently in boot time |
### Properties (Writable)
| Property | Type | Description |
|----------|------|-------------|
| PowerSavingModeEnabled | b | Power saving mode on/off |
| PowerSavingModeAuto | b | Auto power saving |
| PowerSavingModeAutoBatteryPercent | u | Auto trigger at battery % |
| PowerSavingModeAutoWhenBatteryLow | b | Auto when battery low |
| PowerSavingModeBrightnessDropPercent | u | Brightness drop % |
| SupportSwitchPowerMode | b | Supports switching power mode |
### Methods
```bash
# Get batteries
busctl --system call org.deepin.dde.Power1 /org/deepin/dde/Power1 org.deepin.dde.Power1 GetBatteries
# Set power mode
busctl --system call org.deepin.dde.Power1 /org/deepin/dde/Power1 org.freedesktop.DBus.Properties Set s "org.deepin.dde.Power1" s "Mode" v "balance"
# Enable/disable power saving
busctl --system call org.deepin.dde.Power1 /org/deepin/dde/Power1 org.freedesktop.DBus.Properties Set s "org.deepin.dde.Power1" s "PowerSavingModeEnabled" v false
# Set CPU boost
busctl --system call org.deepin.dde.Power1 /org/deepin/dde/Power1 org.deepin.dde.Power1 SetCpuBoost b true
# Lock CPU frequency
busctl --system call org.deepin.dde.Power1 /org/deepin/dde/Power1 org.deepin.dde.Power1 LockCpuFreq s "performance"
```
---
## 2. Display (org.deepin.dde.Display1)
**Path:** `/org/deepin/dde/Display1`
**Service:** dde-system-daemon.service
### Properties (Read)
| Property | Type | Description |
|----------|------|-------------|
| SupportLabc | b | Supports automatic backlight |
| AutoBacklightEnabled | b | Auto backlight enabled |
### Methods
```bash
# Set backlight brightness (0.0-100.0)
busctl --system call org.deepin.dde.Display1 /org/deepin/dde/Display1 org.deepin.dde.Display1 SetBacklightBrightness d 50.0
# Get display config JSON
busctl --system call org.deepin.dde.Display1 /org/deepin/dde/Display1 org.deepin.dde.Display1 GetConfig
# Check Wayland support
busctl --system call org.deepin.dde.Display1 /org/deepin/dde/Display1 org.deepin.dde.Display1 SupportWayland
```
---
## 3. Bluetooth (org.deepin.dde.Bluetooth1)
**Path:** `/org/deepin/dde/Bluetooth1`
**Service:** dde-system-daemon.service
### Properties (Read)
| Property | Type | Description |
|----------|------|-------------|
| State | u | 0=Off, 1=On, 2=Discovering |
| CanSendFile | b | Can send files |
### Methods
```bash
# Get all adapters (returns JSON)
busctl --system call org.deepin.dde.Bluetooth1 /org/deepin/dde/Bluetooth1 org.deepin.dde.Bluetooth1 GetAdapters
# Example output: [{"Address":"XX:XX:XX:XX:XX:XX","Path":"/org/bluez/hci0","Name":"hostname","Powered":true,"Discovering":false,"Discoverable":true}]
# Get devices for an adapter
busctl --system call org.deepin.dde.Bluetooth1 /org/deepin/dde/Bluetooth1 org.deepin.dde.Bluetooth1 GetDevices o "/org/bluez/hci0"
# Set adapter power on/off
busctl --system call org.deepin.dde.Bluetooth1 /org/deepin/dde/Bluetooth1 org.deepin.dde.Bluetooth1 SetAdapterPowered o "/org/bluez/hci0" b true
# Connect device
busctl --system call org.deepin.dde.Bluetooth1 /org/deepin/dde/Bluetooth1 org.deepin.dde.Bluetooth1 ConnectDevice o "/org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX"
# Disconnect device
busctl --system call org.deepin.dde.Bluetooth1 /org/deepin/dde/Bluetooth1 org.deepin.dde.Bluetooth1 DisconnectDevice o "/org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX"
# Set device trusted
busctl --system call org.deepin.dde.Bluetooth1 /org/deepin/dde/Bluetooth1 org.deepin.dde.Bluetooth1 SetDeviceTrusted o "/org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX" b true
# Remove unpaired device
busctl --system call org.deepin.dde.Bluetooth1 /org/deepin/dde/Bluetooth1 org.deepin.dde.Bluetooth1 ClearUnpairedDevice
# Set discoverable
busctl --system call org.deepin.dde.Bluetooth1 /org/deepin/dde/Bluetooth1 org.deepin.dde.Bluetooth1 SetAdapterDiscoverable o "/org/bluez/hci0" b true
```
---
## 4. Airplane Mode (org.deepin.dde.AirplaneMode1)
**Path:** `/org/deepin/dde/AirplaneMode1`
**Service:** dde-system-daemon.service
### Properties (Read)
| Property | Type | Description |
|----------|------|-------------|
| Enabled | b | Airplane mode is on |
| WifiEnabled | b | WiFi is on |
| BluetoothEnabled | b | Bluetooth is on |
| HasAirplaneMode | b | Device supports airplane mode |
### Methods
```bash
# Get all properties
busctl --system call org.deepin.dde.AirplaneMode1 /org/deepin/dde/AirplaneMode1 org.freedesktop.DBus.Properties GetAll s "org.deepin.dde.AirplaneMode1"
# Enable/disable airplane mode
busctl --system call org.deepin.dde.AirplaneMode1 /org/deepin/dde/AirplaneMode1 org.deepin.dde.AirplaneMode1 Enable b true
```
---
## 5. Date & Time (org.deepin.dde.Timedate1)
**Path:** `/org/deepin/dde/Timedate1`
**Service:** dde-system-daemon.service
### Properties (Read)
| Property | Type | Description |
|----------|------|-------------|
| NTPServer | s | NTP server address |
### Methods
```bash
# Get NTP server
busctl --system call org.deepin.dde.Timedate1 /org/deepin/dde/Timedate1 org.freedesktop.DBus.Properties Get s "org.deepin.dde.Timedate1" s "NTPServer"
# Set NTP server
busctl --system call org.deepin.dde.Timedate1 /org/deepin/dde/Timedate1 org.deepin.dde.Timedate1 SetNTPServer s "ntp.aliyun.com" s ""
# Enable/disable NTP
busctl --system call org.deepin.dde.Timedate1 /org/deepin/dde/Timedate1 org.deepin.dde.Timedate1 SetNTP b true s ""
# Set timezone
busctl --system call org.deepin.dde.Timedate1 /org/deepin/dde/Timedate1 org.deepin.dde.Timedate1 SetTimezone s "Asia/Shanghai" s ""
# Set system time (usec = microseconds since epoch)
busctl --system call org.deepin.dde.Timedate1 /org/deepin/dde/Timedate1 org.deepin.dde.Timedate1 SetTime x 1742400000000000 b false s ""
# Set local RTC
busctl --system call org.deepin.dde.Timedate1 /org/deepin/dde/Timedate1 org.deepin.dde.Timedate1 SetLocalRTC b false b true s ""
```
---
## 6. User Accounts (org.deepin.dde.Accounts1)
**Path:** `/org/deepin/dde/Accounts1`
**Service:** dde-system-daemon.service
### Properties (Read)
| Property | Type | Description |
|----------|------|-------------|
| UserList | as | List of user object paths |
| GroupList | as | List of group names |
| AllowGuest | b | Allow guest account |
| GuestIcon | s | Guest icon path |
| IsTerminalLocked | b | Terminal is locked |
| QuickLoginEnabled | b | Quick login enabled |
### Methods
```bash
# List all groups
busctl --system call org.deepin.dde.Accounts1 /org/deepin/dde/Accounts1 org.freedesktop.DBus.Properties Get s "org.deepin.dde.Accounts1" s "GroupList"
# Get user info
busctl --system call org.deepin.dde.Accounts1 /org/deepin/dde/Accounts1 org.deepin.dde.Accounts1 FindUserByName s "zane"
# Get user's Groups property (on User1000 object)
busctl --system call org.deepin.dde.Accounts1 /org/deepin/dde/Accounts1/User1000 org.freedesktop.DBus.Properties GetAll s "" 2>/dev/null | head -50
# Create user (name, fullName, accountType: 0=standard, 1=admin)
busctl --system call org.deepin.dde.Accounts1 /org/deepin/dde/Accounts1 org.deepin.dde.Accounts1 CreateUser s "newuser" s "New User" i 0
# Delete user
busctl --system call org.deepin.dde.Accounts1 /org/deepin/dde/Accounts1 org.deepin.dde.Accounts1 DeleteUser s "username" b false
# Create group
busctl --system call org.deepin.dde.Accounts1 /org/deepin/dde/Accounts1 org.deepin.dde.Accounts1 CreateGroup s "newgroup" u 1001 b false
# Allow/deny guest account
busctl --system call org.deepin.dde.Accounts1 /org/deepin/dde/Accounts1 org.deepin.dde.Accounts1 AllowGuestAccount b false
```
### User Object Properties (User1000 path example)
On path `/org/deepin/dde/Accounts1/User1000`, properties include:
- `DisplayName`, `UserName`, `UID`, `GID`, `HomeDirectory`, `Shell`
- `AccountType` (0=standard, 1=admin), `IsLogined`, `LoginHistory`
- `IconFile`, `Groups`, `PasswordHint`, `Locked`, `AutomaticLogin`
---
## 7. System Daemon (org.deepin.dde.Daemon1)
**Path:** `/org/deepin/dde/Daemon1`
**Service:** dde-system-daemon.service
### Methods
```bash
# Get custom wallpapers
busctl --system call org.deepin.dde.Daemon1 /org/deepin/dde/Daemon1 org.deepin.dde.Daemon1 GetCustomWallPapers s "desktop"
# Save custom wallpaper
busctl --system call org.deepin.dde.Daemon1 /org/deepin/dde/Daemon1 org.deepin.dde.Daemon1 SaveCustomWallPaper s "desktop" s "/path/to/image.jpg"
# Delete custom wallpaper
busctl --system call org.deepin.dde.Daemon1 /org/deepin/dde/Daemon1 org.deepin.dde.Daemon1 DeleteCustomWallPaper s "desktop" s "wallpaper.jpg"
# Check if PID is a VM
busctl --system call org.deepin.dde.Daemon1 /org/deepin/dde/Daemon1 org.deepin.dde.Daemon1 IsPidVirtualMachine u 1234
# Network connections (raw)
busctl --system call org.deepin.dde.Daemon1 /org/deepin/dde/Daemon1 org.deepin.dde.Daemon1 NetworkGetConnections
# Set plymouth theme
busctl --system call org.deepin.dde.Daemon1 /org/deepin/dde/Daemon1 org.deepin.dde.Daemon1 SetPlymouthTheme s "deepin"
# Scale plymouth
busctl --system call org.deepin.dde.Daemon1 /org/deepin/dde/Daemon1 org.deepin.dde.Daemon1 ScalePlymouth u 2
```
---
## 8. Input Devices (org.deepin.dde.InputDevices1)
**Path:** `/org/deepin/dde/InputDevices1`
**Service:** dde-system-daemon.service
### Properties (Writable)
| Property | Type | Description |
|----------|------|-------------|
| SupportWakeupDevices | a{ss} | Map of wakeup device paths to values (enabled/disabled) |
| Touchscreens | ao | List of touchscreen object paths |
### Methods
```bash
# Set wakeup device
busctl --system call org.deepin.dde.InputDevices1 /org/deepin/dde/InputDevices1 org.deepin.dde.InputDevices1 SetWakeupDevices s "/sys/bus/usb/devices/3-3/power/wakeup" s "enabled"
```
---
## 9. Gesture (org.deepin.dde.Gesture1)
**Path:** `/org/deepin/dde/Gesture1`
**Service:** dde-system-daemon.service
### Methods
```bash
# Set edge move stop duration (ms)
busctl --system call org.deepin.dde.Gesture1 /org/deepin/dde/Gesture1 org.deepin.dde.Gesture1 SetEdgeMoveStopDuration i 500
# Set input ignore
busctl --system call org.deepin.dde.Gesture1 /org/deepin/dde/Gesture1 org.deepin.dde.Gesture1 SetInputIgnore s "/dev/input/event5" b true
```
---
## 10. Network (org.deepin.dde.Network1)
**Path:** `/org/deepin/dde/Network1`
**Service:** deepin-service-manager.service
### Properties (Read/Write)
| Property | Type | Description |
|----------|------|-------------|
| VpnEnabled | b | VPN enabled (read/write) |
### Methods
```bash
# Toggle wireless enabled
busctl --system call org.deepin.dde.Network1 /org/deepin/dde/Network1 org.deepin.dde.Network1 ToggleWirelessEnabled
# Enable/disable device
busctl --system call org.deepin.dde.Network1 /org/deepin/dde/Network1 org.deepin.dde.Network1 EnableDevice s "wlan0" b true
# Check if device enabled
busctl --system call org.deepin.dde.Network1 /org/deepin/dde/Network1 org.deepin.dde.Network1 IsDeviceEnabled s "wlan0"
# Ping host
busctl --system call org.deepin.dde.Network1 /org/deepin/dde/Network1 org.deepin.dde.Network1 Ping s "baidu.com"
```
---
## 11. Grub2 / Boot (org.deepin.dde.Grub2)
**Path:** `/org/deepin/dde/Grub2`
**Service:** deepin-grub2.service
### Properties (Read)
| Property | Type | Description |
|----------|------|-------------|
| DefaultEntry | s | Default boot entry name |
| Timeout | u | Timeout in seconds |
| Gfxmode | s | Graphics mode (resolution) |
| EnableTheme | b | Theme enabled |
| ThemeFile | s | Theme file path |
| Updating | b | Currently updating |
### Methods
```bash
# Get available boot entry titles
busctl --system call org.deepin.dde.Grub2 /org/deepin/dde/Grub2 org.deepin.dde.Grub2 GetSimpleEntryTitles
# Set default entry (by title name)
busctl --system call org.deepin.dde.Grub2 /org/deepin/dde/Grub2 org.deepin.dde.Grub2 SetDefaultEntry s "统信桌面操作系统 V25 专业版"
# Set timeout
busctl --system call org.deepin.dde.Grub2 /org/deepin/dde/Grub2 org.deepin.dde.Grub2 SetTimeout u 5
# Set gfxmode
busctl --system call org.deepin.dde.Grub2 /org/deepin/dde/Grub2 org.deepin.dde.Grub2 SetGfxmode s "1920x1080"
# Enable/disable theme
busctl --system call org.deepin.dde.Grub2 /org/deepin/dde/Grub2 org.deepin.dde.Grub2 SetEnableTheme b false
```
---
## 12. Sound Theme (org.deepin.dde.SoundThemePlayer1)
**Path:** `/org/deepin/dde/SoundThemePlayer1`
### Methods
```bash
# Enable/disable sound for a theme
busctl --system call org.deepin.dde.SoundThemePlayer1 /org/deepin/dde/SoundThemePlayer1 org.deepin.dde.SoundThemePlayer1 EnableSound s "deepin" b false
```
---
## 13. UADP / Backlight (org.deepin.dde.Uadp1)
**Path:** `/org/deepin/dde/Uadp1`
**Service:** dde-system-daemon.service
### Methods
```bash
# Check if available
busctl --system call org.deepin.dde.Uadp1 /org/deepin/dde/Uadp1 org.deepin.dde.Uadp1 Available
# Delete backlight setting
busctl --system call org.deepin.dde.Uadp1 /org/deepin/dde/Uadp1 org.deepin.dde.Uadp1 Delete s "screen"
```
---
## 14. Image Effect / Blur (org.deepin.dde.ImageEffect1)
**Path:** `/org/deepin/dde/ImageEffect1`
**Service:** dde-system-daemon.service
### Methods
```bash
# Delete effect
busctl --system call org.deepin.dde.ImageEffect1 /org/deepin/dde/ImageEffect1 org.deepin.dde.ImageEffect1 Delete s "blur" s "/path/to/config"
```
---
## 15. App Store / Lastore (org.deepin.dde.Lastore1)
**Path:** `/org/deepin/dde/Lastore1`
**Service:** lastore-daemon.service
### Methods
```bash
# Check upgrade
busctl --system call org.deepin.dde.Lastore1 /org/deepin/dde/Lastore1 org.deepin.dde.Lastore1.Manager CheckUpgrade t 0 u 0
# Get all apps info
busctl --system call org.deepin.dde.Lastore1 /org/deepin/dde/Lastore1 org.deepin.dde.Lastore1.Manager GetAllApps
# Search apps
busctl --system call org.deepin.dde.Lastore1 /org/deepin/dde/Lastore1 org.deepin.dde.Lastore1.Manager SearchApps s "wps"
```
---
## 16. Linglong Package Manager (org.deepin.linglong.PackageManager1)
**Path:** `/org/deepin/linglong/PackageManager1`
**Service:** org.deepin.linglong.PackageManager1.service
### Methods
```bash
# List local packages
busctl --system call org.deepin.linglong.PackageManager1 /org/deepin/linglong/PackageManager1 org.deepin.linglong.PackageManager1 ListLocal
# Other methods include: Install, Uninstall, Update, etc.
# Full introspection in references/16_linglong.txt
```
---
## 17. Defender / Security
**Services:** com.deepin.defender.*
```bash
# Autostart manager
busctl --system call com.deepin.defender.AutostartManager /com/deepin/defender/AutostartManager com.deepin.defender.AutostartManager.GetAutoStartList
# Firewall status
busctl --system call com.deepin.defender.firewall /com/deepin/defender/firewall com.deepin.defender.firewall.GetFirewallStatus
# USB manager
busctl --system call com.deepin.defender.USBManager /com/deepin/defender/USBManager com.deepin.defender.USBManager.GetDevices
# Login safety
busctl --system call com.deepin.defender.LoginSafety /com/deepin/defender/LoginSafety com.deepin.defender.LoginSafety.GetLoginSafetySettings
```
---
## 18. System Info (org.deepin.dde.SystemInfo1)
**Path:** `/org/deepin/dde/SystemInfo1`
**Service:** dde-system-daemon.service
### Properties (Read)
| Property | Type | Description |
|----------|------|-------------|
| Version | s | OS version |
| Type | s | OS type |
---
## Apps / GUI Tools
```bash
# Open app store
deepin-home-appstore-client
# Open deepin terminal
deepin-terminal
# Search packages
apt-cache search <name>
# Install package
sudo apt install <package> -y
```
---
## Troubleshooting
```bash
# List all deepin-related services
busctl --system list | grep -E "dde|deepin|com\.deepin"
# List all available object paths for a service
gdbus introspect --system --dest <service> --object-path /
# Check if service is running
busctl --system list | grep <service-name>
# Watch property changes
busctl --system monitor --system <service> <path>
```
---
## Raw Reference Files
All introspection data is in:
`~/.openclaw/workspace/skills/deepin-desktop/references/`
Files:
- `01_power1.txt` - Power management
- `02_display1.txt` - Display
- `03_bluetooth1.txt` - Bluetooth
- `04_airplanemode1.txt` - Airplane mode
- `05_timedate1.txt` - Date/time
- `06_accounts1.txt` - User accounts
- `07_daemon1.txt` - System daemon
- `08_inputdevices1.txt` - Input devices
- `09_gesture1.txt` - Gesture
- `10_network1.txt` - Network
- `11_imageeffect1.txt` - Image effect
- `12_systeminfo1.txt` - System info
- `13_soundthemeplayer1.txt` - Sound theme
- `14_uadp1.txt` - UADP
- `15_grub2.txt` - Grub2 boot
- `16_linglong.txt` - Linglong package manager
- `17_system_network.txt` - Network (system)
- `18_system_power.txt` - Power (system)
- `19_system_display.txt` - Display (system)
- `21_daemon_accounts.txt` - Accounts daemon
- `22_power_manager.txt` - Power manager
- `24_defender.txt` - Defender security
FILE:references/01_power1.txt
=== org.deepin.dde.Power1 /org/deepin/dde/Power1 ===
node /org/deepin/dde/Power1 {
interface org.deepin.dde.Power1 {
methods:
GetBatteries(out ao batteries);
LockCpuFreq(in s governor,
in i lockTime);
Refresh();
RefreshBatteries();
RefreshMains();
SetCpuBoost(in b enabled);
SetCpuGovernor(in s governor);
SetMode(in s mode);
signals:
BatteryDisplayUpdate(x timestamp);
BatteryAdded(o path);
BatteryRemoved(o path);
LidClosed();
LidOpened();
properties:
readonly b OnBattery = false;
readonly d BatteryPercentage = 100.0;
readwrite s PowerSavingModeBrightnessData = 'null';
readonly b CpuBoost = true;
readonly s Mode = 'balance';
readonly b IsPowerSaveSupported = true;
readonly b HasBattery = false;
readonly u BatteryStatus = 0;
readonly d BatteryCapacity = 0.0;
readwrite b PowerSavingModeEnabled = false;
readwrite b PowerSavingModeAuto = false;
readwrite b PowerSavingModeAutoWhenBatteryLow = true;
readonly b IsHighPerformanceSupported = true;
readwrite b SupportSwitchPowerMode = false;
readonly b IsInBootTime = false;
readonly b HasLidSwitch = false;
readonly t BatteryTimeToEmpty = 0;
readonly t BatteryTimeToFull = 0;
readonly b IsBalanceSupported = true;
readonly b LidClosed = false;
readwrite u PowerSavingModeBrightnessDropPercent = 20;
readwrite u PowerSavingModeAutoBatteryPercent = 20;
readonly s CpuGovernor = '';
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/01b_power1.txt
node /org/deepin/dde/Power1 {
interface org.deepin.dde.Power1 {
methods:
GetBatteries(out ao batteries);
LockCpuFreq(in s governor,
in i lockTime);
Refresh();
RefreshBatteries();
RefreshMains();
SetCpuBoost(in b enabled);
SetCpuGovernor(in s governor);
SetMode(in s mode);
signals:
BatteryDisplayUpdate(x timestamp);
BatteryAdded(o path);
BatteryRemoved(o path);
LidClosed();
LidOpened();
properties:
readonly b OnBattery = false;
readonly d BatteryPercentage = 100.0;
readwrite s PowerSavingModeBrightnessData = 'null';
readonly b CpuBoost = true;
readonly s Mode = 'balance';
readonly b IsPowerSaveSupported = true;
readonly b HasBattery = false;
readonly u BatteryStatus = 0;
readonly d BatteryCapacity = 0.0;
readwrite b PowerSavingModeEnabled = false;
readwrite b PowerSavingModeAuto = false;
readwrite b PowerSavingModeAutoWhenBatteryLow = true;
readonly b IsHighPerformanceSupported = true;
readwrite b SupportSwitchPowerMode = false;
readonly b IsInBootTime = false;
readonly b HasLidSwitch = false;
readonly t BatteryTimeToEmpty = 0;
readonly t BatteryTimeToFull = 0;
readonly b IsBalanceSupported = true;
readonly b LidClosed = false;
readwrite u PowerSavingModeBrightnessDropPercent = 20;
readwrite u PowerSavingModeAutoBatteryPercent = 20;
readonly s CpuGovernor = '';
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/02_display1.txt
=== org.deepin.dde.Display1 /org/deepin/dde/Display1 ===
node /org/deepin/dde/Display1 {
interface org.deepin.dde.Display1 {
methods:
GetConfig(out s cfgStr);
SetBacklightBrightness(in d val);
SetConfig(in s cfgStr);
SupportWayland(out b outArg0);
signals:
ConfigUpdated(s updateAt);
BacklightBrightnessUpdated(d brightness);
properties:
readonly b SupportLabc = false;
readwrite b AutoBacklightEnabled = false;
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/03_bluetooth1.txt
=== org.deepin.dde.Bluetooth1 /org/deepin/dde/Bluetooth1 ===
node /org/deepin/dde/Bluetooth1 {
interface org.deepin.dde.Bluetooth1 {
methods:
ClearUnpairedDevice();
ConnectDevice(in o devPath,
in o adapterPath);
DebugInfo(out s info);
DisconnectAudioDevices();
DisconnectDevice(in o devPath);
GetAdapters(out s adaptersJSON);
GetDevices(in o adapterPath,
out s devicesJSON);
RegisterAgent(in o agentPath);
RemoveDevice(in o adapterPath,
in o devPath);
RequestDiscovery(in o adapterPath);
SetAdapterAlias(in o adapterPath,
in s alias);
SetAdapterDiscoverable(in o adapterPath,
in b discoverable);
SetAdapterDiscoverableTimeout(in o adapterPath,
in u discoverableTimeout);
SetAdapterDiscovering(in o adapterPath,
in b discovering);
SetAdapterPowered(in o adapterPath,
in b powered);
SetDeviceAlias(in o device,
in s alias);
SetDeviceTrusted(in o device,
in b trusted);
UnregisterAgent(in o agentPath);
signals:
AdapterAdded(s adapterJSON);
AdapterRemoved(s adapterJSON);
AdapterPropertiesChanged(s adapterJSON);
DeviceAdded(s devJSON);
DeviceRemoved(s devJSON);
DevicePropertiesChanged(s devJSON);
properties:
readonly u State = 1;
readonly b CanSendFile = true;
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
node Agent {
};
};
FILE:references/04_airplanemode1.txt
=== org.deepin.dde.AirplaneMode1 /org/deepin/dde/AirplaneMode1 ===
node /org/deepin/dde/AirplaneMode1 {
interface org.deepin.dde.AirplaneMode1 {
methods:
DumpState();
Enable(in b enableAirplaneMode);
EnableBluetooth(in b enableAirplaneMode);
EnableWifi(in b enableAirplaneMode);
signals:
properties:
readonly b HasAirplaneMode = true;
readonly b WifiEnabled = false;
readonly b BluetoothEnabled = false;
readonly b Enabled = false;
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/05_timedate1.txt
=== org.deepin.dde.Timedate1 /org/deepin/dde/Timedate1 ===
node /org/deepin/dde/Timedate1 {
interface org.deepin.dde.Timedate1 {
methods:
SetLocalRTC(in b enabled,
in b fixSystem,
in s message);
SetNTP(in b enabled,
in s message);
SetNTPServer(in s server,
in s message);
SetTime(in x usec,
in b relative,
in s message);
SetTimezone(in s timezone,
in s message);
signals:
properties:
readonly s NTPServer = 'ntp.aliyun.com';
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/06_accounts1.txt
=== org.deepin.dde.Accounts1 /org/deepin/dde/Accounts1 ===
node /org/deepin/dde/Accounts1 {
interface org.deepin.dde.Accounts1 {
methods:
AllowGuestAccount(in b allow);
CreateGroup(in s groupName,
in u gid,
in b isSystem);
CreateGuestAccount(out s user);
CreateUser(in s name,
in s fullName,
in i accountType,
out o userPath);
DeleteGroup(in s groupName,
in b force);
DeleteUser(in s name,
in b rmFiles);
EnablePasswdChangedHandler(in b enable);
FindUserById(in s uid,
out s user);
FindUserByName(in s name,
out s user);
GetGroupInfoByName(in s name,
out s groupInfo);
GetGroups(out as groups);
GetPresetGroups(in i accountType,
out as groups);
IsPasswordValid(in s password,
out b valid,
out s msg,
out i code);
IsUsernameValid(in s name,
out b valid,
out s msg,
out i code);
ModifyGroup(in s currentGroupName,
in s newGroupName,
in u newGID);
RandUserIcon(out s iconFile);
SetTerminalLocked(in b locked);
signals:
UserAdded(s objPath);
UserDeleted(s objPath);
properties:
readonly s GuestIcon = 'file:///var/lib/AccountsService/icons/illustration/computer.png';
readonly b AllowGuest = false;
readonly as GroupList = ['_ssh', 'adm', 'audio', 'avahi', 'backup', 'bin', 'bluetooth', 'cdrom', 'crontab', 'daemon', 'dde', 'deepin-admin-daemon', 'deepin-daemon', 'deepin-linglong', 'dialout', 'dip', 'disk', 'fax', 'floppy', 'games', 'geoclue', 'input', 'irc', 'kmem', 'kvm', 'lightdm', 'list', 'lp', 'lpadmin', 'mail', 'man', 'messagebus', 'netdev', 'news', 'nm-openconnect', 'nm-openvpn', 'nogroup', 'operator', 'pipewire', 'plugdev', 'polkitd', 'proxy', 'pulse', 'pulse-access', 'render', 'root', 'sambashare', 'sasl', 'scanner', 'seat', 'sgx', 'shadow', 'src', 'ssl-cert', 'sstpc', 'staff', 'sudo', 'sys', 'systemd-coredump', 'systemd-journal', 'systemd-network', 'systemd-timesync', 'tape', 'tss', 'tty', 'users', 'utmp', 'uucp', 'video', 'voice', 'winbindd_priv', 'www-data', 'zane'];
readonly b IsTerminalLocked = false;
readonly b QuickLoginEnabled = true;
readonly as UserList = ['/org/deepin/dde/Accounts1/User1000'];
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
node User1000 {
};
};
FILE:references/06b_accounts1_user1000.txt
node /org/deepin/dde/Accounts1/User1000 {
interface org.deepin.dde.Accounts1.User {
methods:
AddGroup(in s group);
DeleteGroup(in s group);
DeleteIconFile(in s icon);
DeleteSecretKey();
EnableNoPasswdLogin(in b enabled);
EnableWechatAuth(in b value);
GetReminderInfo(out (s(iiiiii)(sssss)(sssss)i) info);
GetSecretKey(in s username,
out s outArg0);
GetSecretQuestions(out ai list);
IsPasswordExpired(out b outArg0);
PasswordExpiredInfo(out i expiredStatus,
out x dayLeft);
SetAutomaticLogin(in b enabled);
SetCurrentWorkspace(in i currentWorkspace);
SetDesktopBackgrounds(in as val);
SetFullName(in s name);
SetGreeterBackground(in s bg);
SetGroups(in as groups);
SetHistoryLayout(in as list);
SetHomeDir(in s home);
SetIconFile(in s iconURI);
SetLayout(in s layout);
SetLocale(in s locale);
SetLocked(in b locked);
SetLongDateFormat(in i value);
SetLongTimeFormat(in i value);
SetMaxPasswordAge(in i nDays);
SetPassword(in s password);
SetPasswordHint(in s hint);
SetQuickLogin(in b enabled);
SetSecretKey(in s secretKey);
SetSecretQuestions(in a{iay} list);
SetShell(in s shell);
SetShortDateFormat(in i value);
SetShortTimeFormat(in i value);
SetUse24HourFormat(in b value);
SetWeekBegins(in i value);
SetWeekdayFormat(in i value);
UpdateWechatAuthState();
VerifySecretQuestions(in a{is} answers,
out ai failed);
signals:
properties:
readonly s XSession = 'deepin';
readonly i AccountType = 1;
readonly b Use24HourFormat = true;
readonly s FullName = '';
readonly s Uid = '1000';
readonly s Gid = '1000';
readonly i WeekdayFormat = 0;
readonly i ShortTimeFormat = 0;
readonly as Groups = ['lp', 'lpadmin', 'netdev', 'sambashare', 'scanner', 'sudo', 'users', 'zane'];
readonly i MaxPasswordAge = 99999;
readonly s UUID = 'c022d476-2d8c-4dc6-9f7b-7b2b06c4db68';
readonly b NoPasswdLogin = false;
readonly as HistoryLayout = ['cn;'];
readonly b Locked = false;
readonly i ShortDateFormat = 3;
readonly i LongTimeFormat = 0;
readonly s Shell = '/bin/bash';
readonly b SystemAccount = false;
readonly s IconFile = 'file:///var/lib/AccountsService/icons/illustration/pumpkin_carriage.png';
readonly s Locale = 'zh_CN.UTF-8';
readonly i WeekBegins = 0;
readonly as IconList = ['file:///var/lib/AccountsService/icons/animal/penguin.png', 'file:///var/lib/AccountsService/icons/animal/horse.png', 'file:///var/lib/AccountsService/icons/animal/tiger.png', 'file:///var/lib/AccountsService/icons/animal/monkey.png', 'file:///var/lib/AccountsService/icons/animal/ox.png', 'file:///var/lib/AccountsService/icons/animal/snake.png', 'file:///var/lib/AccountsService/icons/animal/sheep.png', 'file:///var/lib/AccountsService/icons/animal/panda.png', 'file:///var/lib/AccountsService/icons/animal/rabbit.png', 'file:///var/lib/AccountsService/icons/animal/dragon.png', 'file:///var/lib/AccountsService/icons/animal/chook.png', 'file:///var/lib/AccountsService/icons/animal/raccoon.png', 'file:///var/lib/AccountsService/icons/animal/cat.png', 'file:///var/lib/AccountsService/icons/animal/lion.png', 'file:///var/lib/AccountsService/icons/animal/pig.png', 'file:///var/lib/AccountsService/icons/animal/mouse.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_trophy.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_complacent.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_apple.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_cute.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_cry-and-laugh.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_yeah.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_think.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_ping-pong.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_sunflower.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_celebrate.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_666.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_cover-eye.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_gold-medal.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_shit.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_cheese.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_heart.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_piano.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_flower.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_guitar.png', 'file:///var/lib/AccountsService/icons/emoji/emoji_love.png', 'file:///var/lib/AccountsService/icons/human/dimensional/houyi.png', 'file:///var/lib/AccountsService/icons/human/dimensional/zhinv.png', 'file:///var/lib/AccountsService/icons/human/dimensional/wangzhaojun.png', 'file:///var/lib/AccountsService/icons/human/dimensional/guanyu.png', 'file:///var/lib/AccountsService/icons/human/dimensional/baoqingtian.png', 'file:///var/lib/AccountsService/icons/human/dimensional/libai.png', 'file:///var/lib/AccountsService/icons/human/dimensional/yangyuhuan.png', 'file:///var/lib/AccountsService/icons/human/dimensional/tangbohu.png', 'file:///var/lib/AccountsService/icons/human/dimensional/xishi.png', 'file:///var/lib/AccountsService/icons/human/dimensional/zhugeliang.png', 'file:///var/lib/AccountsService/icons/human/dimensional/caocao.png', 'file:///var/lib/AccountsService/icons/human/dimensional/kongzi.png', 'file:///var/lib/AccountsService/icons/human/dimensional/huamulan.png', 'file:///var/lib/AccountsService/icons/human/dimensional/zhanzhao.png', 'file:///var/lib/AccountsService/icons/human/dimensional/wusong.png', 'file:///var/lib/AccountsService/icons/human/dimensional/lvbu.png', 'file:///var/lib/AccountsService/icons/human/dimensional/diaochan.png', 'file:///var/lib/AccountsService/icons/human/dimensional/baisuzhen.png', 'file:///var/lib/AccountsService/icons/human/dimensional/niulang.png', 'file:///var/lib/AccountsService/icons/human/dimensional/jiabaoyu.png', 'file:///var/lib/AccountsService/icons/human/dimensional/wangxifeng.png', 'file:///var/lib/AccountsService/icons/human/dimensional/lindaiyu.png', 'file:///var/lib/AccountsService/icons/human/dimensional/tangsheng.png', 'file:///var/lib/AccountsService/icons/human/dimensional/zhangfei.png', 'file:///var/lib/AccountsService/icons/human/dimensional/change.png', 'file:///var/lib/AccountsService/icons/human/dimensional/tieshangongzhu.png', 'file:///var/lib/AccountsService/icons/human/dimensional/liqingzhao.png', 'file:///var/lib/AccountsService/icons/human/dimensional/wuzetian.png', 'file:///var/lib/AccountsService/icons/human/dimensional/nezha.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/7.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/4.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/14.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/18.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/26.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/3.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/13.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/12.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/5.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/20.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/15.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/9.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/25.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/21.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/1.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/6.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/19.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/8.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/24.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/2.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/16.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/11.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/23.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/17.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/10.png', 'file:///var/lib/AccountsService/icons/human/dimensional_v2/22.png', 'file:///var/lib/AccountsService/icons/human/flat/little_boy.png', 'file:///var/lib/AccountsService/icons/human/flat/man_glasses.png', 'file:///var/lib/AccountsService/icons/human/flat/man_old.png', 'file:///var/lib/AccountsService/icons/human/flat/blue_hair.png', 'file:///var/lib/AccountsService/icons/human/flat/short_hair.png', 'file:///var/lib/AccountsService/icons/human/flat/brown_hair.png', 'file:///var/lib/AccountsService/icons/human/flat/man_jacket.png', 'file:///var/lib/AccountsService/icons/human/flat/yellow_hair.png', 'file:///var/lib/AccountsService/icons/human/flat/little_girl.png', 'file:///var/lib/AccountsService/icons/human/flat/man_hat.png', 'file:///var/lib/AccountsService/icons/human/flat/man_bowknot.png', 'file:///var/lib/AccountsService/icons/illustration/train.png', 'file:///var/lib/AccountsService/icons/illustration/toaster.png', 'file:///var/lib/AccountsService/icons/illustration/pumpkin_carriage.png', 'file:///var/lib/AccountsService/icons/illustration/suitcase.png', 'file:///var/lib/AccountsService/icons/illustration/fan.png', 'file:///var/lib/AccountsService/icons/illustration/mushroom_house.png', 'file:///var/lib/AccountsService/icons/illustration/iceberg.png', 'file:///var/lib/AccountsService/icons/illustration/computer.png', 'file:///var/lib/AccountsService/icons/illustration/crystal_ball.png', 'file:///var/lib/AccountsService/icons/illustration/sofa.png', 'file:///var/lib/AccountsService/icons/illustration/milk_house.png', 'file:///var/lib/AccountsService/icons/illustration/player.png', 'file:///var/lib/AccountsService/icons/illustration/barn_lantern.png', 'file:///var/lib/AccountsService/icons/illustration/flower.png', 'file:///var/lib/AccountsService/icons/illustration/alarm_clock.png', 'file:///var/lib/AccountsService/icons/illustration/boat.png', 'file:///var/lib/AccountsService/icons/illustration/butterfly.png', 'file:///var/lib/AccountsService/icons/illustration/doughnut.png', 'file:///var/lib/AccountsService/icons/illustration/book.png', 'file:///var/lib/AccountsService/icons/illustration/tomato.png', 'file:///var/lib/AccountsService/icons/illustration/record_player.png', 'file:///var/lib/AccountsService/icons/illustration/submarine.png', 'file:///var/lib/AccountsService/icons/illustration/ger.png', 'file:///var/lib/AccountsService/icons/illustration/plant.png', 'file:///var/lib/AccountsService/icons/scenery/33.png', 'file:///var/lib/AccountsService/icons/scenery/47.png', 'file:///var/lib/AccountsService/icons/scenery/7.png', 'file:///var/lib/AccountsService/icons/scenery/4.png', 'file:///var/lib/AccountsService/icons/scenery/14.png', 'file:///var/lib/AccountsService/icons/scenery/29.png', 'file:///var/lib/AccountsService/icons/scenery/18.png', 'file:///var/lib/AccountsService/icons/scenery/3.png', 'file:///var/lib/AccountsService/icons/scenery/30.png', 'file:///var/lib/AccountsService/icons/scenery/28.png', 'file:///var/lib/AccountsService/icons/scenery/13.png', 'file:///var/lib/AccountsService/icons/scenery/39.png', 'file:///var/lib/AccountsService/icons/scenery/12.png', 'file:///var/lib/AccountsService/icons/scenery/46.png', 'file:///var/lib/AccountsService/icons/scenery/49.png', 'file:///var/lib/AccountsService/icons/scenery/34.png', 'file:///var/lib/AccountsService/icons/scenery/5.png', 'file:///var/lib/AccountsService/icons/scenery/43.png', 'file:///var/lib/AccountsService/icons/scenery/50.png', 'file:///var/lib/AccountsService/icons/scenery/27.png', 'file:///var/lib/AccountsService/icons/scenery/20.png', 'file:///var/lib/AccountsService/icons/scenery/15.png', 'file:///var/lib/AccountsService/icons/scenery/9.png', 'file:///var/lib/AccountsService/icons/scenery/48.png', 'file:///var/lib/AccountsService/icons/scenery/25.png', 'file:///var/lib/AccountsService/icons/scenery/45.png', 'file:///var/lib/AccountsService/icons/scenery/21.png', 'file:///var/lib/AccountsService/icons/scenery/1.png', 'file:///var/lib/AccountsService/icons/scenery/40.png', 'file:///var/lib/AccountsService/icons/scenery/35.png', 'file:///var/lib/AccountsService/icons/scenery/6.png', 'file:///var/lib/AccountsService/icons/scenery/19.png', 'file:///var/lib/AccountsService/icons/scenery/31.png', 'file:///var/lib/AccountsService/icons/scenery/42.png', 'file:///var/lib/AccountsService/icons/scenery/32.png', 'file:///var/lib/AccountsService/icons/scenery/24.png', 'file:///var/lib/AccountsService/icons/scenery/2.png', 'file:///var/lib/AccountsService/icons/scenery/41.png', 'file:///var/lib/AccountsService/icons/scenery/16.png', 'file:///var/lib/AccountsService/icons/scenery/11.png', 'file:///var/lib/AccountsService/icons/scenery/23.png', 'file:///var/lib/AccountsService/icons/scenery/10.png', 'file:///var/lib/AccountsService/icons/scenery/37.png', 'file:///var/lib/AccountsService/icons/scenery/22.png'];
readonly s HomeDir = '/home/zane';
readonly i LongDateFormat = 1;
readonly s GreeterBackground = 'file:///usr/share/wallpapers/deepin/nirvana-wallpaper-light.jpg';
readonly t LoginTime = 0;
readonly t CreatedTime = 1773275360;
readonly b WechatAuthEnabled = false;
readonly s Layout = 'cn;';
readonly s PasswordHint = '';
readonly as DesktopBackgrounds = ['file:///usr/share/backgrounds/default_background.jpg'];
readonly i PasswordLastChange = 20524;
readonly i Workspace = 1;
readonly s UserName = 'zane';
readonly b AutomaticLogin = false;
readonly b QuickLogin = true;
readonly s PasswordStatus = 'P';
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/07_daemon1.txt
=== org.deepin.dde.Daemon1 /org/deepin/dde/Daemon1 ===
node /org/deepin/dde/Daemon1 {
interface org.deepin.dde.Daemon1 {
methods:
BluetoothGetDeviceTechnologies(in s adapter,
in s device,
out as technologies);
ClearTty(in u number);
ClearTtys();
DeleteCustomWallPaper(in s username,
in s file);
GetCustomWallPapers(in s username,
out as outArg0);
IsPidVirtualMachine(in u pid,
out b isVM);
NetworkGetConnections(out ay data);
NetworkSetConnections(in ay data);
SaveCustomWallPaper(in s username,
in s file,
out s outArg0);
ScalePlymouth(in u scale);
SetLogindTTY(in i NAutoVTs,
in b resetCustom,
in b live);
SetLongPressDuration(in u duration);
SetPlymouthTheme(in s themeName);
SetReadOnlyProtection(in b enable);
signals:
HandleForSleep(b start);
WallpaperChanged(s userName,
u added,
as file);
properties:
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/08_inputdevices1.txt
=== org.deepin.dde.InputDevices1 /org/deepin/dde/InputDevices1 ===
node /org/deepin/dde/InputDevices1 {
interface org.deepin.dde.InputDevices1 {
methods:
SetWakeupDevices(in s path,
in s value);
signals:
TouchscreenAdded(o path);
TouchscreenRemoved(o path);
EventChanged(s devNode,
s devName,
s path,
b state);
properties:
readonly ao Touchscreens = [];
readwrite a{ss} SupportWakeupDevices = {'/sys/bus/usb/devices/3-7/power/wakeup': 'enabled', '/sys/bus/usb/devices/3-3/power/wakeup': 'disabled'};
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
node Touchpad {
};
};
FILE:references/09_gesture1.txt
=== org.deepin.dde.Gesture1 /org/deepin/dde/Gesture1 ===
node /org/deepin/dde/Gesture1 {
interface org.deepin.dde.Gesture1 {
methods:
SetEdgeMoveStopDuration(in i duration);
SetInputIgnore(in s node,
in b isIgnore);
SetShortPressDuration(in i duration);
signals:
Event(s name,
s direction,
i fingers);
KeyboardEvent(u key,
u state);
MouseEvent(u state,
u value);
DbclickDown(i fingers);
SwipeMoving(i fingers,
d accelX,
d accelY);
SwipeStop(i fingers);
TouchEdgeEvent(s direction,
d scaleX,
d scaleY);
TouchMovementEvent(s direction,
i fingers,
d startScaleX,
d startScaleY,
d endScaleX,
d endScaleY);
TouchSinglePressTimeout(i time,
d scaleX,
d scaleY);
TouchPressTimeout(i fingers,
i time,
d scaleX,
d scaleY);
TouchUpOrCancel(d scaleX,
d scaleY);
TouchEdgeMoveStop(s direction,
d scaleX,
d scaleY,
i duration);
TouchEdgeMoveStopLeave(s direction,
d scaleX,
d scaleY,
i duration);
TouchMoving(d scalex,
d scaley);
properties:
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/10_network1.txt
=== org.deepin.dde.Network1 /org/deepin/dde/Network1 ===
node /org/deepin/dde/Network1 {
interface org.deepin.dde.Network1 {
methods:
EnableDevice(in s pathOrIface,
in b enabled,
out o arg_0);
IsDeviceEnabled(in s pathOrIface,
out b arg_0);
Ping(in s host);
ToggleWirelessEnabled(out b arg_0);
signals:
DeviceEnabled(o devPath,
b enabled);
properties:
readwrite b VpnEnabled = false;
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface_name,
in s property_name,
out v value);
Set(in s interface_name,
in s property_name,
in v value);
@org.qtproject.QtDBus.QtTypeName.Out0("QVariantMap")
GetAll(in s interface_name,
out a{sv} values);
signals:
@org.qtproject.QtDBus.QtTypeName.Out1("QVariantMap")
PropertiesChanged(s interface_name,
a{sv} changed_properties,
as invalidated_properties);
properties:
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s xml_data);
signals:
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/10b_network1.txt
node /org/deepin/dde/Network1 {
interface org.deepin.dde.Network1 {
methods:
EnableDevice(in s pathOrIface,
in b enabled,
out o arg_0);
IsDeviceEnabled(in s pathOrIface,
out b arg_0);
Ping(in s host);
ToggleWirelessEnabled(out b arg_0);
signals:
DeviceEnabled(o devPath,
b enabled);
properties:
readwrite b VpnEnabled = false;
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface_name,
in s property_name,
out v value);
Set(in s interface_name,
in s property_name,
in v value);
@org.qtproject.QtDBus.QtTypeName.Out0("QVariantMap")
GetAll(in s interface_name,
out a{sv} values);
signals:
@org.qtproject.QtDBus.QtTypeName.Out1("QVariantMap")
PropertiesChanged(s interface_name,
a{sv} changed_properties,
as invalidated_properties);
properties:
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s xml_data);
signals:
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/11_imageeffect1.txt
=== org.deepin.dde.ImageEffect1 /org/deepin/dde/ImageEffect1 ===
node /org/deepin/dde/ImageEffect1 {
interface org.deepin.dde.ImageEffect1 {
methods:
Delete(in s effect,
in s filename);
Get(in s effect,
in s filename,
out s outputFile);
signals:
properties:
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/12_systeminfo1.txt
=== org.deepin.dde.SystemInfo1 /org/deepin/dde/SystemInfo1 ===
node /org/deepin/dde/SystemInfo1 {
interface org.deepin.dde.SystemInfo1 {
methods:
signals:
properties:
readonly t MemorySize = 25769803776;
readonly s MemorySizeHuman = '24.00GB';
readonly t CurrentSpeed = 2600;
readonly (ssssssssssss) DMIInfo = ('Intel Corp.', 'TNTGLV57.0079.2025.1111.1447', '11/11/2025', 'NUC11TNBv5', 'BTTN134006CW', 'Intel Corporation', 'M11900-403', 'NUC11TNKv5', 'TN', 'BTTN134006CW', '571d7643-7e15-0fed-cbb3-54b203f6f0b3', 'M11917-404');
readonly s DisplayDriver = 'i915';
readonly s VideoDriver = 'i915';
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/13_soundthemeplayer1.txt
=== org.deepin.dde.SoundThemePlayer1 /org/deepin/dde/SoundThemePlayer1 ===
node /org/deepin/dde/SoundThemePlayer1 {
interface org.deepin.dde.SoundThemePlayer1 {
methods:
EnableSound(in s name,
in b enabled);
EnableSoundDesktopLogin(in b enabled);
Play(in s theme,
in s event,
in s device);
PlaySoundDesktopLogin();
PrepareShutdownSound(in i uid);
SaveAudioState(in a{sv} activePlayback);
SetSoundTheme(in s theme);
signals:
properties:
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/14_uadp1.txt
=== org.deepin.dde.Uadp1 /org/deepin/dde/Uadp1 ===
node /org/deepin/dde/Uadp1 {
interface org.deepin.dde.Uadp1 {
methods:
Available(out b outArg0);
Delete(in s name);
Get(in s name,
out ay outArg0);
ListName(out as outArg0);
Release();
Set(in s name,
in ay data);
signals:
properties:
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/15_grub2.txt
=== org.deepin.dde.Grub2 /org/deepin/dde/Grub2 ===
node /org/deepin/dde/Grub2 {
interface org.deepin.dde.Grub2 {
methods:
GetAvailableGfxmodes(out as gfxModes);
GetSimpleEntryTitles(out as titles);
PrepareGfxmodeDetect();
Reset();
SetDefaultEntry(in s entry);
SetEnableTheme(in b enabled);
SetGfxmode(in s gfxmode);
SetTimeout(in u timeout);
signals:
properties:
readonly b EnableTheme = true;
readonly s Gfxmode = '3840x2160,2560x1440,2560x1080,1920x1080,1400x1050,1280x1024,1440x900,1280x960,1280x720,1024x768,auto';
readonly u Timeout = 1;
readonly b Updating = false;
readonly s ThemeFile = '/boot/grub/themes/deepin-fallback/theme.txt';
readonly s DefaultEntry = '统信桌面操作系统 V25 专业版';
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
node Theme {
};
node Fstart {
};
node EditAuthentication {
};
};
FILE:references/16_linglong.txt
=== org.deepin.linglong.PackageManager1 /org/deepin/linglong/PackageManager1 ===
node /org/deepin/linglong/PackageManager1 {
interface org.deepin.linglong.PackageManager1 {
methods:
@org.qtproject.QtDBus.QtTypeName.In2("QVariantMap")
@org.qtproject.QtDBus.QtTypeName.Out0("QVariantMap")
InstallFromFile(in h fd,
in s fileType,
in a{sv} options,
out a{sv} result);
@org.qtproject.QtDBus.QtTypeName.In0("QVariantMap")
@org.qtproject.QtDBus.QtTypeName.Out0("QVariantMap")
Install(in a{sv} parameters,
out a{sv} result);
@org.qtproject.QtDBus.QtTypeName.In0("QVariantMap")
@org.qtproject.QtDBus.QtTypeName.Out0("QVariantMap")
Uninstall(in a{sv} parameters,
out a{sv} result);
@org.qtproject.QtDBus.QtTypeName.In0("QVariantMap")
@org.qtproject.QtDBus.QtTypeName.Out0("QVariantMap")
Update(in a{sv} parameters,
out a{sv} result);
@org.qtproject.QtDBus.QtTypeName.In0("QVariantMap")
@org.qtproject.QtDBus.QtTypeName.Out0("QVariantMap")
Search(in a{sv} parameters,
out a{sv} result);
@org.freedesktop.DBus.Description("Remove unused base or runtime.")
@org.qtproject.QtDBus.QtTypeName.Out0("QVariantMap")
Prune(out a{sv} result);
@org.freedesktop.DBus.Description("Generate cache for app if no cache exists.")
@org.qtproject.QtDBus.QtTypeName.Out0("QVariantMap")
GenerateCache(in s reference,
out a{sv} result);
@org.freedesktop.DBus.Description("Used by the client to check whether it has permission to call privileged methods")
Permissions();
@org.qtproject.QtDBus.QtTypeName.In1("QVariantMap")
ReplyInteraction(in o task,
in a{sv} replies);
signals:
@org.qtproject.QtDBus.QtTypeName.Out1("QVariantMap")
SearchFinished(s taskID,
a{sv} result);
@org.qtproject.QtDBus.QtTypeName.Out1("QVariantMap")
PruneFinished(s taskID,
a{sv} result);
GenerateCacheFinished(s taskID,
b status);
TaskAdded(o task);
TaskRemoved(o task,
i state,
i subState,
s message,
d percentage,
i code);
@org.qtproject.QtDBus.QtTypeName.Out2("QVariantMap")
RequestInteraction(o task,
i messageID,
a{sv} additionalMessage);
properties:
@org.qtproject.QtDBus.QtTypeName("QVariantMap")
readwrite a{sv} Configuration = {'defaultRepo': <'stable'>, 'repos': <[<{'name': <'stable'>, 'priority': <int64 0>, 'url': <'https://mirror-repo-linglong.uniontech.com'>}>]>, 'version': <int64 2>};
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface_name,
in s property_name,
out v value);
Set(in s interface_name,
in s property_name,
in v value);
@org.qtproject.QtDBus.QtTypeName.Out0("QVariantMap")
GetAll(in s interface_name,
out a{sv} values);
signals:
@org.qtproject.QtDBus.QtTypeName.Out1("QVariantMap")
PropertiesChanged(s interface_name,
a{sv} changed_properties,
as invalidated_properties);
properties:
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s xml_data);
signals:
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/17_system_network.txt
=== com.deepin.system.Network /com/deepin/system/Network ===
node /com/deepin/system/Network {
interface com.deepin.system.Network {
methods:
EnableDevice(in s pathOrIface,
in b enabled,
out o arg_0);
IsDeviceEnabled(in s pathOrIface,
out b arg_0);
Ping(in s host);
ToggleWirelessEnabled(out b arg_0);
signals:
DeviceEnabled(o devPath,
b enabled);
properties:
readwrite b VpnEnabled = false;
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface_name,
in s property_name,
out v value);
Set(in s interface_name,
in s property_name,
in v value);
@org.qtproject.QtDBus.QtTypeName.Out0("QVariantMap")
GetAll(in s interface_name,
out a{sv} values);
signals:
@org.qtproject.QtDBus.QtTypeName.Out1("QVariantMap")
PropertiesChanged(s interface_name,
a{sv} changed_properties,
as invalidated_properties);
properties:
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s xml_data);
signals:
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/18_system_power.txt
=== com.deepin.system.Power /com/deepin/system/Power ===
node /com/deepin/system/Power {
interface com.deepin.system.Power {
methods:
GetBatteries(out ao batteries);
LockCpuFreq(in s governor,
in i lockTime);
Refresh();
RefreshBatteries();
RefreshMains();
SetCpuBoost(in b enabled);
SetCpuGovernor(in s governor);
SetMode(in s mode);
signals:
BatteryDisplayUpdate(x timestamp);
BatteryAdded(o path);
BatteryRemoved(o path);
LidClosed();
LidOpened();
properties:
readonly b OnBattery = false;
readonly d BatteryPercentage = 100.0;
readwrite s PowerSavingModeBrightnessData = 'null';
readonly b CpuBoost = true;
readonly s Mode = 'balance';
readonly b IsPowerSaveSupported = true;
readonly b HasBattery = false;
readonly u BatteryStatus = 0;
readonly d BatteryCapacity = 0.0;
readwrite b PowerSavingModeEnabled = false;
readwrite b PowerSavingModeAuto = false;
readwrite b PowerSavingModeAutoWhenBatteryLow = true;
readonly b IsHighPerformanceSupported = true;
readwrite b SupportSwitchPowerMode = false;
readonly b IsInBootTime = false;
readonly b HasLidSwitch = false;
readonly t BatteryTimeToEmpty = 0;
readonly t BatteryTimeToFull = 0;
readonly b IsBalanceSupported = true;
readonly b LidClosed = false;
readwrite u PowerSavingModeBrightnessDropPercent = 20;
readwrite u PowerSavingModeAutoBatteryPercent = 20;
readonly s CpuGovernor = '';
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/19_system_display.txt
=== com.deepin.system.Display /com/deepin/system/Display ===
node /com/deepin/system/Display {
interface com.deepin.system.Display {
methods:
GetConfig(out s cfgStr);
SetBacklightBrightness(in d val);
SetConfig(in s cfgStr);
SupportWayland(out b outArg0);
signals:
ConfigUpdated(s updateAt);
BacklightBrightnessUpdated(d brightness);
properties:
readonly b SupportLabc = false;
readwrite b AutoBacklightEnabled = false;
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/20_timedated.txt
=== com.deepin.daemon.Timedated /com/deepin/daemon/Timedated ===
node /com/deepin/daemon/Timedated {
interface com.deepin.daemon.Timedated {
methods:
SetLocalRTC(in b enabled,
in b fixSystem,
in s message);
SetNTP(in b enabled,
in s message);
SetNTPServer(in s server,
in s message);
SetTime(in x usec,
in b relative,
in s message);
SetTimezone(in s timezone,
in s message);
signals:
properties:
readonly s NTPServer = 'ntp.aliyun.com';
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
};
FILE:references/21_daemon_accounts.txt
=== com.deepin.daemon.Accounts /com/deepin/daemon/Accounts ===
node /com/deepin/daemon/Accounts {
interface com.deepin.daemon.Accounts {
methods:
AllowGuestAccount(in b allow);
CreateGroup(in s groupName,
in u gid,
in b isSystem);
CreateGuestAccount(out s user);
CreateUser(in s name,
in s fullName,
in i accountType,
out o userPath);
DeleteGroup(in s groupName,
in b force);
DeleteUser(in s name,
in b rmFiles);
EnablePasswdChangedHandler(in b enable);
FindUserById(in s uid,
out s user);
FindUserByName(in s name,
out s user);
GetGroupInfoByName(in s name,
out s groupInfo);
GetGroups(out as groups);
GetPresetGroups(in i accountType,
out as groups);
IsPasswordValid(in s password,
out b valid,
out s msg,
out i code);
IsUsernameValid(in s name,
out b valid,
out s msg,
out i code);
ModifyGroup(in s currentGroupName,
in s newGroupName,
in u newGID);
RandUserIcon(out s iconFile);
SetTerminalLocked(in b locked);
signals:
UserAdded(s objPath);
UserDeleted(s objPath);
properties:
readonly s GuestIcon = 'file:///var/lib/AccountsService/icons/illustration/computer.png';
readonly b AllowGuest = false;
readonly as GroupList = ['_ssh', 'adm', 'audio', 'avahi', 'backup', 'bin', 'bluetooth', 'cdrom', 'crontab', 'daemon', 'dde', 'deepin-admin-daemon', 'deepin-daemon', 'deepin-linglong', 'dialout', 'dip', 'disk', 'fax', 'floppy', 'games', 'geoclue', 'input', 'irc', 'kmem', 'kvm', 'lightdm', 'list', 'lp', 'lpadmin', 'mail', 'man', 'messagebus', 'netdev', 'news', 'nm-openconnect', 'nm-openvpn', 'nogroup', 'operator', 'pipewire', 'plugdev', 'polkitd', 'proxy', 'pulse', 'pulse-access', 'render', 'root', 'sambashare', 'sasl', 'scanner', 'seat', 'sgx', 'shadow', 'src', 'ssl-cert', 'sstpc', 'staff', 'sudo', 'sys', 'systemd-coredump', 'systemd-journal', 'systemd-network', 'systemd-timesync', 'tape', 'tss', 'tty', 'users', 'utmp', 'uucp', 'video', 'voice', 'winbindd_priv', 'www-data', 'zane'];
readonly b IsTerminalLocked = false;
readonly b QuickLoginEnabled = true;
readonly as UserList = ['/org/deepin/dde/Accounts1/User1000'];
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s out);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface,
in s property,
out v value);
GetAll(in s interface,
out a{sv} props);
Set(in s interface,
in s property,
in v value);
signals:
PropertiesChanged(s interface,
a{sv} changed_properties,
as invalidates_properties);
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
node User1000 {
};
};
FILE:references/22_power_manager.txt
=== com.deepin.daemon.PowerManager /com/deepin/daemon/PowerManager ===
解析 Introspection XML 时出错:1:1: 第 1 行第 1 个字符出错: 文档必须以一个元素开始(例如 <book>)
FILE:references/23_lastore.txt
node / {
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s xml_data);
signals:
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
node com {
};
};
错误:已到超时限制
FILE:references/23b_lastore_full.txt
node / {
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s xml_data);
signals:
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
node com {
};
};
FILE:references/24_defender.txt
=== com.deepin.defender /com/deepin/defender/AutostartManager ===
错误:GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name com.deepin.defender was not provided by any .service files
=== com.deepin.defender /com/deepin/defender/firewall ===
错误:GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name com.deepin.defender was not provided by any .service files
=== com.deepin.defender /com/deepin/defender/USBManager ===
错误:GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name com.deepin.defender was not provided by any .service files
=== com.deepin.defender /com/deepin/defender/LoginSafety ===
错误:GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name com.deepin.defender was not provided by any .service files
=== com.deepin.defender /com/deepin/defender/MonitorNetFlow ===
错误:GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name com.deepin.defender was not provided by any .service files
FILE:references/30_notifications.txt
错误:GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Notifications was not provided by any .service files
FILE:references/31_bluez.txt
node / {
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s xml);
signals:
properties:
};
interface org.freedesktop.DBus.ObjectManager {
methods:
GetManagedObjects(out a{oa{sa{sv}}} objects);
signals:
InterfacesAdded(o object,
a{sa{sv}} interfaces);
InterfacesRemoved(o object,
as interfaces);
properties:
};
node org {
};
};
FILE:references/32_login1.txt
node / {
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s xml_data);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface_name,
in s property_name,
out v value);
GetAll(in s interface_name,
out a{sv} props);
Set(in s interface_name,
in s property_name,
in v value);
signals:
PropertiesChanged(s interface_name,
a{sv} changed_properties,
as invalidated_properties);
properties:
};
node org {
};
};
FILE:references/33_accounts.txt
node / {
node org {
};
};
FILE:references/34_timedate.txt
node / {
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s xml_data);
signals:
properties:
};
interface org.freedesktop.DBus.Properties {
methods:
Get(in s interface_name,
in s property_name,
out v value);
GetAll(in s interface_name,
out a{sv} props);
Set(in s interface_name,
in s property_name,
in v value);
signals:
PropertiesChanged(s interface_name,
a{sv} changed_properties,
as invalidated_properties);
properties:
};
node org {
};
};
FILE:references/35_colormanager.txt
错误:GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.ColorManager was not provided by any .service files
FILE:references/36_networkmanager.txt
node / {
node org {
};
};
FILE:references/37_pulseaudio.txt
错误:GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.PulseAudio.Core1 was not provided by any .service files
FILE:references/38_upower.txt
node / {
node org {
};
};
FILE:references/39_wpasupplicant.txt
node / {
node fi {
};
};
FILE:references/40_cups.txt
错误:org.opensuse.Cimom.M择 不是有效的总线名称
FILE:references/50_ddeshell_session.txt
错误:GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name :1.106 was not provided by any .service files
错误:GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name :1.107 was not provided by any .service files
FILE:references/51_ddesession_session.txt
错误:GDBus.Error:org.freedesktop.DBus.Error.UnknownObject: No such object path '/'
FILE:references/51b_ddesession_manager.txt
node / {
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s xml_data);
signals:
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
node org {
};
};
FILE:references/52_clipboard.txt
FILE:references/53_kwin.txt
FILE:references/zz_standard.txt
=== org.freedesktop.Notifications ===
错误:GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Notifications was not provided by any .service files
not available
=== org.gnome.SettingsDaemon ===
错误:GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.SettingsDaemon was not provided by any .service files
not available
=== org.gnome.PowerManager ===
错误:GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.PowerManager was not provided by any .service files
not available
=== org.bluez ===
node / {
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s xml);
signals:
properties:
};
interface org.freedesktop.DBus.ObjectManager {
methods:
GetManagedObjects(out a{oa{sa{sv}}} objects);
signals:
InterfacesAdded(o object,
a{sa{sv}} interfaces);
InterfacesRemoved(o object,
as interfaces);
properties:
};
node org {
};
};
FILE:references/zzz_additional.txt
=== org.deepin.dde.Appearance1 ===
错误:GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.deepin.dde.Appearance1 was not provided by any .service files
=== org.deepin.dde.Sound1 ===
错误:GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.deepin.dde.Sound1 was not provided by any .service files
=== org.deepin.dde.Notify1 ===
错误:GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.deepin.dde.Notify1 was not provided by any .service files
=== org.deepin.dde.SessionManager1 ===
错误:GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.deepin.dde.SessionManager1 was not provided by any .service files
=== com.deepin.lastore ===
node / {
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s xml_data);
signals:
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
node com {
};
};
=== com.deepin.dde.LockService ===
node / {
interface org.freedesktop.DBus.Introspectable {
methods:
Introspect(out s xml_data);
signals:
properties:
};
interface org.freedesktop.DBus.Peer {
methods:
Ping();
GetMachineId(out s machine_uuid);
signals:
properties:
};
node com {
};
};
FILE:scripts/introspect.sh
#!/bin/bash
# Introspect all deepin D-Bus interfaces
DEST="$1"
PATH_STR="$2"
OUTPUT_DIR="/home/zane/.openclaw/workspace/skills/deepin-desktop/references"
if [ -z "$DEST" ] || [ -z "$PATH_STR" ]; then
echo "Usage: $0 <service-name> <object-path>"
exit 1
fi
SAFE=$(echo "$DEST.$PATH_STR" | tr '/' '_' | tr '.' '_')
FILE="$OUTPUT_DIR/SAFE.txt"
echo "Introspecting $DEST $PATH_STR..."
gdbus introspect --system --dest "$DEST" --object-path "$PATH_STR" > "$FILE" 2>&1
echo "Saved to $FILE ($(wc -l < "$FILE") lines)"