Optimizaciones Personalizadas en base a mi equipo (Hardware).

Spanish forum

Moderator: sivare

inukaze
Posts: 102
Joined: 24. Nov 2024, 18:42

Re: Optimizaciones Personalizadas en base a mi equipo (Hardware).

Post by inukaze »

****** Salix-Update-Notifier *******

Me instalo el salix-update-notifier

Code: Select all

slapt-get -u
slapt-get -i salix-update-notifier
inukaze
Posts: 102
Joined: 24. Nov 2024, 18:42

Re: Optimizaciones Personalizadas en base a mi equipo (Hardware).

Post by inukaze »

****** Guiones Personalizados para usar programas bajo demanda *******

#Renombrar los programas que necesito que funcionen bajo demanda, es decir solo active sus modulos y/o cosas cuando se vaya a ejecutar el programa y los desactive cuando se cierra el programa.
Ya yo instale TeamViewer, Virt-Manager, y VirtualBox

Code: 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.real
#Creo un directorio replicando /etc/rc.d pero dentro de /usr/local/bin :

Code: Select all

mkdir -p /usr/local/bin/rc.d
# Copio los guiones originales :

Code: 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/
# Le quito el permiso de ejecucion a los guiones que estan en /etc/rc.d que no necesito que se inicien durante el arranque.

Code: Select all

chmod -x /etc/rc.d/rc.vboxdrv
chmod -x /etc/rc.d/rc.libvirt
chmod -x /etc/rc.d/rc.teamviewerd
# Le doy permisos a los guiones clonados en la ruta personalizada :

Code: 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.teamviewerd
# Salix-Update-Manager # :

Copio y pego lo siguiente en una ventana de terminal con el usuario root activo :

Code: 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
Copio y pego lo siguiente en una ventana de terminal con el usuario root activo :

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.geb
# VirtualBox # :

Code: 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
EOF

Code: 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/virtualbox
# TeamViewer # :

Code: 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.geb
#Edito la linea de ejecucion del archivo /usr/share/applications/TeamViewer.desktop

Code: Select all

sed -i 's|^Exec=.*|Exec=/usr/bin/teamviewer|' /usr/share/applications/TeamViewer.desktop
chmod +x /usr/local/bin/teamviewer.geb /usr/bin/teamviewer
# Virt-Manager / QEmu / LibVirt # :

Code: 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-manager
inukaze
Posts: 102
Joined: 24. Nov 2024, 18:42

Re: Optimizaciones Personalizadas en base a mi equipo (Hardware).

Post by inukaze »

******* /etc/sudoers *******

Code: Select all

sudo su

Code: Select all

cp /etc/sudoers /etc/sudoers.original

Code: Select all

joe /etc/sudoers
El contenido de mi archivo /etc/sudoers es el siguiente :

Code: 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




Reinicio el equipo completo y vuelvo a ingresar en mi sistema operativo GNU/Linux
inukaze
Posts: 102
Joined: 24. Nov 2024, 18:42

Re: Optimizaciones Personalizadas en base a mi equipo (Hardware).

Post by inukaze »

******* Pruebas de ejecucion « No-Interactiva » *******


Abro una terminal (de mi usuario comun) para probar los siguientes comandos :

Code: Select all

sudo -l
# La salida me indicara cuales comandos puedo utilizar sin que se me pida contraseña :
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
# TeamViewer # :

Code: Select all

sudo -n /usr/local/bin/rc.d/rc.teamviewerd stop
Terminating TeamViewer Daemon
teamviewerd: no process found
# VirtualBox # :

Code: Select all

sudo -n /usr/local/bin/rc.d/rc.vboxdrv status
VirtualBox kernel module is not loaded.
# LibVirt # :

Code: Select all

sudo -n /usr/local/bin/rc.d/rc.libvirt status
Usage: /usr/local/bin/rc.d/rc.libvirt (start|stop|restart|soft_restart|guests_shutdown|guests_reboot)
# slapt-get # :

Code: Select all

sudo -n /usr/sbin/slapt-get --update
Recuperando 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
inukaze
Posts: 102
Joined: 24. Nov 2024, 18:42

Re: Optimizaciones Personalizadas en base a mi equipo (Hardware).

Post by inukaze »

******* 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)

Code: Select all

rm -rf "$HOME/.wine"
# 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

Code: Select all

mv /usr/bin/wine /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.
Post Reply