mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-06-02 13:54:05 +02: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
|
# DO NOT use set -e here — we want graceful degradation
|
||||||
|
|
||||||
RENDER_GID=104
|
|
||||||
JELLYFIN_USER=abc
|
JELLYFIN_USER=abc
|
||||||
GROUP_NAME=""
|
|
||||||
|
|
||||||
log() {
|
log() {
|
||||||
echo "[render-fix] $*"
|
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
|
# Ensure user exists
|
||||||
if ! id "$JELLYFIN_USER" >/dev/null 2>&1; then
|
if ! id "$JELLYFIN_USER" >/dev/null 2>&1; then
|
||||||
log "User $JELLYFIN_USER not found — skipping"
|
log "User $JELLYFIN_USER not found — skipping"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check if already member
|
# Ensure render devices are accessible by detecting actual device GID
|
||||||
if id "$JELLYFIN_USER" | grep -qw "$GROUP_NAME"; then
|
if [ -d /dev/dri ]; then
|
||||||
log "User $JELLYFIN_USER already in group $GROUP_NAME"
|
# Make all render devices world-accessible
|
||||||
exit 0
|
for dev in /dev/dri/renderD*; do
|
||||||
fi
|
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"
|
# Detect the actual GID of the render device
|
||||||
if ! usermod -aG "$GROUP_NAME" "$JELLYFIN_USER" 2>/dev/null; then
|
RENDER_GID="$(stat -c '%g' /dev/dri/renderD128 2>/dev/null || true)"
|
||||||
log "usermod failed — probably read-only user or already applied"
|
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
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user