[Bug Report] 玲珑版通达信图标显示异常(启动器 + 任务栏)
Tofloor
poster avatar
chenkun_lws
deepin
2026-08-14 00:01
Author
  • 日期:2026-08-13
  • 系统:deepin 25(X11、ostree、dde-shell 2.0.52、linyaps 玲珑)
  • 涉及应用:通达信金融终端(玲珑包 com.tdx.tdxcfv 7.64.0.0,deb 转制包)
  • 状态:已修复,用户目测确认 ✅

一、摘要(TL;DR)

玲珑包 com.tdx.tdxcfv 安装时 linyaps 漏导出了图标文件:SVG 图标完好地躺在应用层(layer)里,但没有被链接/复制到玲珑的图标导出目录。桌面文件声明的 Icon=com.tdx.tdxcfv 在系统全部图标搜索路径中找不到任何对应文件,Qt 主题查找失败 → 启动器与任务栏统一回退为占位图标。

修复:把应用层内的 SVG 复制到用户级图标目录 ~/.local/share/icons/hicolor/scalable/apps/com.tdx.tdxcfv.svg,重启 dde-shell@DDE.service 让 launchpad/dock 重扫图标主题。全程无需 root,玲珑后续更新不影响。

二、现象记录

  • 任务栏上通达信图标未正常显示(夹在 VS Code 与同花顺之间),其余应用图标全部正常;
  • 系统"启动器"中通达信图标同样异常。

第二点至关重要:启动器不经过 dock 的槽位绑定逻辑,它直接按桌面文件解析图标。启动器也异常,即可排除本机此前确认的 dock 行号漂移 bug(见 deepin25-dock-icon-mismatch-rootcause.md,该 bug 表现为任务栏固定槽位"串"到别的应用的图标,且不影响启动器),问题必然出在图标名 → 图标文件的解析环节。

三、排查与证据链

3.1 定位应用身份与桌面文件

任务栏固定列表(DConfig)里只有 3 个条目,通达信是以"运行中应用"身份出现在任务栏的。在应用管理器(AM)中发现其对象路径,确认它由玲珑安装:

$ busctl --user tree org.desktopspec.ApplicationManager1 | grep -i tdx
      ├─ /org/desktopspec/ApplicationManager1/com_2etdx_2etdxcfv
      │ └─ /org/desktopspec/ApplicationManager1/com_2etdx_2etdxcfv/8e9a8b2c...   # 运行中实例

$ ll-cli list | grep -i tdx
com.tdx.tdxcfv   ...   7.64.0.0   main   binary   convert from 7.64 ...

桌面文件(玲珑导出位置,注意是 entries/apps/share/... 而非 entries/share/...):

$ cat /var/lib/linglong/entries/apps/share/applications/com.tdx.tdxcfv.desktop
[Desktop Entry]
X-linglong=com.tdx.tdxcfv
Name=tdxcfv
Name[zh_CN]=通达信金融终端
Exec=/usr/bin/ll-cli run com.tdx.tdxcfv -- /opt/apps/com.tdx.tdxcfv/files/bin/start.sh
Icon=com.tdx.tdxcfv          # ← 按"图标名"查找,不是绝对路径
...

3.2 图标搜索路径取证(取自 dde-shell 进程真实环境)

$ tr '\0' '\n' < /proc/$(pgrep -u meteor -f dde-shell | head -1)/environ | grep XDG
XDG_DATA_DIRS=/var/lib/linglong/entries/apps/share:/usr/local/share:/usr/share:/var/lib/linglong/entries/share
XDG_DATA_HOME=/home/meteor/.local/share

按 freedesktop 图标规范,com.tdx.tdxcfv 这个名字会在上述各根的 icons/ 子树(hicolor 主题等)中查找。

3.3 关键证据:导出目录里根本没有这个图标

$ find /var/lib/linglong/entries -iname "*tdx*"        # 全导出树搜索
(空)
$ find /home/meteor/.local/share/icons /usr/share/pixmaps -iname "*tdx*"
(空)

但图标在应用层里完好存在(256×256 SVG,内嵌 PNG,格式合法):

$ ls /var/lib/linglong/layers/3fe8408c.../entries/share/icons/hicolor/scalable/apps/
com.tdx.tdxcfv.svg

即:linyaps 导出该应用时桌面文件导出了、图标没导出

3.4 对照组:同花顺为何正常

同为玲珑应用、同在一个桌面文件目录,同花顺显示正常,差异只在导出完整性:

通达信(异常) 同花顺(正常)
桌面文件 com.tdx.tdxcfv.desktop cn.com.10jqka.desktop
Icon 声明 Icon=com.tdx.tdxcfv Icon=HevoIcon
导出图标 缺失(全树搜索为空) /var/lib/linglong/entries/share/icons/hicolor/scalable/apps/HevoIcon.svg
层内图标 存在且完好 存在

3.5 AM 透传机制确认

$ busctl --user get-property org.desktopspec.ApplicationManager1 \
    /org/desktopspec/ApplicationManager1/com_2etdx_2etdxcfv \
    org.desktopspec.ApplicationManager1.Application Icons
a{ss} 1 "Desktop Entry" "com.tdx.tdxcfv"

AM 只负责把桌面文件里的图标名字透传给 dde-shell,由 shell 做主题解析。名字本身正确、传输链路正常——问题只剩"名字找不到文件"这一环。证据链闭合:

桌面文件 Icon=com.tdx.tdxcfv  ✓ 正确
  → AM 透传图标名             ✓ 正确
    → shell 主题查找          ✗ 全路径无此文件(漏导出)
      → 回退占位图标(启动器 & 任务栏同步异常)

3.6 已排除的备选假设

  • 桌面文件 Icon 拼写错误:否,声明名与层内文件名完全一致;
  • 用户目录存在错误图标抢占~/.local/share/icons/usr/share/pixmaps 搜索为空;
  • 图标文件本身损坏:层内 SVG 经 file 验证为合法 SVG,内容完好;
  • dock 行号漂移 bug 复发:否。该 bug 只影响任务栏槽位且表现为"显示成别的应用的图标";本次启动器同样异常,且显示的是占位图。

四、根因

linyaps 对 deb 转制包 com.tdx.tdxcfv条目导出(entries export)不完整/var/lib/linglong/layers//entries/share/icons/... 下的 SVG 未被链接到系统导出目录 /var/lib/linglong/entries/share/icons/...。图标名解析在全部搜索路径落空,启动器与任务栏共用同一解析结果,故两处同时显示占位图。

属于打包/导出环节缺陷(该包 description 中可见 convert from 7.64 字样,为 deb 转制包),非用户配置问题,也非桌面环境 bug。

五、解决方案

已实施(用户侧修复,推荐)

# 1. 把层内完好的 SVG 补放到用户级 hicolor 主题目录
mkdir -p ~/.local/share/icons/hicolor/scalable/apps
cp /var/lib/linglong/layers/3fe8408c3e3429ac45bd3bad0dcd06c4a56ee95990774505d699d4a5d55fe370/entries/share/icons/hicolor/scalable/apps/com.tdx.tdxcfv.svg \
   ~/.local/share/icons/hicolor/scalable/apps/com.tdx.tdxcfv.svg

# 2. 重启 dde-shell,让 launchpad / dock 重扫图标主题(图标主题在内存中有缓存)
systemctl --user restart dde-shell@DDE.service

选型理由:

  • ~/.local/share/icons(即 XDG_DATA_HOME/icons)在规范搜索路径内,且优先级高于系统目录
  • 无需 root,不污染 ostree 管理的系统区;
  • 玲珑包更新/重装都不会触碰用户目录,修复持久;若将来重装触发正常导出,两边同名同内容,无冲突;
  • hicolor 无需 gtk-update-icon-cache——缓存是可选项,Qt 无缓存时直接扫目录(已确认系统 hicolor 的 index.theme 包含 scalable/apps 段)。

备选方案(未采用)

  • ll-cli 卸载重装触发重新导出:下载量约 685 MB,且转制包重导出是否补上图标并无保证;
  • 向 linyaps 或该包打包者反馈导出缺陷:值得做,但不阻塞修复。

不建议的做法

  • /var/lib/linglong/... 下桌面文件的 Icon= 改成绝对路径:文件归 root/玲珑管理,任何重装或更新即丢失,且治标不治本。

六、验证

验证项 结果
图标文件落位于规范路径、权限可读 ~/.local/share/icons/hicolor/scalable/apps/com.tdx.tdxcfv.svg
系统 hicolor index.themescalable/apps 段(Size=128, MaxSize=256)
dde-shell@DDE.service 重启后 active,AM 中应用对象正常
用户目测:启动器 + 任务栏图标均正常显示 ✅ 2026-08-13

附录 A:关键排查命令(可复现)

# 玲珑应用定位
ll-cli list | grep -i <关键词>
busctl --user tree org.desktopspec.ApplicationManager1 | grep -i <关键词>

# 玲珑桌面文件与图标导出目录(两处都在会话 XDG_DATA_DIRS 内)
ls /var/lib/linglong/entries/apps/share/applications/
find /var/lib/linglong/entries/share/icons -iname "*<关键词>*"

# 应用层内原始文件
find /var/lib/linglong/layers -ipath "*<关键词>*" \( -iname "*.svg" -o -iname "*.png" \)

# 桌面会话真实的图标搜索路径
tr '\0' '\n' < /proc/$(pgrep -u $USER -f dde-shell | head -1)/environ | grep XDG

# AM 透传的图标名
busctl --user get-property org.desktopspec.ApplicationManager1 \
  /org/desktopspec/ApplicationManager1/<转义后的appid> \
  org.desktopspec.ApplicationManager1.Application Icons

# 生效修复后刷新界面
systemctl --user restart dde-shell@DDE.service

附录 B:经验要点

  1. 启动器也异常 → 排除 dock 侧问题,直接查"图标名→文件"解析;仅任务栏异常才往 dock 槽位/绑定方向查。
  2. 玲珑应用的条目分两处导出:桌面文件在 entries/apps/share/applications/,图标在 entries/share/icons/——排查时两处都要看,缺一处即为本案模式。
  3. 对照法高效:找一个同类型但显示正常的玲珑应用,比对其 Icon= 声明与导出文件是否存在,差异即根因方向。
  4. 改图标后需重启 dde-shell@DDE.service;个别组件缓存更顽固时注销重登即可。
Reply Favorite View the author
All Replies
avatar
chenkun_lws
deepin
2026-08-14 00:04
#1

不知道通达信玲珑版是论坛哪位朋友打包维护的,如果这位朋友看到了,可不可以下个版本更新的时候修复一下这个图标漏导出的问题doubt

Reply View the author