SMB 网络共享视频缩略图修复记录
AI

SMB 网络共享视频缩略图修复记录

TomHanck4
2026-05-18 / 0 评论 / 0 阅读 / 正在检测是否收录...

SMB 网络共享视频缩略图修复记录

日期:2026-05-18
系统:Ubuntu 24.04.4 LTS
问题路径:smb://mynas.local/jellyfin/media/新建文件夹/001极品


问题描述

Nautilus 文件管理器在 SMB 网络共享目录中无法显示视频文件缩略图,~/.cache/thumbnails/fail/ 下持续产生 50 个失败标记。


根因分析

根本原因:Ubuntu 24.04 默认启用 AppArmor 对非特权 user namespace 的限制:

/proc/sys/kernel/apparmor_restrict_unprivileged_userns = 1

Nautilus(GNOME 46)的所有 thumbnailer 都通过 bwrap --unshare-all 沙箱运行。该限制导致 bwrap 在创建 network namespace 后设置 loopback 时被内核拒绝:

bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted

沙箱起不来 → wrapper 根本没有机会执行 → 每个文件被直接打上 fail 标记。

次要原因:bwrap 沙箱内只挂载 /usr,~/.local/bin/ 路径在沙箱内不可见,thumbnailer wrapper 必须安装到 /usr/local/bin/。


修复步骤

1. 关闭 AppArmor 非特权 userns 限制(持久化)

sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0

写入持久化配置 /etc/sysctl.d/60-apparmor-userns.conf:

# Re-allow unprivileged user namespaces for bwrap-based thumbnailers, flatpak, etc.
kernel.apparmor_restrict_unprivileged_userns=0

2. 安装 SMB URI 解析 wrapper

文件:/usr/local/bin/ffmpegthumbnailer-gvfs(755)

功能:将 smb:// URI 解析为 gvfs FUSE 本地路径(/run/user/1000/gvfs/smb-share:...),再调用 /usr/bin/ffmpegthumbnailer。

sudo install -m 0755 ~/.local/bin/ffmpegthumbnailer-gvfs /usr/local/bin/ffmpegthumbnailer-gvfs

3. 注册用户级 thumbnailer

文件:~/.local/share/thumbnailers/ffmpegthumbnailer.thumbnailer

[Thumbnailer Entry]
TryExec=/usr/local/bin/ffmpegthumbnailer-gvfs
Exec=/usr/local/bin/ffmpegthumbnailer-gvfs -i %u -o %o -s %s -f
MimeType=video/jpeg;video/mp4;video/mpeg;...(完整 MIME 列表)

关键:使用 %u(URI)而非 %i(本地路径),因为 SMB 文件对 GIO 是 non-native,%i 会被跳过。

4. 清理失败缓存

rm -rf ~/.cache/thumbnails/fail
nautilus -q

5. 确认 Nautilus 设置

gsettings set org.gnome.nautilus.preferences show-image-thumbnails 'always'
gsettings set org.gnome.nautilus.preferences thumbnail-limit 4096

验证结果

修复后 ~/.cache/thumbnails/x-large/ 生成 84 个缩略图 PNG,fail 目录为空。

x-large: 84 files
fail:     0 files

注意事项

  • 关闭 apparmor_restrict_unprivileged_userns 会放开本机所有非特权 user namespace(影响 Chromium 沙箱、Flatpak、bwrap 等)。如需更精细控制,可改为单独为 /usr/bin/bwrap 写 AppArmor profile。
  • 重启后 sysctl 由 /etc/sysctl.d/60-apparmor-userns.conf 自动加载,无需额外操作。
  • 大文件首次扫描较慢(需通过 SMB 读取首帧),属正常现象。
0

评论 (0)

取消