add vaapi check

This commit is contained in:
CanbiZ 2025-07-28 09:01:08 +02:00
parent 2e312c4d2b
commit 3e3dedb35c

View File

@ -1209,54 +1209,61 @@ EOF
fi fi
done done
if ([ "$CT_TYPE" == "0" ] || [ "$is_vaapi_app" == "true" ]) && if [[ "$CT_TYPE" == "0" || "$is_vaapi_app" == "true" ]]; then
([[ -e /dev/dri/renderD128 ]] || [[ -e /dev/dri/card0 ]] || [[ -e /dev/fb0 ]]); then VAAPI_DEVICES=()
for bypath in /dev/dri/by-path/*; do
[[ "$bypath" =~ -card$ || "$bypath" =~ -render$ ]] || continue
target=$(readlink -f "$bypath")
[[ -e "$target" ]] && VAAPI_DEVICES+=("$target")
done
[[ -e /dev/fb0 ]] && VAAPI_DEVICES+=("/dev/fb0")
echo "" if [[ "${#VAAPI_DEVICES[@]}" -eq 0 ]]; then
msg_custom "⚙️ " "\e[96m" "Configuring VAAPI passthrough for LXC container" :
if [ "$CT_TYPE" != "0" ]; then elif [[ "${#VAAPI_DEVICES[@]}" -eq 1 && "$CT_TYPE" == "0" ]]; then
msg_custom "⚠️ " "\e[33m" "Container is unprivileged VAAPI passthrough may not work without additional host configuration (e.g., idmap)." # Privileged + 1 device → silent passthrough
fi device="${VAAPI_DEVICES[0]}"
msg_custom " " "\e[96m" "VAAPI enables GPU hardware acceleration (e.g., for video transcoding in Jellyfin or Plex)." major_minor=$(stat -c '%t:%T' "$device" | awk -F: '{ printf "%d:%d", "0x"$1, "0x"$2 }')
echo "" echo "lxc.cgroup2.devices.allow: c $major_minor rwm" >>"$LXC_CONFIG"
read -rp "➤ Automatically mount all available VAAPI devices? [Y/n]: " VAAPI_ALL echo "lxc.mount.entry: $device $device none bind,optional,create=file" >>"$LXC_CONFIG"
else
# Display info message
whiptail --title "VAAPI passthrough" --msgbox "\
VAAPI passthrough has been enabled for this container.
if [[ "$VAAPI_ALL" =~ ^[Yy]$|^$ ]]; then This allows GPU hardware acceleration (e.g., video transcoding for Jellyfin, Plex, Frigate, etc.).
if [ "$CT_TYPE" == "0" ]; then
# PRV Container → alles zulässig You will now be prompted to select which VAAPI devices should be passed through." 12 72
[[ -e /dev/dri/renderD128 ]] && {
echo "lxc.cgroup2.devices.allow: c 226:128 rwm" >>"$LXC_CONFIG" CHOICES=()
echo "lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file" >>"$LXC_CONFIG" for dev in "${VAAPI_DEVICES[@]}"; do
} desc="$(basename "$dev")"
[[ -e /dev/dri/card0 ]] && { CHOICES+=("$dev" "$desc" "OFF")
echo "lxc.cgroup2.devices.allow: c 226:0 rwm" >>"$LXC_CONFIG" done
echo "lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file" >>"$LXC_CONFIG"
} SELECTED_DEVICES=$(whiptail --title "VAAPI Device Selection" \
[[ -e /dev/fb0 ]] && { --checklist "Select VAAPI device(s) to passthrough:" 20 70 10 \
echo "lxc.cgroup2.devices.allow: c 29:0 rwm" >>"$LXC_CONFIG" "${CHOICES[@]}" 3>&1 1>&2 2>&3)
echo "lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file" >>"$LXC_CONFIG"
} if [[ -n "$SELECTED_DEVICES" ]]; then
[[ -d /dev/dri ]] && { IDX=0
echo "lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir" >>"$LXC_CONFIG" for dev in $SELECTED_DEVICES; do
} dev=$(sed 's/"//g' <<<"$dev")
if [[ "$CT_TYPE" == "0" ]]; then
major_minor=$(stat -c '%t:%T' "$dev" | awk -F: '{ printf "%d:%d", "0x"$1, "0x"$2 }')
echo "lxc.cgroup2.devices.allow: c $major_minor rwm" >>"$LXC_CONFIG"
echo "lxc.mount.entry: $dev $dev none bind,optional,create=file" >>"$LXC_CONFIG"
else
# Unprivileged: use devX: with proper GID
GID=$([[ "$dev" =~ render ]] && echo "104" || echo "44")
echo "dev${IDX}: $dev,gid=${GID}" >>"$LXC_CONFIG"
IDX=$((IDX + 1))
fi
done
else else
# UNPRV Container → nur devX für UI msg_warn "No VAAPI devices selected passthrough skipped."
[[ -e /dev/dri/card0 ]] && echo "dev0: /dev/dri/card0,gid=44" >>"$LXC_CONFIG"
[[ -e /dev/dri/card1 ]] && echo "dev0: /dev/dri/card1,gid=44" >>"$LXC_CONFIG"
[[ -e /dev/dri/renderD128 ]] && echo "dev1: /dev/dri/renderD128,gid=104" >>"$LXC_CONFIG"
fi fi
fi fi
fi
if [ "$CT_TYPE" == "1" ] && [ "$is_vaapi_app" == "true" ]; then
if [[ -e /dev/dri/card0 ]]; then
echo "dev0: /dev/dri/card0,gid=44" >>"$LXC_CONFIG"
elif [[ -e /dev/dri/card1 ]]; then
echo "dev0: /dev/dri/card1,gid=44" >>"$LXC_CONFIG"
fi
if [[ -e /dev/dri/renderD128 ]]; then
echo "dev1: /dev/dri/renderD128,gid=104" >>"$LXC_CONFIG"
fi
fi fi
# TUN device passthrough # TUN device passthrough