Server Version#: 1.32.3.7162
Player Version#: Any
Hi I just purchased my Plex Pass subscrition in order to use HW transcoding on my PMS which is installed in a docker container on Ubuntu 22.04.2 host on a PC with Intel N100 processor.
I have followed the following guide in order to enable HW transcoding:
The thing is that when trying to check if Quicksync recognises my GPU I get the following (all the commands below where executed in the host):
ubuntu@pms:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.2 LTS
Release: 22.04
Codename: jammy
ubuntu@pms:~$ uname -r
5.15.0-73-generic
ubuntu@pms:~$ sudo lspci -v -s $(lspci | grep VGA | cut -d" " -f 1)
00:02.0 VGA compatible controller: Intel Corporation Device 46d1 (prog-if 00 [VGA controller])
DeviceName: Onboard - Video
Subsystem: Intel Corporation Device 7270
Flags: bus master, fast devsel, latency 0, IRQ 255
Memory at 6000000000 (64-bit, non-prefetchable) [size=16M]
Memory at 4000000000 (64-bit, prefetchable) [size=256M]
I/O ports at 4000 [size=64]
Expansion ROM at 000c0000 [virtual] [disabled] [size=128K]
Capabilities: [40] Vendor Specific Information: Len=0c <?>
Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
Capabilities: [ac] MSI: Enable- Count=1/1 Maskable+ 64bit-
Capabilities: [d0] Power Management version 2
Capabilities: [100] Process Address Space ID (PASID)
Capabilities: [200] Address Translation Service (ATS)
Capabilities: [300] Page Request Interface (PRI)
Capabilities: [320] Single Root I/O Virtualization (SR-IOV)
When as per the guide I should get:
Kernel driver in use: i915
And the path /dev/dri which I should pass to teh container does not exist:
ubuntu@pms:~$ ls /dev/dri
ls: cannot access '/dev/dri': No such file or directory
So I assume that the kernel is not recognizing my GPU. Do I need to do anything else? Install any driver whatsoever?
Thanks in advance for your help, as I cannot find more infromation in the official guide.
What is the output of running the following terminal command on the host (not Docker)?
sudo dmesg | grep -i i915
This should show the status of the moduleās loading progress.
Empty:
ubuntu@pms:~$ sudo dmesg | grep -i i915
ubuntu@pms:~$
And what about sudo modprobe i915 (followed by the above command)?
What does sudo lshw -C Display show?
[chuck@lizum ~.2002]$ sudo lshw -C Display
*-display
description: VGA compatible controller
product: Polaris 22 XT [Radeon RX Vega M GH]
vendor: Advanced Micro Devices, Inc. [AMD/ATI]
physical id: 0
bus info: pci@0000:01:00.0
logical name: /dev/fb0
version: c0
width: 64 bits
clock: 33MHz
capabilities: pm pciexpress msi vga_controller bus_master cap_list rom fb
configuration: depth=32 driver=amdgpu latency=0 mode=3840x2160 visual=truecolor xres=3840 yres=2160
resources: iomemory:200-1ff iomemory:210-20f irq:191 memory:2000000000-20ffffffff memory:2100000000-21001fffff ioport:e000(size=256) memory:db500000-db53ffff memory:c0000-dffff
*-display
description: Display controller
product: HD Graphics 630
vendor: Intel Corporation
physical id: 2
bus info: pci@0000:00:02.0
version: 04
width: 64 bits
clock: 33MHz
capabilities: pciexpress msi pm bus_master cap_list
configuration: driver=i915 latency=0
resources: iomemory:2f0-2ef iomemory:2f0-2ef irq:188 memory:2ffe000000-2ffeffffff memory:2fa0000000-2fafffffff ioport:f000(size=64)
[chuck@lizum ~.2003]$
ubuntu@pms:~$ sudo modprobe i915
ubuntu@pms:~$ sudo dmesg | grep -i i915
ubuntu@pms:~$
(empty response in both cases)
ubuntu@pms:~$ sudo lshw -C Display
*-display UNCLAIMED
description: VGA compatible controller
product: Intel Corporation
vendor: Intel Corporation
physical id: 2
bus info: pci@0000:00:02.0
version: 00
width: 64 bits
clock: 33MHz
capabilities: pciexpress msi pm vga_controller bus_master cap_list
configuration: latency=0
resources: iomemory:600-5ff iomemory:400-3ff memory:6000000000-6000ffffff memory:4000000000-400fffffff ioport:4000(size=64) memory:c0000-dffff memory:4010000000-4016ffffff memory:4020000000-40ffffffff
*-graphics
product: EFI VGA
physical id: 4
logical name: /dev/fb0
capabilities: fb
configuration: depth=32 resolution=3840,2160
There was incomplete support for some processor graphics (11th gen and later) in the 5.15.x kernels included in 22.04. Some (most) of that has been resolved by 5.19.x, which is included in the hardware enablement package. It can be installed via:
sudo apt update && sudo apt install --install-recommends linux-generic-hwe-22.04
As always, backups are the order of the day.
To add to @pshanew
When you have upgraded to 5.19 kernel (HardWare Enablement ā hwe), you should see something like this.
[chuck@lizum ~.2002]$ sudo lshw -C Display
*-display
description: VGA compatible controller
product: Polaris 22 XT [Radeon RX Vega M GH]
vendor: Advanced Micro Devices, Inc. [AMD/ATI]
physical id: 0
bus info: pci@0000:01:00.0
logical name: /dev/fb0
version: c0
width: 64 bits
clock: 33MHz
capabilities: pm pciexpress msi vga_controller bus_master cap_list rom fb
configuration: depth=32 driver=amdgpu latency=0 mode=3840x2160 visual=truecolor xres=3840 yres=2160
resources: iomemory:200-1ff iomemory:210-20f irq:191 memory:2000000000-20ffffffff memory:2100000000-21001fffff ioport:e000(size=256) memory:db500000-db53ffff memory:c0000-dffff
*-display
description: Display controller
product: HD Graphics 630
vendor: Intel Corporation
physical id: 2
bus info: pci@0000:00:02.0
version: 04
width: 64 bits
clock: 33MHz
capabilities: pciexpress msi pm bus_master cap_list
configuration: driver=i915 latency=0
resources: iomemory:2f0-2ef iomemory:2f0-2ef irq:188 memory:2ffe000000-2ffeffffff memory:2fa0000000-2fafffffff ioport:f000(size=64)
[chuck@lizum ~.2003]$
That seemed to work:
ubuntu@pms:~$ sudo lshw -C Display
*-display
description: VGA compatible controller
product: Intel Corporation
vendor: Intel Corporation
physical id: 2
bus info: pci@0000:00:02.0
logical name: /dev/fb0
version: 00
width: 64 bits
clock: 33MHz
capabilities: pciexpress msi pm vga_controller bus_master cap_list rom fb
configuration: depth=32 driver=i915 latency=0 mode=3840x2160 resolution=3840,2160 visual=truecolor xres=3840 yres=2160
resources: iomemory:600-5ff iomemory:400-3ff irq:132 memory:6000000000-6000ffffff memory:4000000000-400fffffff ioport:4000(size=64) memory:c0000-dffff memory:4010000000-4016ffffff memory:4020000000-40ffffffff
It seem to work as the following path which I should pass to the docker container now exists:
ubuntu@pms:~$ ls /dev/dri
by-path card0 renderD128
But I tried to check if Plex was doing HW transconding but it is not as you can see in the following screenshot:

Anything else I should do?
Settings - Server - Transcoder - Show Advanced.
Enable all the transcoding options (the most important one is OFF by default)
You ARE using VOBSUB subtitles.
You wonāt get full HW transcoding.
Image based subtitles (VOBSUB, DVDRIP, PGS) require the CPU to burn in.
HW is suppressed.
I have all the advanced settings enabled except:
āDisable video stream transcodingā
Just FYI the field " Transcoder temporary directory" is empty. Do I need to put anything there?
I tried with another video file and I do not see (hw) in any of the streams:

This are two known good files.
Basic H.264 bt709. To force transcoding, set the playback quality to anything under 80 Mbps.
It is 2160p UHD.
Audio is nice and simple.
No subtitles.
Place it in an āother videosā section.
Itās late here (US EDT), but Iāll try to provide some additional suggestions tomorrow. In the interim, Iād suggest that you ensure that your /dev/dri directory is being passed through to your container successfully, and that correct permissions are applied (the user you configured for the container is a member of the group owner of /dev/dri/card0 and /dev/dri/renderD128. It might also be helpful if you could provide server logs with debug logging enabled (not verbose).
Sorry guys I had a typo in my docker compose file and the /dev/dri directory was not passed correctly.
Now it is working like a charm. Thanks a lot for your help!
little birdie whistling 
Iām not harping but this is why the native app is easier ā Fewer things to mess up because the native package does it all for you. I put a lot of time/effort into making the native installer intelligent and handle everything we (us and the community) could think of.
The runtime user is easily changed too (standard systemd override)
Docker is great when there is no native package for a distro (what itās intent is)
but when you can ā āGo Nativeā 

Yes, I agree that the native app would be much easier in most cases, but the thing is that I am hosting many other applications in the same PC that I want to avoid messing with each other (*arr apps, home assistant, reverse proxy, etc.) that is why docker in this case is not better, but it is the only way to go 
Thanks for your comment!