mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-03-04 00:01:36 +01:00
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user