Server Version#: 1.19.3.2793
Tuner Make/Model: TV Butler USB
Container Image: plexinc/pms-docker:plexpass
Hello all,
Wondering if anyone can help; I’ve just plugged in a TV Butler USB stick into my Plex server, running in a Docker container (plexinc/pms-docker:plexpass), and it is detected OK, but it doesn’t seem to be able to pick up any channels - I do have it plugged into the main house antenna, which works fine for my TV.
The Plex debug log shows this when channel scanning is complete:
May 13, 2020 15:40:11.333 [0x7f49f37fe700] Debug — Grabber: Channel scan finished with 0 channels.
May 13, 2020 15:40:11.333 [0x7f49f37fe700] Debug — HTTP requesting GET http://127.0.0.1:32600/devices/dvb%23tvbutler%230%231%3a3/channels
May 13, 2020 15:40:11.334 [0x7f49f37fe700] Debug — HTTP 200 response from GET http://127.0.0.1:32600/devices/dvb%23tvbutler%230%231%3a3/channels
May 13, 2020 15:40:11.335 [0x7f49f37fe700] Debug — Activity: Ended activity 6839586c-99f0-47ff-975f-afc41c41acb1.
May 13, 2020 15:40:11.746 [0x7f4a10d0d700] Debug — Auth: authenticated user 1 as redacted@redacted.com
May 13, 2020 15:40:11.746 [0x7f49b2ffd700] Debug — Request: [192.168.0.63:61299 (Subnet)] GET /media/grabbers/devices/2/channels (12 live) TLS GZIP Signed-in Token (redacted@redacted.com)
May 13, 2020 15:40:11.749 [0x7f4a1150e700] Debug — Completed: [192.168.0.63:61299] 200 GET /media/grabbers/devices/2/channels (12 live) TLS GZIP 2ms 476 bytes (pipelined: 1)
Can anyone point me in the right direction to get it working?
Cheers,
Ant.
This USB stick works perfectly in the TVMosaic (dvblogic/tvmosaic:latest) container, same method of device passthru. C’mon Plex folks, what’s going on? This is supposed to be a SUPPORTED tuner!
For the sake of other folks running into the same problem, I’ll post the solution here.
Create a file on your Docker host in /lib/udev/rules.d/ called 60-tvbutler-perms.rules
Using your favorite text editor, edit the file, and paste this as the contents:
SUBSYSTEM=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="0100", MODE="0666"
Now, run the following commands on your Docker host:
sudo udevadm control --reload-rules
sudo service udev restart
sudo udevadm trigger
Finally, restart your Plex container, and you should now be able to find channels.
Hope that helps somebody!
Adding some additional details for anyone else finding this thread - I had the same problem with a Hauppage WinTV-quadHD. Plex was running in Docker on Ubuntu LTS. After an upgrade (possibly of Plex, possibly of Ubuntu - I don’t have the exact failure date and don’t know which is the culprit), Plex began reporting “Error 5000” when attempting to tune the DVR. Removing and re-creating the DVR failed - Plex could not find the tuners when re-creating the DVR. Checking on the host system confirmed that the DVR was installed and that the kernel had drivers loaded.
It turned out to be a permissions error - the /dev/dvb devices were set to mode 0660 and were owned by root:video. When running inside of Docker, the Plex UID/GID did not map to the host GID for the video group, meaning that Plex had no permissions to access the tuner.
Following the notes from @Shufter and the Writing udev Rules guide, I wrote a udev rule to make the host system set the device permissions to 0666, giving all users on the system permission to access the tuner. I put this in /lib/udev/rules.d/99-local.rules:
# Expose tuners to Plex to non-root users can use them
SUBSYSTEM=="dvb", MODE="0666"
If you find these forum posts and are adapting them to your own problem, a couple of notes:
- If you have users on your system who should not be able to control the tuner, setting permissions to
0666 is obviously a bad idea! This worked for my use case, use your own judgement when applying this to your problem.
- If you have a different model of tuner, you will need to adjust the
udev rules to match your device. See the linked guide above for a discussion of how to do this.
It should also be theoretically possible to make sure that the Plex user inside of the Docker container maps to the video group on the host - if you can do that, you shouldn’t need to add a udev rule changing permissions. However, I didn’t investigate solving the problem that way.