diff --git a/omarchy_zsh_setup/davince_resolve_intel.sh b/omarchy_zsh_setup/davince_resolve_intel.sh new file mode 100644 index 0000000..3d296cc --- /dev/null +++ b/omarchy_zsh_setup/davince_resolve_intel.sh @@ -0,0 +1,228 @@ +#!/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 +