Kodi 安装实战(Debian 13 Headless 部署与远程控制)
Kodi 21.2 headless 服务器 0→1 实录:Debian 13 官方仓库在线安装与 449 包离线 dpkg 整包安装双路线(含 Pre-Depends 卡链排障)、Xvfb 虚拟显示 + systemd 双服务托管、首启默认远程关闭的启用流程、Web/JSON-RPC 认证三连验证(401/401/200)、版本选型取证(PPA 停滞 20.2 反落后 Debian 21.2)与卸载清理。
Kodi 安装实战(Debian 13 Headless 部署与远程控制)
目标:在一台没有显示器、没有 GPU 的 Linux 服务器上,从零安装 Kodi 21.2 并把它跑成一个可远程管理的媒体中心:apt 在线安装与离线 deb 包安装两条路线、Xvfb 虚拟显示 + systemd 托管、Web/JSON-RPC 远程接口启用与认证验证、媒体库 0→1 初始化入库,全部步骤带真实回显。已在 Debian 13 (trixie) 服务器(Kodi
2:21.2+dfsg-4)实测通过,实测日期 2026-10-28;选型背景见本专栏 《Kodi 介绍与选型指南》,参数逐项详解见本专栏《Kodi 21.2 配置参数详解》。
一、环境信息
- 操作系统:Debian GNU/Linux 13 (trixie),x86_64;
- Kodi 版本:21.2 "Omega",包版本
2:21.2+dfsg-4(Debian 官方 main 仓库); - 部署形态:headless(无显示器/无 GPU 服务器),Xvfb 虚拟帧缓冲
:99(1280x720x24)供 Kodi 图形界面渲染,systemd 双服务托管; - 运行用户:
kodi(专用系统用户,主目录/home/kodi,数据目录~/.kodi/); - 远程接口:HTTP Web/JSON-RPC
8080(账号admin/q1w2e3r4),EventServer UDP9777(kodi-send 事件推送); - 媒体与备份目录:
/srv/media/movies/(媒体)、/srv/backup/(备份); - 安装路线:A=Debian 官方仓库在线安装(主推)、B=离线 deb 包整包安装(断网/内网)。
二、前置条件
- 一台 x86_64 服务器,Debian 13 已联网(方案 B 不需要),root 权限;
- ⚠️ 硬件前置说明:Kodi 是带图形界面的媒体中心应用,没有"纯后台守护进程"形态。无显示器服务器必须补一块虚拟显卡——本文用
xvfb(X virtual framebuffer,内存里的虚拟 X 服务)满足它,这也是把 Kodi 跑在服务器上的标准做法;真正的观影终端请用带 GPU/电视输出的设备,服务器形态适合做"媒体库管理 + JSON-RPC 自动化控制端"; - 基础依赖一条命令补齐(curl 用于验证,xvfb 提供虚拟显示):
apt-get update && apt-get install -y curl xvfb
实测回显(输出节选,实测首尾):
Hit:1 http://deb.debian.org/debian trixie InRelease
Hit:3 http://deb.debian.org/debian-security trixie-security InRelease
Reading package lists...
...
Setting up curl (8.14.1-2+deb13u7) ...
Processing triggers for libc-bin (2.41-12+deb13u4) ...
三、版本选型说明
Kodi 官方发行渠道多,各渠道当前版本差异明显(2026-10-28 取证),选错渠道会装到旧版:
| 渠道 | 当前版本 | 结论 |
|---|---|---|
| Debian 13 官方 main 仓库 | 21.2(2:21.2+dfsg-4) | ✅ 本文主推,稳定且最新 |
| Ubuntu 官方仓库 | 偏旧(随发行版冻结) | 适合版本够用即可的桌面机 |
| team-xbmc PPA(Launchpad 实查) | 最新仅到 20.2(2023-06 构建,focal/jammy 系) | ⚠️ 已停滞,反而落后于 Debian 13 仓库,不建议 |
| Flatpak(tv.kodi.Kodi) | 跟随上游 | 桌面机可选,服务器依赖较重 |
| 官网 Windows/macOS/Android 安装包 | 21.2 / 22.0-Piers 预览 | 桌面与移动端场景 |
| 下一代 22.0 "Piers" | RC 阶段(2026-10-10 rc1) | 只做尝鲜,生产不装 |
选型结论:Debian 系服务器直接用发行版仓库;"PPA 一定更新"的直觉在 Kodi 上不成立,是其版本生态里最容易踩的坑。
四、方案 A:在线仓库安装(Debian 官方 apt,主推)
本章从零开始:装包 → 建用户 → systemd 托管 → 首启初始化 → 启用远程控制 → 逐项验证。
4.1 安装软件包
apt-get install -y kodi kodi-eventclients-kodi-send
说明:kodi 元包会连带拉入 kodi-bin(主程序)、kodi-data(皮肤/资源)等;kodi-eventclients-kodi-send 是 EventServer 事件推送客户端(运维篇要用),一并装上。
实测回显(输出节选,实测首尾):
Reading package lists...
Building dependency tree... Done
The following additional packages will be installed:
kodi-bin kodi-data kodi-repository-kodi ... (共 300+ 个依赖包)
...
Setting up kodi (2:21.2+dfsg-4) ...
Processing triggers for libc-bin (2.41-12+deb13u4) ...
安装完成即可双验证:
dpkg -l kodi kodi-bin kodi-data kodi-eventclients-kodi-send | grep ^ii
apt-cache policy kodi | head -4
实测回显:
ii kodi 2:21.2+dfsg-4 amd64 Open Source Home Theatre (executable binaries)
ii kodi-bin 2:21.2+dfsg-4 amd64 Open Source Home Theatre (architecture-dependent files)
ii kodi-data 2:21.2+dfsg-4 all Open Source Home Theatre (arch-independent data package)
ii kodi-eventclients-kodi-send 2:21.2+dfsg-4 amd64 Open Source Home Theatre (Event Client Kodi-SEND package)
kodi:
Installed: 2:21.2+dfsg-4
Candidate: 2:21.2+dfsg-4
Version table:
*** 2:21.2+dfsg-4 500
500 http://deb.debian.org/debian trixie/main amd64 Packages
kodi --version
实测回显:
Kodi from Debian Media Center 21.2 Debian package version: 2:21.2+dfsg-4
Copyright (C) 2005-2025 Team Kodi from Debian - http://kodi.tv
4.2 创建专用运行用户
Kodi 不建议用 root 跑(数据目录、权限都会乱):
useradd -m -s /bin/bash kodi
getent passwd kodi
实测回显:
kodi:x:1000:1000::/home/kodi:/bin/bash
4.3 systemd 托管(Xvfb + Kodi 双服务)
headless 运行 = Xvfb 先起、Kodi 后起。写两个 unit:
# /etc/systemd/system/xvfb.service —— 虚拟显示服务
cat > /etc/systemd/system/xvfb.service <<'EOF'
[Unit]
Description=Xvfb Virtual Framebuffer X Server (for Kodi headless)
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/Xvfb :99 -screen 0 1280x720x24 -nolisten tcp -ac
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
# /etc/systemd/system/kodi.service —— Kodi 本体(依赖 Xvfb,DISPLAY=:99)
cat > /etc/systemd/system/kodi.service <<'EOF'
[Unit]
Description=Kodi Media Center (headless via Xvfb)
After=network.target xvfb.service
Wants=xvfb.service
[Service]
Type=simple
User=kodi
Group=kodi
Environment=DISPLAY=:99
ExecStart=/usr/bin/kodi
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
要点逐条说明:kodi.service 的 User=kodi 限定运行用户;Environment=DISPLAY=:99 指向 Xvfb 虚拟显示;Wants=xvfb.service 保证虚拟显示先拉起;两个服务都 Restart=always,进程崩溃自动拉回。启动并设开机自启(逐单元单独执行):
systemctl enable xvfb
systemctl enable kodi
systemctl start xvfb
systemctl start kodi
状态验证:
systemctl is-active xvfb
systemctl is-active kodi
ps -o pid,user,cmd -C kodi.bin
实测回显:
active
active
PID USER CMD
1522 kodi /usr/lib/x86_64-linux-gnu/kodi/kodi.bin
💡 技术拓展:Kodi 的图形后端不止 Xvfb 一种。常见对比——
方案 原理 适用场景 Xvfb 纯内存虚拟 X 服务,无真实输出 无显示器服务器,本文采用 X11 + 真实显卡 物理显示输出 HTPC 影厅主机 GBM/wayland 直出 绕过 X 直接驱动 GPU LibreELEC 等盒子系统 本文因服务器无 GPU 无显示器,采用 Xvfb;它牺牲了硬件加速但换来"任何服务器都能跑"的形态。
4.4 首启初始化与默认远程状态
Kodi 首次启动会在用户主目录生成数据目录骨架(~/.kodi/),并生成默认关闭远程控制的 guisettings.xml。全新实例首启后的实测状态:
ls /home/kodi/.kodi/
grep -o '<setting id="services.webserver[^>]*>[^<]*</setting>' /home/kodi/.kodi/userdata/guisettings.xml
实测回显:
addons
media
system
temp
userdata
<setting id="services.webserver" default="true">false</setting>
<setting id="services.webserverport" default="true">8080</setting>
<setting id="services.webserverauthentication" default="true">true</setting>
<setting id="services.webserverusername" default="true">kodi</setting>
<setting id="services.webserverssl" default="true">false</setting>
四个关键默认值:webserver=false(远程控制关)、port=8080、authentication=true、默认用户名 kodi 且无密码。headless 部署必须手工启用 webserver,否则 8080 完全不监听。
4.5 启用 Web/JSON-RPC 远程控制
停服 → 改 guisettings.xml → 起服(运行中直接改会被进程内存态覆盖):
systemctl stop kodi
sed -i \
-e 's|<setting id="services.webserver" default="true">false</setting>|<setting id="services.webserver">true</setting>|' \
-e 's|<setting id="services.webserverusername" default="true">kodi</setting>|<setting id="services.webserverusername">admin</setting>|' \
/home/kodi/.kodi/userdata/guisettings.xml
# 密码项默认不存在,手工插入(admin 账号 + 演示口令)
sed -i 's|<setting id="services.webserverusername">admin</setting>|<setting id="services.webserverusername">admin</setting>\n <setting id="services.webserverpassword">q1w2e3r4</setting>|' /home/kodi/.kodi/userdata/guisettings.xml
chown kodi:kodi /home/kodi/.kodi/userdata/guisettings.xml
systemctl start kodi
改后核对与连通验证:
grep -o '<setting id="services.webserver[a-z]*"[^>]*>[^<]*</setting>' /home/kodi/.kodi/userdata/guisettings.xml
ss -ltnp | grep 8080
实测回显:
<setting id="services.webserver">true</setting>
<setting id="services.webserverport" default="true">8080</setting>
<setting id="services.webserverauthentication" default="true">true</setting>
<setting id="services.webserverusername">admin</setting>
<setting id="services.webserverpassword">q1w2e3r4</setting>
<setting id="services.webserverssl" default="true">false</setting>
LISTEN 0 4096 0.0.0.0:8080 0.0.0.0:* users:(("kodi.bin",pid=2663,fd=24))
LISTEN 0 4096 [::]:8080 [::]:* users:(("kodi.bin",pid=2663,fd=29))
webserver=true、用户 admin、密码已落盘,kodi.bin 已监听 8080。
4.6 远程接口认证与连通验证
三连验证:无认证应 401、错误密码应 401、正确认证应通:
curl -s -o /dev/null -w 'no-auth => %{http_code}\n' http://127.0.0.1:8080/jsonrpc
curl -s -o /dev/null -w 'wrong-pass => %{http_code}\n' -u admin:wrongpass http://127.0.0.1:8080/jsonrpc
curl -s -u admin:q1w2e3r4 -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"Application.GetProperties","params":{"properties":["version","name"]},"id":1}' \
http://127.0.0.1:8080/jsonrpc
实测回显:
no-auth => 401
wrong-pass => 401
{"id":1,"jsonrpc":"2.0","result":{"name":"Kodi","version":{"major":21,"minor":2,"revision":"20250330-nogitfound","tag":"stable"}}}
版本三元组 21.2 / stable 拿到,安装与远程控制全部就绪。浏览器访问 http://<服务器IP>:8080/ 可打开 Web 界面(Chorus2),登录账号即 admin / q1w2e3r4。
五、方案 B:离线 deb 包整包安装(断网/内网服务器)
适用:目标服务器不通外网(或不想让它联网)。思路:在同架构同发行版的联网机上用 apt-get install --download-only 把 Kodi 全依赖闭包(449 个 deb,约 282MB)下载成一个目录,整体拷到目标机 dpkg -i 一次装完。
5.1 联网机:下载全依赖闭包
mkdir -p /tmp/debs
apt-get install --download-only --reinstall -y \
-o Dir::Cache::archives=/tmp/debs -o DPkg::Post-Invoke="" \
kodi kodi-eventclients-kodi-send
ls /tmp/debs/*.deb | wc -l
du -sh /tmp/debs
实测回显:
449
282M /tmp/debs
两个 -o 选项缺一不可:Dir::Cache::archives 把包下到指定目录;DPkg::Post-Invoke="" 干掉 Debian 预装环境自带的 apt 缓存清理钩子(/etc/apt/apt.conf.d/ 里的 Post-Invoke 清理动作,装完即删缓存 deb,实测不空此参数则目录最终为空)。
5.2 拷贝到目标机并离线安装
把整个 /tmp/debs 拷到目标机(scp/U盘皆可)后,在目标机上一条命令装全(本实录为演示严格性,先把目标机从内网断开,再做纯离线安装):
dpkg -i /tmp/debs/*.deb
实测回显(输出节选,实测首尾):
(Reading database ... 7894 files and directories currently installed.)
Preparing to unpack .../libgcc-s1_14.2.0-19_amd64.deb ...
Unpacking libgcc-s1:amd64 (14.2.0-19) ...
...
Setting up kodi (2:21.2+dfsg-4) ...
Processing triggers for libc-bin (2.41-12+deb13u4) ...
dpkg -i 一次传全部包,解包与配置排序由 dpkg 在单次事务内自动完成。但注意:exit 0 不等于全部配置完成——本实录装完即遇到个别包停留未配置态(见 5.3),装后先做状态核对:
dpkg -l kodi kodi-bin kodi-data kodi-eventclients-kodi-send | grep -E '^(ii|iU|in)'
which kodi
实测回显(首次核对,出现 iU/in 属未收敛):
iU kodi 2:21.2+dfsg-4 amd64 Open Source Home Theatre (executable binaries)
iU kodi-bin 2:21.2+dfsg-4 amd64 Open Source Home Theatre (architecture-dependent files)
ii kodi-data 2:21.2+dfsg-4 all Open Source Home Theatre (arch-independent data package)
iU kodi-eventclients-kodi-send 2:21.2+dfsg-4 amd64 Open Source Home Theatre (Event Client Kodi-SEND package)
/usr/bin/kodi
5.3 收尾排障:iU/in 未收敛实录
Kodi 本体已解包(/usr/bin/kodi 在)但状态 iU(unpacked 未配置)。dpkg --configure -a 补配置时暴露依赖链断点:
dpkg --configure -a
dpkg --configure python3-pil
实测回显(两条命令逐层揭出根因):
dpkg: dependency problems prevent configuration of kodi-bin:
kodi-bin depends on python3-pil; however:
Package python3-pil:amd64 is not configured yet.
...
dpkg: dependency problems prevent configuration of python3-pil:amd64:
python3-pil:amd64 depends on python3 (<< 3.14); however:
Package python3 is not installed.
根因:python3 包声明 Pre-Depends(预依赖)python3-minimal (= 3.13.5-1),而大事务里 python3-minimal 自身也未及时配置,导致 python3 在解包阶段被拒(实测 dpkg: error processing archive ... python3_3.13.5-1_amd64.deb (--install): pre-dependency problem - not installing python3)。修复按"先补预依赖链、再全量收敛"三步:
dpkg -i /tmp/debs/python3-minimal_3.13.5-1_amd64.deb
dpkg -i /tmp/debs/python3_3.13.5-1_amd64.deb
dpkg --configure -a
最终核对:
dpkg -l kodi python3 kodi-bin kodi-eventclients-kodi-send | grep -E '^(ii|iU|in)'
kodi --version
实测回显:
ii kodi 2:21.2+dfsg-4 amd64 Open Source Home Theatre (executable binaries)
ii kodi-bin 2:21.2+dfsg-4 amd64 Open Source Home Theatre (architecture-dependent files)
ii kodi-eventclients-kodi-send 2:21.2+dfsg-4 amd64 Open Source Home Theatre (Event Client Kodi-SEND package)
ii python3 3.13.5-1 amd64 interactive high-level object-oriented language (default python3 version)
Kodi from Debian Media Center 21.2 Debian package version: 2:21.2+dfsg-4
Copyright (C) 2005-2025 Team Kodi from Debian - http://kodi.tv
全部 ii、版本三元组正常,离线安装收官。经验:dpkg -i 大闭包安装后必须做 dpkg -l 状态核对,发现 iU/in 就用 dpkg --configure -a 收敛,遇 Pre-Depends 报错按提示顺序手工补解包对应 deb 即可。后续 4.2–4.6 步骤原样适用。
六、方案对比与选择建议
| 维度 | 方案 A:在线仓库 | 方案 B:离线 deb 闭包 |
|---|---|---|
| 需要联网 | 是(apt 源可达) | 仅联网机需要,目标机全断网 |
| 版本 | trixie main 当前 21.2 | 与联网机取包时一致(可锁定) |
| 安装方式 | apt-get install | dpkg -i *.deb(449 包一次事务) |
| 依赖处理 | apt 自动解析 | 闭包预下载,单事务内自动排序 |
| 体积 | 按需(约 282MB 下载) | 约 282MB 目录整体拷贝 |
| systemd 托管 | 本文 4.3 步骤 | 同左 |
| 适用 | 常规可联网服务器 | 内网隔离、批量同版本部署 |
选择建议:能联网选 A,省心且随 apt upgrade 滚动更新;内网/安全区选 B,版本完全可控。两方案装出来的 Kodi 行为完全一致,后续配置与运维篇对两者通用。
七、配置说明(两方案共用的关键配置)
- 远程控制三件套:
services.webserver=true、services.webserverusername=admin、services.webserverpassword=q1w2e3r4(4.5 步),改动方式与生效条件详见《Kodi 21.2 配置参数详解》第三章; - 建议关闭零conf 广播(内网多实例防撞名):
services.devicename改成主机名; - 媒体目录:统一小写命名(如
/srv/media/movies/),原因与 sources.xml 写法见配置篇 5.3; - 开机自启:
systemctl enable xvfb kodi(逐单元执行),服务器重启后自动恢复远程控制面。
八、常见问题
Q1:systemctl start kodi 后服务反复重启?
先看 journalctl -u kodi -n 30。最常见原因是 Xvfb 没起来(DISPLAY=:99 连不上)——确认 systemctl is-active xvfb 为 active;其次确认运行用户 kodi 对 /home/kodi 有写权限。
Q2:8080 端口不通?
按序检查:services.webserver 是否 true(首启默认 false,见 4.4);ss -ltnp | grep 8080 是否有 kodi.bin 监听;认证头是否带对(无认证返回 401 属正常,见 4.6)。改过 services.webserverport 的要重启才挂新口。
Q3:日志里 libva/VDPAU/音频 sink 报错是坏了吗?
不是。headless 无 GPU 无声卡的必然回显(实测日志原文:libva error: vaGetDriverNames() failed with unknown libva error、Failed to open VDPAU backend libvdpau_nvidia.so: cannot open shared object file、CActiveAESink::OpenSink - no sink was returned),库管理与 JSON-RPC 功能不受影响。
Q4:扫描媒体库后影片数是 0?
三个原因(全部实测踩过):源路径大小写被归一化、path 表 strContent 未设内容类型、metadata.local 刮削器缺同名 NFO。完整定位与修复步骤见《Kodi 21.2 配置参数详解》第八章。
九、卸载与清理
systemctl disable kodi
systemctl disable xvfb
systemctl stop kodi
systemctl stop xvfb
apt-get purge -y 'kodi*' kodi-bin kodi-data
rm -rf /home/kodi/.kodi /etc/systemd/system/kodi.service /etc/systemd/system/xvfb.service
systemctl daemon-reload
userdel -r kodi
说明:purge 'kodi*' 连配置带包一起清;~/.kodi/ 是全部媒体库与设置,确认不再需要再删;两个 unit 文件与运行用户一并回收。验证:
which kodi
systemctl is-active kodi
实测回显:
which: no kodi in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin)
inactive
十、参考链接
- 官方下载页(渠道矩阵):https://kodi.tv/download/
- 官方 Wiki:Linux 安装 https://kodi.wiki/view/HOW-TO:Install_Kodi_for_Linux
- 官方 Wiki:Web 界面与远程控制 https://kodi.wiki/view/Web_interface
- 官方 Wiki:HTTP 认证说明 https://kodi.wiki/view/Web_interface#Enabling_the_web_interface
- team-xbmc PPA(版本取证用):https://launchpad.net/~team-xbmc/+archive/ubuntu/ppa
- 本专栏相关篇目:《Kodi 介绍与选型指南》、《Kodi 21.2 配置参数详解》、《Kodi 常用命令与运维实战(核心篇)》