Just in case anyone needs help getting Intel Coffeelake Plex hardware transcoding in a unprivileged Debian 12 LXC, here are my steps. I struggled a bit following various tutorials because my gid mapping was different, and most also map uid when only gid is needed.
On the Proxmox VE host, I have a /dev/dri that looks like:
And lspci shows I have an Intel Coffeelake:
The renderD128 device is all that is needed by Plex. It is owned by group render on the host, and this is group ID 104:
Now I setup a unprivileged Debian 12 LXC container with Plex. We need to push the render group from the host to the container. However, in my container, the render group does not have ID 104, but instead 106:
So we need to map group ID 104 on the host to group ID 106 in the container. First let's add plex to the render group in the container. The plex user is added when installing Plex via the package. In the container:
Next, add to these lines to the container config on the host:
The u is still added here but we aren't doing any different mapping. It seems to be required. The 65429 number comes from (65535-107+1). Next, add a line to /etc/subgid on the host:
Reboot the container, and Plex hardware transcoding should work (how to check). If it doesn't work, you can look for errors in /var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Logs/Plex Media Server.log. Good luck!
On the Proxmox VE host, I have a /dev/dri that looks like:
Bash:
root@pve:~# ls -l /dev/dri
total 0
drwxr-xr-x 2 root root 80 Aug 21 14:07 by-path
crw-rw---- 1 root video 226, 0 Aug 21 14:07 card0
crw-rw---- 1 root render 226, 128 Aug 21 14:07 renderD128
And lspci shows I have an Intel Coffeelake:
Bash:
root@pve:~# lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation CoffeeLake-S GT2 [UHD Graphics 630]
The renderD128 device is all that is needed by Plex. It is owned by group render on the host, and this is group ID 104:
Bash:
root@pve:~# grep render /etc/group
render:x:104:
Now I setup a unprivileged Debian 12 LXC container with Plex. We need to push the render group from the host to the container. However, in my container, the render group does not have ID 104, but instead 106:
Bash:
root@container:~# grep render /etc/group
render:x:106:
So we need to map group ID 104 on the host to group ID 106 in the container. First let's add plex to the render group in the container. The plex user is added when installing Plex via the package. In the container:
Bash:
root@container:~# groupmod -a -U plex render
root@container:~# grep render /etc/group
render:x:106:plex
Next, add to these lines to the container config on the host:
Bash:
root@pve:/etc/pve/lxc# tail -6 101.conf
lxc.cgroup.devices.allow: c 226:* rwm
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
lxc.idmap: u 0 100000 65536
lxc.idmap: g 0 100000 106
lxc.idmap: g 106 104 1
lxc.idmap: g 107 100107 65429
The u is still added here but we aren't doing any different mapping. It seems to be required. The 65429 number comes from (65535-107+1). Next, add a line to /etc/subgid on the host:
Code:
root@pve:/etc/pve/lxc# tail -1 /etc/subgid
root:104:1
Reboot the container, and Plex hardware transcoding should work (how to check). If it doesn't work, you can look for errors in /var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Logs/Plex Media Server.log. Good luck!