Me instalo el salix-update-notifier
Code: Select all
slapt-get -u
slapt-get -i salix-update-notifierModerator: sivare
Code: Select all
slapt-get -u
slapt-get -i salix-update-notifierCode: Select all
mv /usr/bin/salix-update-manager /usr/bin/salix-update-manager.real
mv /usr/bin/virtualbox /usr/bin/virtualbox.real
mv /usr/bin/teamviewer /usr/bin/teamviewer.realCode: Select all
mkdir -p /usr/local/bin/rc.dCode: Select all
sudo cp /etc/rc.d/rc.vboxdrv /usr/local/bin/rc.d/
sudo cp /etc/rc.d/rc.libvirt /usr/local/bin/rc.d/
sudo cp /etc/rc.d/rc.teamviewerd /usr/local/bin/rc.d/Code: Select all
chmod -x /etc/rc.d/rc.vboxdrv
chmod -x /etc/rc.d/rc.libvirt
chmod -x /etc/rc.d/rc.teamviewerdCode: Select all
chmod +x /usr/local/bin/rc.d/rc.vboxdrv
chmod +x /usr/local/bin/rc.d/rc.libvirt
chmod +x /usr/local/bin/rc.d/rc.teamviewerdCode: Select all
cat << 'EOF' > /usr/bin/salix-update-manager
#!/usr/bin/env bash
# NOTA : Este es un guion para llamar a otro personalizado
# Es por si alguna actualizacion reemplaza este archivo
# se me haga muy facil volver a escribirlo.
# Verificar si existe el guion personalizado
if [ -x /usr/local/bin/salix-update-manager.geb ]; then
/usr/local/bin/salix-update-manager.geb
fi
exit 0
EOF
chmod +x /usr/bin/salix-update-manager
Code: Select all
cat << 'EOF' > /usr/local/bin/salix-update-manager.geb
#!/usr/bin/env bash
# Guion para evitar colisiones del gestor de actualizaciones y verificar descargas
# Establecer la pantalla para que funcione correctamente
export DISPLAY=:0.0
# 1. Verificar si el binario real ya se está ejecutando
if pgrep -f "/usr/bin/salix-update-manager.real" > /dev/null; then
echo "El gestor ya está en ejecución. Abortando."
exit 1
fi
# 2. Lista de procesos que podrían bloquear la base de datos de paquetes
PROCESOS_BLOQUEO=("slapt-get" "slackpkg" "slpkg" "sbopkg")
for proceso in "${PROCESOS_BLOQUEO[@]}"; do
if pgrep "$proceso" > /dev/null; then
echo "El sistema está ocupado por $proceso. Cancelando."
exit 1
fi
done
# 3. Sincronizar la base de datos de paquetes de forma silenciosa
# Esto evita que la interfaz gráfica se quede "diske buscando" horas
sudo /usr/sbin/slapt-get --update > /dev/null 2>&1
# 4. Comprobar si hay paquetes realmente nuevos para instalar
# Usamos la simulación para contar las líneas que indican nuevas versiones
ACTUALIZACIONES=$(/usr/sbin/slapt-get --upgrade --simulate | grep -i "instalar" | wc -l)
if [ "$ACTUALIZACIONES" -gt 0 ]; then
echo "Se encontraron $ACTUALIZACIONES paquetes. Iniciando..."
/usr/bin/salix-update-manager.real
else
echo "No hay actualizaciones disponibles. Cerrando."
fi
exit 0
EOF
chmod +x /usr/local/bin/salix-update-manager.gebCode: Select all
cp /etc/rc.d/rc.vboxdrv /usr/local/bin/rc.d/Code: Select all
cat << 'EOF' > /usr/bin/virtualbox
#!/usr/bin/env bash
# Llamada al guion personalizado .geb
if [ -x /usr/local/bin/virtualbox.geb ]; then
/usr/local/bin/virtualbox.geb
fi
exit 0
EOFCode: Select all
cat << 'EOF' > /usr/local/bin/virtualbox.geb
#!/usr/bin/env bash
# Guion personalizado para gestionar VirtualBox bajo demanda
# 1. Cargar controladores del núcleo
sudo /usr/local/bin/rc.d/rc.vboxdrv start
# 2. Ejecutar la interfaz gráfica real
/usr/lib64/virtualbox/VirtualBox
# 3. Descargar controladores al cerrar para liberar recursos
sudo /usr/local/bin/rc.d/rc.vboxdrv stop
exit 0
EOF
chmod +x /usr/local/bin/virtualbox.geb /usr/bin/virtualboxCode: Select all
sudo su
cd /tmp
# Actualizar los scripts de SlackBuilds
slapt-src -u
# Instalar TeamViewer (esto crea el paquete y lo instala)
slapt-src -i teamviewer
# Descargamos el script de construcción
wget https://slackbuilds.org/slackbuilds/15.0/network/teamviewer.tar.gz
tar -xvf teamviewer.tar.gz
cd teamviewer
# Descargar la versión específica en formato .deb
wget https://download.teamviewer.com/download/linux/teamviewer_amd64.deb
# Renombro el archivo deb
mv teamviewer_amd64.deb teamviewer_15.76.5_amd64.deb
# Para generar el paquete para la arquitectura x86_64 / amd64
wget https://download.teamviewer.com/download/linux/teamviewer_amd64.tar.xz
./teamviewer.SlackBuild
# Instalo el paquete de TeamViewer
installpkg /tmp/teamviewer-15.76.5-x86_64-1_SBo.tgz
# Clono el paquete creado
cp /tmp/teamviewer-15.76.5-x86_64-1_SBo.tgz /root/Code: Select all
cat << 'EOF' > /usr/local/bin/teamviewer.geb
#!/usr/bin/env bash
# Guion para gestionar TeamViewer bajo demanda (Slackware/Salix)
# 1. Evitar múltiples instancias de la interfaz
if pgrep -f "/opt/teamviewer/tv_bin/TeamViewer" > /dev/null; then
exit 0
fi
# 2. Iniciar el demonio usando la ruta autorizada en sudoers
sudo /usr/local/bin/rc.d/rc.teamviewerd start
sleep 2
# 3. Lanzar la interfaz gráfica
/opt/teamviewer/tv_bin/TeamViewer &
PID_TV=$!
# 4. Bucle de espera activa mientras el proceso exista
while pgrep -f "/opt/teamviewer/tv_bin/TeamViewer" > /dev/null; do
sleep 3
done
# 5. Detener el servicio al cerrar (Ruta exacta de sudoers)
echo "Interfaz cerrada. Finalizando servicios..."
sudo /usr/local/bin/rc.d/rc.teamviewerd stop
# 6. Limpieza forzada de seguridad si el proceso teamviewerd persiste
if pgrep -x "teamviewerd" > /dev/null; then
sudo /usr/bin/killall -9 teamviewerd > /dev/null 2>&1
fi
exit 0
EOF
chmod +x /usr/local/bin/teamviewer.gebCode: Select all
sed -i 's|^Exec=.*|Exec=/usr/bin/teamviewer|' /usr/share/applications/TeamViewer.desktop
chmod +x /usr/local/bin/teamviewer.geb /usr/bin/teamviewerCode: Select all
cat << 'EOF' > /usr/local/bin/virt-manager.geb
#!/usr/bin/env bash
# Guion personalizado para servicios de virtualización KVM/Libvirt
# 1. Iniciar demonios y redes virtuales
sudo /etc/rc.d/rc.libvirt start
# 2. Ejecutar el administrador de máquinas virtuales
/usr/bin/virt-manager.real
# 3. Limpiar y detener servicios al cerrar
sudo /etc/rc.d/rc.libvirt stop
exit 0
EOF
cat << 'EOF' > /usr/bin/virt-manager
#!/usr/bin/env bash
# Llamada al guion personalizado .geb
if [ -x /usr/local/bin/virt-manager.geb ]; then
/usr/local/bin/virt-manager.geb
fi
exit 0
EOF
chmod +x /usr/local/bin/virt-manager.geb /usr/bin/virt-managerCode: Select all
sudo suCode: Select all
cp /etc/sudoers /etc/sudoers.originalCode: Select all
joe /etc/sudoersCode: Select all
## sudoers file.
##
## This file MUST be edited with the 'visudo' command as root.
## Failure to use 'visudo' may result in syntax or file permission errors
## that prevent sudo from running.
##
## See the sudoers man page for the details on how to write a sudoers file.
##
##
## Host alias specification
##
## Groups of machines. These may include host names (optionally with wildcards),
## IP addresses, network numbers or netgroups.
# Host_Alias WEBSERVERS = www1, www2, www3
##
## User alias specification
##
## Groups of users. These may consist of user names, uids, Unix groups,
## or netgroups.
# User_Alias ADMINS = millert, dowdy, mikef
##
## Cmnd alias specification
##
## Groups of commands. Often used to group related commands together.
# Cmnd_Alias PROCESSES = /usr/bin/nice, /bin/kill, /usr/bin/renice, \
# /usr/bin/pkill, /usr/bin/top
# Cmnd_Alias REBOOT = /sbin/halt, /sbin/reboot, /sbin/poweroff
##
## Defaults specification
##
## You may wish to keep some of the following environment variables
## when running commands via sudo.
##
## Locale settings
# Defaults env_keep += "LANG LANGUAGE LINGUAS LC_* _XKB_CHARSET"
##
## Run X applications through sudo; HOME is used to find the
## .Xauthority file. Note that other programs use HOME to find
## configuration files and this may lead to privilege escalation!
# Defaults env_keep += "HOME"
##
## X11 resource path settings
# Defaults env_keep += "XAPPLRESDIR XFILESEARCHPATH XUSERFILESEARCHPATH"
##
## Desktop path settings
# Defaults env_keep += "QTDIR KDEDIR"
##
## Allow sudo-run commands to inherit the callers' ConsoleKit session
# Defaults env_keep += "XDG_SESSION_COOKIE"
##
## Uncomment to enable special input methods. Care should be taken as
## this may allow users to subvert the command being run via sudo.
# Defaults env_keep += "XMODIFIERS GTK_IM_MODULE QT_IM_MODULE QT_IM_SWITCHER"
##
## Uncomment to use a hard-coded PATH instead of the user's to find commands
# Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
##
## Uncomment to send mail if the user does not enter the correct password.
# Defaults mail_badpass
##
## Uncomment to enable logging of a command's output, except for
## sudoreplay and reboot. Use sudoreplay to play back logged sessions.
# Defaults log_output
# Defaults!/usr/bin/sudoreplay !log_output
# Defaults!/usr/local/bin/sudoreplay !log_output
# Defaults!REBOOT !log_output
##
## Runas alias specification
##
##
## User privilege specification
##
root ALL=(ALL:ALL) ALL
## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL:ALL) ALL
## Same thing without a password
# %wheel ALL=(ALL:ALL) NOPASSWD: ALL
## Uncomment to allow members of group sudo to execute any command
# %sudo ALL=(ALL:ALL) ALL
## Uncomment to allow any user to run sudo if they know the password
## of the user they are running the command as (root by default).
# Defaults targetpw # Ask for the password of the target user
# ALL ALL=(ALL:ALL) ALL # WARNING: only use this together with 'Defaults targetpw'
## Read drop-in files from /etc/sudoers.d
@includedir /etc/sudoers.d
#
# =================================================================================
#
# Permitir a mi usuario « inukaze»
# Gestionar servicios específicos
# de Slackware sin contraseña
#
# =================================================================================
#ORIGINAL#ESTO NO SIRVE#inukaze ALL=(ALL) NOPASSWD:/bin/mount, /sbin/mount, /sbin/mount.cifs, /etc/samba/credencial, /usr/local/bin/carpcomp, /home/inukaze/.credencial, /usr/bin/sync, /usr/bin/tee /proc/sys/vm/drop_caches, /usr/bin/nice
# Gestión de módulos y prioridades del sistema
inukaze ALL=(ALL) NOPASSWD: /bin/mount
inukaze ALL=(ALL) NOPASSWD: /sbin/mount
inukaze ALL=(ALL) NOPASSWD: /sbin/mount.cifs
inukaze ALL=(ALL) NOPASSWD: /usr/bin/sync
inukaze ALL=(ALL) NOPASSWD: /usr/bin/tee /proc/sys/vm/drop_caches
inukaze ALL=(ALL) NOPASSWD: /sbin/modprobe
inukaze ALL=(ALL) NOPASSWD: /usr/bin/nice
inukaze ALL=(ALL) NOPASSWD: /usr/bin/renice
# Actualización del sistema (Salix-Update-Manager / slapt-get)
inukaze ALL=(ALL) NOPASSWD: /usr/sbin/slapt-get --update
inukaze ALL=(ALL) NOPASSWD: /usr/sbin/slapt-get --upgrade --simulate
# Control de TeamViewer (Demonio de fondo)
inukaze ALL=(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.teamviewerd start
inukaze ALL=(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.teamviewerd stop
inukaze ALL=(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.teamviewerd restart
inukaze ALL=(ALL) NOPASSWD: /usr/bin/killall -9 teamviewerd
# Virtualización QEmu / KVM / Libvirt
inukaze ALL=(ALL) NOPASSWD: /usr/bin/virsh
inukaze ALL=(ALL) NOPASSWD: /usr/sbin/libvirtd
inukaze ALL=(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.libvirt start
inukaze ALL=(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.libvirt stop
inukaze ALL=(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.libvirt status
# VirtualBox (6.1.50)
inukaze ALL=(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.vboxdrv start
inukaze ALL=(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.vboxdrv stop
inukaze ALL=(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.vboxdrv restart
inukaze ALL=(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.vboxdrv status
Code: Select all
sudo -l# TeamViewer # :User inukaze may run the following commands on Inukaze:
(ALL : ALL) ALL
(ALL) ALL
(ALL) NOPASSWD: /bin/mount
(ALL) NOPASSWD: /sbin/mount
(ALL) NOPASSWD: /sbin/mount.cifs
(ALL) NOPASSWD: /usr/bin/sync
(ALL) NOPASSWD: /usr/bin/tee /proc/sys/vm/drop_caches
(ALL) NOPASSWD: /sbin/modprobe
(ALL) NOPASSWD: /usr/bin/nice
(ALL) NOPASSWD: /usr/bin/renice
(ALL) NOPASSWD: /usr/sbin/slapt-get --update
(ALL) NOPASSWD: /usr/sbin/slapt-get --upgrade --simulate
(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.teamviewerd start
(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.teamviewerd stop
(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.teamviewerd restart
(ALL) NOPASSWD: /usr/bin/killall -9 teamviewerd
(ALL) NOPASSWD: /usr/bin/virsh
(ALL) NOPASSWD: /usr/sbin/libvirtd
(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.libvirt start
(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.libvirt stop
(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.libvirt status
(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.vboxdrv start
(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.vboxdrv stop
(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.vboxdrv restart
(ALL) NOPASSWD: /usr/local/bin/rc.d/rc.vboxdrv status
Code: Select all
sudo -n /usr/local/bin/rc.d/rc.teamviewerd stop# VirtualBox # :Terminating TeamViewer Daemon
teamviewerd: no process found
Code: Select all
sudo -n /usr/local/bin/rc.d/rc.vboxdrv status# LibVirt # :VirtualBox kernel module is not loaded.
Code: Select all
sudo -n /usr/local/bin/rc.d/rc.libvirt status# slapt-get # :Usage: /usr/local/bin/rc.d/rc.libvirt (start|stop|restart|soft_restart|guests_shutdown|guests_reboot)
Code: Select all
sudo -n /usr/sbin/slapt-get --updateRecuperando los datos del paquete [http://slackware.uk/salix/x86_64/slackware-15.0/]...Cacheado
Recuperando la lista de parches [http://slackware.uk/salix/x86_64/slackware-15.0/]...Cacheado
Recuperando la lista de checksum [http://slackware.uk/salix/x86_64/slackware-15.0/]...Cacheado
Recuperando la firma de checksum [http://slackware.uk/salix/x86_64/slackware-15.0/]...Cacheado
Verificando la firma de checksum [http://slackware.uk/salix/x86_64/slackware-15.0/]...No hay clave para verificar
Recuperando ChangeLog.txt [http://slackware.uk/salix/x86_64/slackware-15.0/]...Cacheado
Leyendo listas de paquetes...Hecho
Recuperando los datos del paquete [http://slackware.uk/salix/x86_64/slackware-15.0/extra/]...Cacheado
Recuperando la lista de parches [http://slackware.uk/salix/x86_64/slackware-15.0/extra/]...Hecho
Recuperando la lista de checksum [http://slackware.uk/salix/x86_64/slackware-15.0/extra/]...Cacheado
Recuperando la firma de checksum [http://slackware.uk/salix/x86_64/slackware-15.0/extra/]...Cacheado
Verificando la firma de checksum [http://slackware.uk/salix/x86_64/slackware-15.0/extra/]...No hay clave para verificar
Recuperando ChangeLog.txt [http://slackware.uk/salix/x86_64/slackware-15.0/extra/]...Hecho
Leyendo listas de paquetes...Hecho
Recuperando los datos del paquete [http://slackware.uk/salix/x86_64/15.0/]...Cacheado
Recuperando la lista de parches [http://slackware.uk/salix/x86_64/15.0/]...Hecho
Recuperando la lista de checksum [http://slackware.uk/salix/x86_64/15.0/]...Cacheado
Recuperando la firma de checksum [http://slackware.uk/salix/x86_64/15.0/]...Cacheado
Verificando la firma de checksum [http://slackware.uk/salix/x86_64/15.0/]...No hay clave para verificar
Recuperando ChangeLog.txt [http://slackware.uk/salix/x86_64/15.0/]...Cacheado
Leyendo listas de paquetes...Hecho
Recuperando los datos del paquete [http://slackware.uk/salix/x86_64/extra-15.0/]...Cacheado
Recuperando la lista de parches [http://slackware.uk/salix/x86_64/extra-15.0/]...Hecho
Recuperando la lista de checksum [http://slackware.uk/salix/x86_64/extra-15.0/]...Cacheado
Recuperando la firma de checksum [http://slackware.uk/salix/x86_64/extra-15.0/]...Cacheado
Verificando la firma de checksum [http://slackware.uk/salix/x86_64/extra-15.0/]...No hay clave para verificar
Recuperando ChangeLog.txt [http://slackware.uk/salix/x86_64/extra-15.0/]...Cacheado
Leyendo listas de paquetes...Hecho
Recuperando los datos del paquete [https://bear.alienbase.nl/mirrors/peopl ... ilib/15.0/]...Cacheado
Recuperando la lista de parches [https://bear.alienbase.nl/mirrors/peopl ... ilib/15.0/]...Hecho
Recuperando la lista de checksum [https://bear.alienbase.nl/mirrors/peopl ... ilib/15.0/]...Cacheado
Recuperando la firma de checksum [https://bear.alienbase.nl/mirrors/peopl ... ilib/15.0/]...Cacheado
Verificando la firma de checksum [https://bear.alienbase.nl/mirrors/peopl ... ilib/15.0/]...No hay clave para verificar
Recuperando ChangeLog.txt [https://bear.alienbase.nl/mirrors/peopl ... ilib/15.0/]...Hecho
Leyendo listas de paquetes...Hecho
Code: Select all
rm -rf "$HOME/.wine"Code: Select all
mkdir -p "$HOME/.wine32Bits"
mkdir -p "$HOME/.wine64Bits"Code: Select all
touch "$HOME/.wine"
chmod 000 "$HOME/.wine"
sudo chattr +i "$HOME/.wine"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.shCode: Select all
mv /usr/bin/wine /usr/bin/wine32Code: 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/wineCode: 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"
EOFCode: Select all
echo "Inicializando prefijo de 32 Bits..."
WINEARCH=win32 wine wineboot --init
wine regedit /tmp/optimizar_wine.regCode: Select all
echo "Inicializando prefijo de 64 Bits..."
unset WINEARCH
wine wineboot --init
wine64 regedit /tmp/optimizar_wine.regCode: Select all
file /usr/lib64/wine/i386-windows/notepad.exeLa 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./usr/lib64/wine/i386-windows/notepad.exe: PE32 executable (GUI) Intel 80386, for MS Windows
Code: Select all
file /usr/lib64/wine/x86_64-windows/notepad.exeeso quiere decir que es un programa de 64 Bits nativo para Microsoft windows./usr/lib64/wine/x86_64-windows/notepad.exe: PE32+ executable (GUI) x86-64, for MS Windows
Code: Select all
wine /usr/lib64/wine/i386-windows/notepad.exeArquitectura: 32 Bits detectada.
Code: Select all
wine /usr/lib64/wine/x86_64-windows/notepad.exeListo, ya mi guion personalizado para que Wine detecte si es un programa de 32 Bits o de 64 Bits funciona como espero.Arquitectura: 64 Bits detectada.