Merge pull request #2543 from alexbelgium/copilot/fix-jellyfin-video-playback

Fix Jellyfin render device permissions for non-root PUID/PGID
This commit is contained in:
Alexandre
2026-02-26 21:57:28 +01:00
committed by GitHub

View File

@@ -3,40 +3,65 @@
# DO NOT use set -e here — we want graceful degradation
RENDER_GID=104
JELLYFIN_USER=abc
GROUP_NAME=""
log() {
echo "[render-fix] $*"
}
# Find group owning GID 104
GROUP_NAME="$(getent group "$RENDER_GID" | cut -d: -f1 || true)"
if [ -z "$GROUP_NAME" ]; then
GROUP_NAME="render104"
log "Creating group $GROUP_NAME with GID $RENDER_GID"
if ! groupadd -g "$RENDER_GID" "$GROUP_NAME" 2>/dev/null; then
log "Group creation failed (probably already exists). Continuing."
fi
else
log "Group with GID $RENDER_GID already exists: $GROUP_NAME"
fi
# Ensure user exists
if ! id "$JELLYFIN_USER" >/dev/null 2>&1; then
log "User $JELLYFIN_USER not found — skipping"
exit 0
fi
# Check if already member
if id "$JELLYFIN_USER" | grep -qw "$GROUP_NAME"; then
log "User $JELLYFIN_USER already in group $GROUP_NAME"
exit 0
fi
# Ensure render devices are accessible by detecting actual device GID
if [ -d /dev/dri ]; then
# Make all render devices world-accessible
for dev in /dev/dri/renderD*; do
if [ -e "$dev" ]; then
log "Setting permissions on $dev"
chmod 666 "$dev" 2>/dev/null || log "chmod failed on $dev"
fi
done
log "Adding user $JELLYFIN_USER to group $GROUP_NAME"
if ! usermod -aG "$GROUP_NAME" "$JELLYFIN_USER" 2>/dev/null; then
log "usermod failed — probably read-only user or already applied"
# Detect the actual GID of the render device
RENDER_GID="$(stat -c '%g' /dev/dri/renderD128 2>/dev/null || true)"
if [ -z "$RENDER_GID" ]; then
# Fallback: try any render device
for dev in /dev/dri/renderD*; do
if [ -e "$dev" ]; then
RENDER_GID="$(stat -c '%g' "$dev" 2>/dev/null || true)"
break
fi
done
fi
# Fallback to common render GID if no device found
if [ -z "$RENDER_GID" ]; then
RENDER_GID=104
fi
GROUP_NAME="$(getent group "$RENDER_GID" | cut -d: -f1 || true)"
if [ -z "$GROUP_NAME" ]; then
GROUP_NAME="render${RENDER_GID}"
log "Creating group $GROUP_NAME with GID $RENDER_GID"
if ! groupadd -g "$RENDER_GID" "$GROUP_NAME" 2>/dev/null; then
log "Group creation failed (probably already exists). Continuing."
fi
else
log "Group with GID $RENDER_GID already exists: $GROUP_NAME"
fi
# Add user to render group if not already a member
if id "$JELLYFIN_USER" | grep -qw "$GROUP_NAME"; then
log "User $JELLYFIN_USER already in group $GROUP_NAME"
else
log "Adding user $JELLYFIN_USER to group $GROUP_NAME"
if ! usermod -aG "$GROUP_NAME" "$JELLYFIN_USER" 2>/dev/null; then
log "usermod failed — probably read-only user or already applied"
fi
fi
else
log "No /dev/dri directory found — skipping render device setup"
fi