jellyfin system usersudo useradd -r -s /usr/sbin/nologin jellyfin
-r creates a system user.-s /usr/sbin/nologin prevents login shell.Important: Note the user UID. On this example, the jellyfin user gets UID 947 (verify with id jellyfin).
sudo mkdir -p /opt/jellyfin/{config,data}
sudo mkdir -p /media/{movies,tv,music} # adjust paths to your actual media
sudo chown -R jellyfin:jellyfin /opt/jellyfin
sudo chown -R jellyfin:jellyfin /media/movies /media/tv /media/music
Also create the jellyfin user's home directory:
sudo mkdir -p /home/jellyfin
sudo chown jellyfin:jellyfin /home/jellyfin
podman pull docker.io/jellyfin/jellyfin:latest
# Ensure /dev/dri exists and has correct permissions
ls -la /dev/dri/
# Add jellyfin user to video group if needed
sudo usermod -aG video jellyfin
# Ensure NVIDIA devices are available
ls -la /dev/nvidia*
# Add jellyfin user to video group
sudo usermod -aG video jellyfin
# Typically /dev/dri is also used, ensure permissions allow jellyfin user
Create /etc/systemd/system/jellyfin.service:
[Unit]
Description=Jellyfin Media Server via Podman
After=network.target
[Service]
Type=simple
# Ensure jellyfin user home directory exists
ExecStartPre=/bin/mkdir -p /home/jellyfin
ExecStartPre=/bin/chown jellyfin:jellyfin /home/jellyfin
# Run the Jellyfin container
ExecStart=-/usr/bin/podman run -d --name=jellyfin --restart=unless-stopped \
-e PUID=947 \
-e PGID=947 \
-e TZ=America/Denver \
-p 8096:8096 \
-p 8920:8920 \
-v /opt/jellyfin/config:/config \
-v /opt/jellyfin/data:/data \
-v /media/movies:/media/movies:ro \
-v /media/tv:/media/tv:ro \
-v /media/music:/media/music:ro \
--device /dev/dri:/dev/dri \
--group-add audio \
--group-add video \
docker.io/jellyfin/jellyfin:latest
ExecStop=-/usr/bin/podman kill jellyfin
[Install]
WantedBy=multi-user.target
Important notes:
PUID=947 and PGID=947 match the jellyfin user UID/GID (verify with id jellyfin)podman run command is on a single line to avoid systemd parsing issuesdocker.io/jellyfin/jellyfin:latest (fully qualified) not just jellyfin/jellyfinsudo systemctl daemon-reload
sudo systemctl enable --now jellyfin.service
If the service fails: The container may fail due to permission issues with the config directory. In that case, start the container manually (see step 7) and then restart the service.
podman run -d --name=jellyfin --restart=unless-stopped \
-e PUID=947 \
-e PGID=947 \
-e TZ=America/Denver \
-p 8096:8096 \
-p 8920:8920 \
-v /opt/jellyfin/config:/config \
-v /opt/jellyfin/data:/data \
-v /media/movies:/media/movies:ro \
-v /media/tv:/media/tv:ro \
-v /media/music:/media/music:ro \
--device /dev/dri:/dev/dri \
--group-add audio \
--group-add video \
docker.io/jellyfin/jellyfin:latest
Open a browser to http://localhost:8096 or http://<your-Nobara-IP>:8096
Complete the initial Jellyfin setup, pointing at the mounted media directories.
podman ps
# Or check service status:
systemctl status jellyfin.service
If you have Intel QuickSync, add -e ENABLE_QUICKSYNC=true to the podman run line. For NVIDIA, add -e NVIDIA_DRIVER_CAPABILITIES=all. These environment variables are optional; the device mounts above are the primary requirement.
systemctl restart jellyfin.service.ss -tlnp | grep 8096)./opt/jellyfin/config has correct ownership: sudo chown -R jellyfin:jellyfin /opt/jellyfin./dev/dri exists and the jellyfin user is in the video group: sudo usermod -aG video jellyfin.