← 返回

Ubuntu 下第三方图标主题导致 Nautilus 无法打开目录的修复

排查并修复旧版 SVG 图标或错误主题索引导致 Nautilus 打开特定目录时崩溃的问题。

  • Ubuntu
  • Nautilus
  • 图标主题
  • GTK

适用场景:启用第三方图标主题后,Nautilus 打开含压缩包、安装包等特定文件的目录时立即退出;切回系统图标主题后恢复正常。

这通常不是目录或文件损坏,而是旧版 SVG 图标、错误的 index.theme,或它们与新版 GTK、Cairo 的兼容性问题。

1. 排除文件损坏

以 .tar.xz 为例:

bash
xz -t /path/to/archive.tar.xz

命令无输出且退出状态为 0,说明压缩包结构正常。

2. 确认问题来自图标主题

查看当前主题:

bash
gsettings get org.gnome.desktop.interface icon-theme

临时切回 Ubuntu 默认主题后重新打开目录:

bash
gsettings set org.gnome.desktop.interface icon-theme 'Yaru'
nautilus -q
gio open /path/to/problem-directory

如果目录可以正常打开,问题基本位于第三方图标主题。

还可以检查日志中的典型错误:

bash
journalctl --user --since '10 minutes ago' --no-pager \
  | grep -Ei 'nautilus|cairo|icon|theme directory'

常见信息包括 cairo_surface_set_device_scale 断言失败,或主题目录缺少 Size 字段。

3. 检查主题索引

主题通常位于 ~/.icons/主题名/ 或 ~/.local/share/icons/主题名/。打开其中的 index.theme,确认:

  • Directories= 中的每个目录真实存在;
  • 每个目录都有对应的 [目录名] 段;
  • 使用 Size=24,不要写成区分大小写后无法识别的 size=24;
  • 删除重复项和不存在的目录声明。

修改后重启 Nautilus:

bash
nautilus -q

4. 修复不兼容的 SVG 图标

先根据文件 MIME 类型找到候选图标名:

bash
gio info /path/to/problem-file | grep -E 'content-type|standard::icon'

如果某个旧 SVG 触发崩溃,最稳妥的办法是暂时移走它,让 GTK 使用继承主题中的安全图标:

bash
mv ~/.icons/主题名/128x128/mimetypes/问题图标.svg \
   ~/.icons/主题名/128x128/mimetypes/问题图标.svg.disabled

若希望保留原外观,可安装 librsvg2-bin,将 SVG 转成 PNG:

bash
sudo apt install librsvg2-bin
rsvg-convert -w 128 -h 128 问题图标.svg -o 问题图标.png
mv 问题图标.svg 问题图标.svg.disabled

5. 重新启用并验证

bash
gsettings set org.gnome.desktop.interface icon-theme '主题目录名'
nautilus -q
gio open /path/to/problem-directory
pgrep -a nautilus

目录能打开、pgrep 能看到 Nautilus,且日志中没有新的 Cairo 断言,即表示修复成功。

确认稳定后,可将测试主题、.bak、.disabled 等文件移入回收站:

bash
gio trash /path/to/confirmed-test-copy

不要批量删除整个 ~/.icons,也不要在未验证前删除原始图标;保留系统主题作为随时可用的回退方案。