Ubuntu 下为 Jellyfin 实现广告屏蔽的可行方案
一、先明确“广告”的来源与边界
- Jellyfin 本体无广告,常见“广告”多为第三方元数据或图片外链(如TMDB/豆瓣/IMDb海报、预告片、头像等)加载自外部网络。
- 浏览器端观看时,网页或客户端界面上的横幅/追踪元素属于客户端侧问题,与服务器端无关。
- 终端登录时的 Ubuntu MOTD 新闻链接并非 Jellyfin 范畴,如介意可在系统层面关闭。
二、方案总览与选择建议
| 目标 |
适用场景 |
核心做法 |
影响与注意 |
| 屏蔽网页/客户端界面广告 |
使用浏览器或网页端观看 |
安装uBlock Origin等扩展,开启默认规则集 |
仅对浏览器生效,客户端需各自处理 |
| 拦截元数据/图片外链广告 |
服务器侧统一生效 |
让 Jellyfin 通过本地代理访问外网,在代理层做广告过滤 |
对全部客户端生效;需可运行本地代理 |
| 关闭终端 MOTD 新闻链接 |
仅针对 Ubuntu 服务器登录提示 |
修改 /etc/default/motd-news 禁用动态新闻 |
与 Jellyfin 无关,仅清理登录信息 |
三、分步实施
-
浏览器或网页端观看
- 在浏览器安装并启用uBlock Origin:默认启用 uBlock filters、EasyList、EasyPrivacy、Peter Lowe 等规则,可拦截网页广告与跟踪;支持自定义静态/动态规则,且可从 hosts 文件加载过滤规则。安装后在扩展面板即可查看拦截统计与临时放行站点。该方案对网页端 Jellyfin 有效,对官方桌面/移动客户端通常无效。
-
服务器侧统一拦截外链(推荐)
- 思路:让 Jellyfin 通过本机运行的 HTTP 代理(如 Clash、AdGuard Home、Pi‑hole 的 DoH/DoT 上游等)访问外网,在代理层完成广告与跟踪拦截,这样所有客户端(网页、Kodi、移动端等)都会受益。
- 前提:Jellyfin 支持通过环境变量 http_proxy / https_proxy 使用代理;但该变量对 systemd 服务不会自动继承,需要为 jellyfin.service 单独配置。
- 配置步骤(以本机 Clash 端口 12333 为例):
- 创建 systemd 覆盖片段
sudo systemctl edit jellyfin.service
- 写入代理变量(两种写法二选一)
- 直接写入
[Service]
Environment="http_proxy=http://127.0.0.1:12333"
Environment="https_proxy=http://127.0.0.1:12333"
- 或引用外部文件
[Service]
EnvironmentFile=/etc/default/jellyfin_proxy.env
并在 /etc/default/jellyfin_proxy.env 中写入:http_proxy=http://127.0.0.1:12333
https_proxy=http://127.0.0.1:12333
- 重新加载并重启
sudo systemctl daemon-reload
sudo systemctl restart jellyfin.service
- 说明:若代理启用了认证,使用 http://user:pass@127.0.0.1:12333 格式;如代理仅监听 127.0.0.1,请确保 Jellyfin 与代理在同一主机。上述做法已在 Ubuntu 22.04 的 Jellyfin systemd 环境中验证可行。
-
仅关闭终端 MOTD 新闻链接(可选)
- 编辑 /etc/default/motd-news,将 ENABLED=1 改为 ENABLED=0,保存后下次登录不再显示动态新闻链接。该操作与 Jellyfin 无关,仅用于清理 Ubuntu 登录欢迎信息中的推广性链接。
四、验证与常见问题
- 验证代理是否生效
- 查看进程环境变量:sudo systemctl show jellyfin --property=Environment
- 临时测试:sudo -u jellyfin env | grep -i proxy
- 观察 Jellyfin 日志与播放器外链加载情况(如海报、预告片是否不再请求被拦截的域名)。
- 常见问题
- 规则过严导致元数据/图片加载失败:在代理层放宽对应域名或切换为“仅广告规则”模式。
- 客户端不走代理:网页端通常继承系统/浏览器代理;原生客户端需在其网络设置中单独配置或使用系统级 PAC。
- 性能与稳定性:选择本地高性能代理,避免高并发下成为瓶颈;必要时为代理设置缓存与上游超时。