Emby HW Acceleration on N100 PVE LXC

Reference

On PVE host

1
2
3
4
5
6
7
8
9
lspci -k


00:02.0 VGA compatible controller: Intel Corporation Alder Lake-N [UHD Graphics]
DeviceName: Onboard - Video
Subsystem: Intel Corporation Alder Lake-N [UHD Graphics]
Kernel driver in use: i915
Kernel modules: i915

1
2
3
4
5
ls -l /dev/dri
total 0
drwxr-xr-x 2 root root 80 Feb 5 01:16 by-path
crw-rw---- 1 root video 226, 0 Feb 5 01:16 card0
crw-rw---- 1 root render 226, 128 Feb 5 01:16 renderD128

[!NOTE]

  • /dev/dri/cardX
    • 每个 cardX(如 card0, card1)表示系统中的一个显卡设备。
    • 这是应用程序与显卡交互的主要入口。
  • /dev/dri/renderDXXX
    • renderDXXX(如 renderD128, renderD129)是专门为现代应用程序设计的设备节点,主要用于无显示输出的计算任务,例如 GPU 加速的计算、OpenCL 或 Vulkan 等。
    • 它们与显示器无关,仅用于离屏渲染任务。
  • /dev/dri/controlDXX
    • controlDXX 设备节点通常用于 DRM(Direct Rendering Manager)控制接口,主要供图形服务器(如 Xorg 或 Wayland)使用。
1
vi /etc/pve/lxc/101.conf # add following config to your lxc
1
2
3
4
5
lxc.cgroup2.devices.allow: c 226:0 rwm # 226是显卡设备
lxc.cgroup2.devices.allow: c 226:128 rwm # 次设备号 `128` 通常对应某些特定的 GPU 子设备或驱动(例如渲染设备 `/dev/dri/renderD128`)
lxc.cgroup2.devices.allow: c 29:0 rwm # Framebuffer
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file

[!NOTE]

  • lxc.cgroup2.devices.allow: c 226:0 rwm - 允许容器访问主机的 GPU 控制设备。
  • lxc.cgroup2.devices.allow: c 226:128 rwm - 允许容器访问主机的 GPU 渲染设备。
  • lxc.cgroup2.devices.allow: c 29:0 rwm - 允许容器访问主机的帧缓冲设备。
  • lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir - 挂载主机的 GPU 目录 /dev/dri 到容器。
  • lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file - 挂载主机的帧缓冲设备 /dev/fb0 到容器。
1
chmod -R 777 /dev/dri/* # 所有用户 读写执行权限 

On LXC

1
2
3
4
5
6
7
8
9
10
11
12
13
sudo usermod -aG video replica  # add user to group
sudo usermod -aG input replica
sudo usermod -aG render replica

# run emby docker and pass device
docker run -d --name=emby --restart=always \
-v /home/replica/emby/config:/config \
-v /mnt/usb:/mnt/usb \
-v /mnt/sata:/mnt/sata \
-p 8096:8096 -p 8920:8920 \
-e UID=1000 -e GID=100 -e GIDLIST=100 \
--device /dev/dri:/dev/dri \ # passthrough to docker
xinjiawei1/emby_unlockd:stable