Files
scripts_mg/omarchy_zsh_setup/davince_resolve_intel.sh
Marco Gallegos 1380f6fe6b Add installation script for DaVinci Resolve Intel Edition
This script installs DaVinci Resolve (Intel Edition) on Arch/Omarchy, ensuring compatibility with Intel iGPU and configuring necessary dependencies.
2025-11-06 12:53:33 -06:00

229 lines
7.9 KiB
Bash

#!/usr/bin/env bash
# ===============================================================
# davinci_resolve_intel.sh
# ---------------------------------------------------------------
# Instalador de DaVinci Resolve (Intel Edition) para Arch / Omarchy
# (Wayland / Hyprland friendly, solo Intel iGPU)
#
# - Usa la versión oficial de DaVinci Resolve Linux ZIP.
# - Si no encuentra el ZIP en ~/Downloads, te recuerda ir a la web de Blackmagic.
# - Instala y configura el runtime OpenCL de Intel, VA-API, y dependencias.
# - Reemplaza las librerías glib/gio/gmodule con las del sistema para evitar conflictos.
# - Ajusta RPATH con patchelf.
# - Copia Resolve a /opt/resolve y crea un wrapper + acceso en el menú de aplicaciones.
# ===============================================================
set -euo pipefail
log() { echo -e "$*"; }
# ---------------- Comprobar que el ZIP está en Downloads ----------------
ZIP_DIR="${HOME}/Downloads"
RESOLVE_ZIP="$(ls -1t "${ZIP_DIR}"/DaVinci_Resolve*_Linux.zip 2>/dev/null | head -n1 || true)"
if [[ -z "${RESOLVE_ZIP}" ]]; then
echo "❌ No se encontró ningún ZIP de DaVinci Resolve en ${ZIP_DIR}."
echo " Ve al sitio de descargas de Blackmagic Design para obtener la versión 20.2.1 (u otra):"
echo " https://www.blackmagicdesign.com/support/"
echo " Luego descarga el archivo Linux ZIP y colócalo en ${ZIP_DIR} antes de volver a ejecutar este script."
exit 1
fi
log "Usando ZIP: ${RESOLVE_ZIP}"
# ---------------- Instalación de paquetes básicos ----------------
log "Instalando paquetes básicos..."
sudo pacman -Syu --noconfirm
sudo pacman -S --needed --noconfirm \
unzip patchelf libarchive xdg-user-dirs desktop-file-utils \
file gtk-update-icon-cache rsync clinfo qt5-base qt5-svg qt5-x11extras \
libpng libtiff libcurl || true
# ---------------- Configurar OpenCL / Intel GPU ----------------
log "Configurando runtime OpenCL de Intel y drivers de video..."
# Eliminar posibles paquetes NVIDIA conflictivos
if pacman -Qi nvidia &>/dev/null; then
log "Quitando paquetes NVIDIA para evitar conflictos..."
sudo pacman -Rns --noconfirm nvidia nvidia-utils nvidia-settings opencl-nvidia || true
fi
# Instalar headers del kernel si son necesarios
KVER="$(uname -r)"
if [[ ! -d "/usr/lib/modules/${KVER}/build" ]]; then
log "Instalando headers de kernel..."
sudo pacman -S --needed --noconfirm linux-headers linux-zen-headers || true
fi
# Instalar runtime OpenCL (compute runtime), desde AUR si es necesario
if ! pacman -Qi intel-compute-runtime &>/dev/null; then
log "Instalando intel-compute-runtime (puede venir del AUR)..."
if command -v yay &>/dev/null; then
yay -S --noconfirm intel-compute-runtime
else
# Intentar desde pacman; si no existe, informar
if ! sudo pacman -S --needed --noconfirm intel-compute-runtime; then
echo "⚠️ No se pudo instalar intel-compute-runtime desde pacman."
echo " Asegúrate de tener un helper AUR como yay o paru"
exit 1
fi
fi
fi
# Instalar otros paquetes Intel / VA-API / OpenCL
sudo pacman -S --needed --noconfirm \
intel-media-driver \
ocl-icd \
libxcrypt-compat \
ffmpeg \
glu \
gtk2 \
fuse2 \
libva-utils libvdpau-va-gl || true
# Asegurar el archivo ICD para OpenCL de Intel
if [[ ! -f /etc/OpenCL/vendors/intel.icd ]]; then
log "Creando vendor file de OpenCL para Intel..."
sudo mkdir -p /etc/OpenCL/vendors
echo "/usr/lib/intel-opencl/libigdrcl.so" | sudo tee /etc/OpenCL/vendors/intel.icd >/dev/null
fi
# Crear enlace /etc/pki/tls si es necesario (para algunos instaladores)
if [[ ! -e /etc/pki/tls ]]; then
log "Creando enlace /etc/pki/tls → /etc/ssl"
sudo mkdir -p /etc/pki
sudo ln -sf /etc/ssl /etc/pki/tls
fi
sudo ldconfig || true
# ---------------- Verificaciones ----------------
log "Verificando OpenCL instalado..."
clinfo | grep -E "Platform Name|Device Name" || true
log "Verificando soporte de decodificación VA-API para H264 / HEVC..."
vainfo | grep -E "H264|HEVC" || true
# ---------------- Extraer DaVinci Resolve ----------------
log "Extrayendo DaVinci Resolve del ZIP..."
NEEDED_GB=10
FREE_KB=$(df --output=avail -k "${ZIP_DIR}" | tail -n1)
FREE_GB=$((FREE_KB / 1024 / 1024))
if (( FREE_GB < NEEDED_GB )); then
echo "❌ No hay suficiente espacio libre en ${ZIP_DIR}: ${FREE_GB} GiB < ${NEEDED_GB} GiB"
exit 1
fi
WORKDIR="$(mktemp -d -p "${ZIP_DIR}" .resolve-extract-XXXXXXXX)"
trap 'rm -rf "${WORKDIR}"' EXIT
unzip -q "${RESOLVE_ZIP}" -d "${WORKDIR}"
RUN_FILE="$(find "${WORKDIR}" -maxdepth 2 -type f -name 'DaVinci_Resolve_*_Linux.run' | head -n1 || true)"
if [[ -z "${RUN_FILE}" ]]; then
echo "❌ No se encontró el archivo .run dentro del ZIP."
exit 1
fi
chmod +x "${RUN_FILE}"
EX_DIR="$(dirname "${RUN_FILE}")"
( cd "${EX_DIR}" && "./$(basename "${RUN_FILE}")" --appimage-extract >/dev/null )
APPDIR="${EX_DIR}/squashfs-root"
if [[ ! -d "${APPDIR}" ]]; then
echo "❌ No se extrajo correctamente la carpeta squashfs-root."
exit 1
fi
chmod -R u+rwX,go+rX,go-w "${APPDIR}"
if [[ ! -s "${APPDIR}/bin/resolve" ]]; then
echo "❌ El binario resolve no existe o está vacío."
exit 1
fi
# ---------------- Reemplazar librerías glib/gio/gmodule ----------------
log "Ajustando bibliotecas glib/gio/gmodule para usar las del sistema..."
pushd "${APPDIR}" >/dev/null
rm -f libs/libglib-2.0.so.0 libs/libgio-2.0.so.0 libs/libgmodule-2.0.so.0 || true
ln -sf /usr/lib/libglib-2.0.so.0 libs/libglib-2.0.so.0
ln -sf /usr/lib/libgio-2.0.so.0 libs/libgio-2.0.so.0
ln -sf /usr/lib/libgmodule-2.0.so.0 libs/libgmodule-2.0.so.0
popd >/dev/null
# ---------------- Aplicar RPATH ----------------
log "Aplicando RPATH con patchelf..."
RPATH_DIRS=(
"libs"
"libs/plugins/sqldrivers"
"libs/plugins/xcbglintegrations"
"libs/plugins/imageformats"
"libs/plugins/platforms"
"libs/Fusion"
"plugins"
"bin"
)
RPATH_ABS=""
for p in "${RPATH_DIRS[@]}"; do
RPATH_ABS+="/opt/resolve/${p}:"
done
RPATH_ABS+="\$ORIGIN"
if command -v patchelf &>/dev/null; then
find "${APPDIR}" -type f -exec bash -c '
file -b "$1" | grep -q ELF && sudo patchelf --set-rpath "'"${RPATH_ABS}"'" "$1"
' _ {} \; || true
fi
# ---------------- Instalar en /opt/resolve ----------------
log "Instalando DaVinci Resolve en /opt/resolve..."
sudo rm -rf /opt/resolve
sudo mkdir -p /opt/resolve
sudo rsync -a --delete "${APPDIR}/" /opt/resolve/
sudo mkdir -p /opt/resolve/.license
# Enlazar libcrypt legado si es necesario
sudo pacman -S --needed --noconfirm libxcrypt-compat || true
sudo ldconfig || true
if [[ -e /usr/lib/libcrypt.so.1 ]]; then
sudo ln -sf /usr/lib/libcrypt.so.1 /opt/resolve/libs/libcrypt.so.1
fi
# ---------------- Crear wrapper + acceso en escritorio ----------------
log "Creando wrapper y acceso para DaVinci Resolve..."
cat << 'EOF' | sudo tee /usr/local/bin/resolve-intel >/dev/null
#!/usr/bin/env bash
set -euo pipefail
find /tmp -maxdepth 1 -type f -name "qtsingleapp-DaVinci*lockfile" -delete 2>/dev/null || true
export QT_QPA_PLATFORM=xcb
export QT_AUTO_SCREEN_SCALE_FACTOR=1
export OCL_ICD_VENDORS=/etc/OpenCL/vendors
exec /opt/resolve/bin/resolve "$@"
EOF
sudo chmod +x /usr/local/bin/resolve-intel
mkdir -p "${HOME}/.local/share/applications"
cat > "${HOME}/.local/share/applications/davinci-resolve-wrapper.desktop" << EOF
[Desktop Entry]
Type=Application
Name=DaVinci Resolve (Intel)
Comment=DaVinci Resolve usando OpenCL de Intel
Exec=/usr/local/bin/resolve-intel %U
TryExec=/usr/local/bin/resolve-intel
Terminal=false
Icon=davinci-resolve
Categories=AudioVideo;Video;Graphics;
StartupWMClass=resolve
X-GNOME-UsesNotifications=true
EOF
update-desktop-database "${HOME}/.local/share/applications" >/dev/null 2>&1 || true
sudo gtk-update-icon-cache -f /usr/share/icons/hicolor >/dev/null 2>&1 || true
echo
echo "✅ DaVinci Resolve (Intel Edition) instalado en /opt/resolve."
echo " Usa 'resolve-intel' para lanzar la aplicación."
echo " Si no ves el ZIP correcto, descarga la versión 20.2.1 desde:"
echo " https://www.blackmagicdesign.com/support/"
echo " Para verificar OpenCL / tu GPU: clinfo | grep -E 'Platform Name|Device Name'"
echo