******* Wine 9.0.1 *******
Prefijos de Wine de 32 Bits y 64 Bits separados
# Paso 01 - Eliminar el prefijo predeterminado (No uses esto si tienes cosas alli)
# Paso 02 - Crear nuevas carpetas de Prefijo :
Code: Select all
mkdir -p "$HOME/.wine32Bits"
mkdir -p "$HOME/.wine64Bits"
# Paso 03 - Bloquear el uso de "$HOME/.wine"
Code: Select all
touch "$HOME/.wine"
chmod 000 "$HOME/.wine"
sudo chattr +i "$HOME/.wine"
========================================================================================================================
# Paso Opcional -> En mi caso Compile Wine-9.0.1 usando el Slackbuild. Ya que mi PC es Anterior al 2010
# Y modificando el archivo de compilacion para crear un wine optimizado para mi hardware.
# Esto requiere tener instalada y activa la compatibilidad con 32 Bits -> multilib / compat32
# Puedo copiar desde el siguiente cat hasta el EOF despues de la linea fi
# y pegar directamente en una terminal para crear el guion rapidamente.
Code: Select all
cat << 'EOF' | tee ~/instalar_wine_optimizado.sh
#!/bin/bash
# Bitácora de compilación Wine 9.0.1 para Athlon 64 X2
# Fecha: 25-01-2026
# 1. Preparar directorio
cd /tmp/wine
# 2. Modificar el SlackBuild automáticamente con sed
# - Cambia la versión a 9.0.1
# - Inserta las banderas -march=native y -mtune=native en la sección x86_64
sed -i 's/VERSION=${VERSION:-11.0}/VERSION=${VERSION:-9.0.1}/' wine.SlackBuild
sed -i '/x86_64)/,/;;/ s/SLKCFLAGS="-O2"/SLKCFLAGS="-O2 -march=native -mtune=native -fPIC -pipe"/' wine.SlackBuild
# 3. Descargar el código fuente si no existe
if [ ! -f "wine-9.0.1.tar.xz" ]; then
wget https://dl.winehq.org/wine/source/9.0/wine-9.0.1.tar.xz
fi
# 4. Lanzar la compilación (Multilib activado)
# Se usa nice 0 para mantener la usabilidad del sistema
echo "Iniciando compilación... Esto tardará varias horas."
MULTILIB=yes ./wine.SlackBuild
# 5. Instalación (Requiere root)
if [ -f "/tmp/wine-9.0.1-x86_64-1_SBo.tgz" ]; then
echo "Compilación exitosa. Para instalar, ejecuta: su -c 'upgradepkg --install-new /tmp/wine-9.0.1-x86_64-1_SBo.tgz'"
else
echo "Error: El paquete no se generó."
fi
EOF
chmod +x ~/instalar_wine_optimizado.sh
sudo ~/instalar_wine_optimizado.sh
# Luego de que se compile e instale el wine optimizado para mi sistema. Renombro el archivo /usr/bin/wine como /usr/bin/wine32
# Finalmente creo un guion personalizado:
Code: Select all
cat << 'EOF' | sudo tee /usr/bin/wine
#!/usr/bin/env bash
#===============================================================================================#
# #
# Guión : wine-auto #
# #
# Descripcion : Reemplazo Global de Sistema (/usr/bin/wine) #
# #
# Objetivo : Al usar este guion. debe detectar si el programa que se quiere #
# Ejecutar, es de 32 Bits o 64 Bits en base a eso. #
# #
# En caso de que no exista crear un prefijo (sub-carpeta) #
# En base a la arquitectura respectivamente : #
# "~/.wine32Bits" -> Para los programas de 32 Bits #
# "~/.wine64Bits" -> Para los programas de 64 Bits #
# #
# Recomendacion : Si no tienes nada importante dentro de "~/.wine" #
# Borra la carpeta completa y luego utiliza los comandos #
# para impedir la creacion de la carpeta : #
# #
# touch "$HOME/.wine" # Crea un archivo vacio #
# chmod 000 "$HOME/.wine" # Quitarle cualquier permiso #
# sudo chattr +i "$HOME/.wine" # Asignar inmutabilidad #
# #
# De esta manera ningun usuario ni programa podra hacerle ningun #
# cambio ni por error a "$HOME/.wine" #
# #
#===============================================================================================#
# 0. Control de seguridad para el usuario ROOT
FORZAR_EJECUCION=false
for arg in "$@"; do
if [ "$arg" == "--no-me-importan-las-consecuencias" ]; then
FORZAR_EJECUCION=true
break
fi
done
if [ "$EUID" -eq 0 ] && [ -z "$SUDO_USER" ] && [ "$FORZAR_EJECUCION" = false ]; then
echo "---------------------------------------------------------------------"
echo "ERROR DE SEGURIDAD:"
echo "Se detiene la ejecución de este guion. Es muy peligroso ejecutar"
echo "aplicaciones mediante Wine con permisos de superusuario real."
echo ""
echo "Si aun así quieres intentarlo, usa el parámetro:"
echo "--no-me-importan-las-consecuencias"
echo "---------------------------------------------------------------------"
exit 1
fi
# 1. Identificación de Identidad
USUARIO_REAL=${SUDO_USER:-$USER}
CASA_REAL=$(getent passwd "$USUARIO_REAL" | cut -d: -f6)
# 2. Optimizaciones de Sistema (Solo si se detecta elevación)
if [ "$EUID" -eq 0 ]; then
GOBERNADOR_ORIGINAL=$(cpufreq-info -p | awk '{print $3}' 2>/dev/null)
/usr/bin/sync
echo 3 > /proc/sys/vm/drop_caches
/usr/bin/cpufreq-set -g ondemand 2>/dev/null
fi
# 3. Variables de Entorno de Audio y Depuración
export WINEDEBUG=-all
export WINED3D_AUDIO=alsa
export WINE_AUDIO=alsa
export ALSA_PCM_CARD=0
export ALSA_CTL_CARD=0
# 4. Detección de Arquitectura y Selección de Binario
BINARIO_WINE="/usr/bin/wine32" # Por defecto
if [ -f "$1" ]; then
INFO_ARQ=$(file -b "$(readlink -f "$1")")
if [[ "$INFO_ARQ" == *"PE32+"* ]]; then
echo "Arquitectura: 64 Bits detectada."
export WINEPREFIX="$CASA_REAL/.wine64Bits"
unset WINEARCH
BINARIO_WINE="/usr/bin/wine64"
else
echo "Arquitectura: 32 Bits detectada."
export WINEPREFIX="$CASA_REAL/.wine32Bits"
export WINEARCH=win32
BINARIO_WINE="/usr/bin/wine32"
fi
else
# Por defecto para herramientas internas (winecfg, etc)
export WINEPREFIX="$CASA_REAL/.wine32Bits"
export WINEARCH=win32
fi
# Asegurar existencia del prefijo con permisos del usuario real
if [ ! -d "$WINEPREFIX" ]; then
mkdir -p "$WINEPREFIX"
chown "$USUARIO_REAL":"$(id -gn "$USUARIO_REAL")" "$WINEPREFIX"
fi
# 5. Ejecución con gestión de privilegios
# Limpiar el argumento de fuerza para no pasárselo a la aplicación Windows
PARAMETROS_LIMPIOS=()
for arg in "$@"; do
[[ "$arg" != "--no-me-importan-las-consecuencias" ]] && PARAMETROS_LIMPIOS+=("$arg")
done
if [ "$EUID" -eq 0 ]; then
# Lanzamiento con prioridad alta bajando al usuario real
sudo -u "$USUARIO_REAL" env \
HOME="$CASA_REAL" \
WINEPREFIX="$WINEPREFIX" \
WINEDEBUG=-all \
WINED3D_AUDIO=alsa \
WINE_AUDIO=alsa \
ALSA_PCM_CARD=0 \
ALSA_CTL_CARD=0 \
WINEDLLOVERRIDES="dsound=b,n;xaudio2_7=b,n" \
/usr/bin/nice -n -15 \
taskset -c 0,1 \
"$BINARIO_WINE" "${PARAMETROS_LIMPIOS[@]}"
else
# Ejecución normal de usuario
env \
HOME="$CASA_REAL" \
WINEPREFIX="$WINEPREFIX" \
WINEDEBUG=-all \
WINED3D_AUDIO=alsa \
WINE_AUDIO=alsa \
ALSA_PCM_CARD=0 \
ALSA_CTL_CARD=0 \
WINEDLLOVERRIDES="dsound=b,n;xaudio2_7=b,n" \
taskset -c 0,1 \
"$BINARIO_WINE" "${PARAMETROS_LIMPIOS[@]}"
fi
# 6. Restauración y Limpieza
if [ "$EUID" -eq 0 ] && [ -n "$GOBERNADOR_ORIGINAL" ]; then
/usr/bin/cpufreq-set -g "$GOBERNADOR_ORIGINAL" 2>/dev/null
fi
exit 0
EOF
# Asignar permisos de ejecución
sudo chmod +x /usr/bin/wine
# Creo un archivo para optimizar el uso de mi tarjeta de video :
Code: Select all
# Definir las optimizaciones de registro
cat << 'EOF' > /tmp/optimizar_wine.reg
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Wine\Direct3D]
"DirectDrawRenderer"="opengl"
"MaxShaderModelVS"=hex(3):35,00,00,00
"MaxShaderModelPS"=hex(3):35,00,00,00
"VideoMemorySize"="1024"
"OffscreenRenderingMode"="fbo"
"StrictDrawOrdering"="disabled"
"CSMT"="enabled"
[HKEY_CURRENT_USER\Software\Wine\X11 Driver]
"UseTakeFocus"="N"
"UseXRandR"="N"
"SetGammaRamp"="N"
EOF
# Le indico al sistema que pueble las carpetas para los prefijo por arquitectura.
# Inicializar prefijo de 32 Bits y aplicar registro
Code: Select all
echo "Inicializando prefijo de 32 Bits..."
WINEARCH=win32 wine wineboot --init
wine regedit /tmp/optimizar_wine.reg
# Inicializar prefijo de 64 Bits y aplicar registro
Code: Select all
echo "Inicializando prefijo de 64 Bits..."
unset WINEARCH
wine wineboot --init
wine64 regedit /tmp/optimizar_wine.reg
# Probar por ejemplo la arquitectura de los bloc de notas que trae wine :
Code: Select all
file /usr/lib64/wine/i386-windows/notepad.exe
/usr/lib64/wine/i386-windows/notepad.exe: PE32 executable (GUI) Intel 80386, for MS Windows
La salida devuelve/muestra « PE32 executable (GUI) Intel 80386, for MS Windows » eso quiere decir que es un programa de 32 Bits nativos para Microsoft Windows.
Code: Select all
file /usr/lib64/wine/x86_64-windows/notepad.exe
/usr/lib64/wine/x86_64-windows/notepad.exe: PE32+ executable (GUI) x86-64, for MS Windows
eso quiere decir que es un programa de 64 Bits nativo para Microsoft windows.
Code: Select all
wine /usr/lib64/wine/i386-windows/notepad.exe
Arquitectura: 32 Bits detectada.
Code: Select all
wine /usr/lib64/wine/x86_64-windows/notepad.exe
Arquitectura: 64 Bits detectada.
Listo, ya mi guion personalizado para que Wine detecte si es un programa de 32 Bits o de 64 Bits funciona como espero.