[LXD] 如何安裝 Jellyfin 並啟用 VAAPI 硬體解/編碼
接續著把各種東西裝進 LXD 的實驗,這一回我打算完整的把家庭影音串流伺服器 —— Jellyfin 塞進去!並且啟用 GPU 轉碼加速的機能!
新增一個支援 VAAPI 的設定檔
複製以下的文字,並存成 vaapi.profile
檔案(下載):
config: description: VAAPI acclerated headless profile devices: mygpu: type: gpu gid: 109 name: vaapi
注:這裡的 gid: 109
是將容器中顯示卡(/dev/dri/*
)的擁有者群組,指定為 render(109)
讀取剛才的 profile 檔案,建立 vaapi
設定檔:
# 建立新的設定檔 lxc profile create vaapi # 從文字匯入設定檔內容 cat vaapi.profile | lxc profile edit vaapi
以剛才的 Profile 新增容器:
lxc init ubuntu:20.04 --profile default --profile vaapi Jellyfin
允許 LXD 存取媒體檔案
允許 LXD 以目前使用者(uid=1000
, gid=1000
)的身份存取檔案:
echo "root:1000:1" | sudo tee -a /etc/subuid echo "root:1000:1" | sudo tee -a /etc/subgid
重新啟動 LXD:
sudo snap restart lxd
允許 Jellyfin
容器以唯讀(readonly)方式存取 /mnt/data/Video
:
lxc config device add Jellyfin videos disk path=/mnt source=/mnt/data/Video readonly=True
為了允許容器中的 Jellyfin 存取媒體檔案,設定 idmap
將容器內的 jellyfin(112)
使用者,對應到自己 (1000)
:
lxc config set Jellyfin raw.idmap 'uid 1000 112'
注:有時 jellyfin
會使用不同的 gid
,可以在 Jellyfin 安裝完成之後,使用以下指令確認:
cat /etc/passwd | grep jellyfin
安裝 Jellyfin
允許外部存取 Port:8096:
lxc config device add Jellyfin my8096 proxy listen=tcp:0.0.0.0:8096 connect=tcp:127.0.0.1:8096
接下來的設定鬥會在 Jellyfin
容器中進行,首先我們先啟動它:
# 啟動容器 lxc start Jellyfin # 進入容器(初始化可能會花點時間,請多試幾次) lxc exec Jellyfin -- su --login ubuntu
安裝 Jellyfin(官方說明):
sudo add-apt-repository universe sudo apt install apt-transport-https wget -O - https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo apt-key add - echo "deb [arch=$( dpkg --print-architecture )] https://repo.jellyfin.org/$( awk -F'=' '/^ID=/{ print $NF }' /etc/os-release ) $( awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release ) main" | sudo tee /etc/apt/sources.list.d/jellyfin.list sudo apt update sudo apt install jellyfin
允許 jellyfin
使用顯示卡:
# 把 jellyfin 加入 render 群組 sudo adduser jellyfin render # 重新啟動 jellyfin 服務 sudo systemctl restart jellyfin.service # 安裝 VAAPI 需要的套件 sudo apt install va-driver-all
輸入網址 http://localhost:8096/:
▲ 設定的部份請依照自己的喜好輸入(記得:東西都在 /mnt
)
▲ 按下左上的 ☰
符號,並點選 Dashboard
進入控制台
▲ 點選 Playback
進入播放選項
下拉選單選擇 Video Accleration API(VAAPI)
,並勾選自己的硬體能支援的選項(參考)
▲ 記得 Save
儲存設定
故障排除
如果你需要確認權限,可以使用以下指令指定 shell 登入:
sudo su -s /bin/bash jellyfin
這個指令可以給你更多 Jellyfin 服務的訊息:
sudo journalctl -u jellyfin.service
關於轉碼(Transcode)的紀錄,可以在 /var/log/jellyfin/
找到:
$ ls /var/log/jellyfin/ FFmpeg.Transcode-2021-09-21_17-41-11_1180315c16001df9f441a2ad689a800b_0ff245a6.log FFmpeg.Transcode-2021-09-21_17-45-00_1180315c16001df9f441a2ad689a800b_b86d4307.log FFmpeg.Transcode-2021-09-21_17-41-11_1180315c16001df9f441a2ad689a800b_65485f9c.log FFmpeg.Transcode-2021-09-21_17-45-00_1180315c16001df9f441a2ad689a800b_f3ea011a.log FFmpeg.Transcode-2021-09-21_17-41-11_1180315c16001df9f441a2ad689a800b_986021c2.log FFmpeg.Transcode-2021-09-21_17-47-15_7c15651832666cd7ccf6245dcd49aad2_66d3c585.log ...略... jellyfin20210921.log
如果你使用的圖形應用程式,或者經常性的使用不同使用者,也可以試試下面的 Profile(下載):
config: user.user-data: | #cloud-config runcmd: - 'sed -i "s/scripts-user/[scripts-user, always]/g" /etc/cloud/cloud.cfg' packages: - acl - x11-apps - mesa-utils - libvulkan1 - mesa-vulkan-drivers - vulkan-utils write_files: - content: | setfacl -m "g:video:rw-" /dev/dri/* setfacl -m "g:render:rw-" /dev/dri/* path: /var/lib/cloud/scripts/per-boot/gpu_permission.sh description: GPU acclerated profile with vulkan devices: mygpu: type: gpu name: gpu
延伸閱讀
這篇文章總有一天會過期,但只要知道如何找到更多訊息,相信各位一定能搭建自己的 Jellyfin Server!
- Hardware Acceleration | Documentation – Jellyfin Project
- Jellyfin 官方的硬體(GPU)加速說明
- Troubleshooting | Documentation – Jellyfin Project
- Jellyfin 官方的故障排除指南
- VA-API drivers – Hardware video acceleration – ArchWiki
- 這張表顯示目前 Mesa Project(開源顯示驅動)對各項硬體解編碼的支援程度
注:Jellyfin 的圖樣屬於該開源專案,本文基於描述需要合理使用。
(Note: Usage of Jellyfin banner logo here is for the purpose of describing only.)