Optimizaciones Personalizadas en base a mi equipo.

Spanish forum

Moderator: sivare

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

Re: Optimizaciones Personalizadas en base a mi equipo.

Post by inukaze »

********* Configuracion de Video para mi Equipo *******

# Se me olvido agregarlo justo después de la instalación de los controladores privativos. Ademas este foro tiene una regla estúpidamente absurda de que no puedes editar tus propias publicaciones pasado 15 minutos, el limite deberían ser 24 horas. como el foro de LinuxQuestion. Bueno al rato si esta vaina me deja borro el tema completo y lo republico en como debio quedar XD. Lo peor del caso es que la porqueria esta no me deja ni recuperar lo que habia escrito y tengo que volver a escribirlo todo ¬¬

Code: Select all

sudo su

Code: Select all

cat << 'EOF' > /etc/X11/xorg.conf
# Configuración de Inukaze para tarjetas Nvidia
# En Debian, colocar en /etc/X11/xorg.conf 
# En Manjaro mwhd, colocar en /etc/X11/mhwd.d/nvidia.conf

Section "ServerLayout"
	Identifier		"Default Layout"
	Screen		 0	"Screen0"		 0	 0
	Option			"Xinerama"		"0"
EndSection

Section "Module"
	Load		"bitmap"	# Permite usar tipografías de mapas de bits dentro del servidor gráfico
#	Load		"synaptics"	# Permite utilizar dispositivos táctiles como TouchPad o pantallas, etc.
#	Load		"vbe"		# Se usa para un modo VESA muy básico
#	Load		"int10"		# Se usa para un modo VESA muy básico
#	Load		"type1"		# Soporte de fuentes Type1
#	Load		"freetype"	# Soporte de fuentes FreeType
# Ya es interno:
#	Load		"glx"		# Carga automáticamente aunque no se especifique.
#	Load		"ddc"		# Sondeo DDC del monitor
#	Load		"dbe"		# Extensión de doble búfer
#	Load		"dri2"		# Infraestructura de renderizado directo v2
#	Load		"extmod"	# Extensiones comunes
#	Load		"record"	# Extensión para grabar/probar eventos de X
EndSection

Section "ServerFlags"
	Option	"DontZap"	"False" # Permite usar Ctrl+Alt+Backspace para cerrar las X
	Option	"Xinerama"	"0"
EndSection

Section "Monitor"
	Identifier		"Monitor0"
	VendorName		"VIT (Toshiba Matsushita Display Technology Co., Ltd LCD-MONITOR)"
	ModelName		"190LM00006"
	HorizSync		30.0 - 83.0
	VertRefresh		55.0 - 75.0
	Option			"DPMS"			"TRUE"

	# --- RESOLUCIONES 16:10 (Nativas / Proporcionales) ---
		# 1400x900: La que mejor se ve según tus pruebas
			Modeline "1400x900"  103.50  1400 1480 1624 1848  900 903 913 934 -hsync +vsync
    
		# 1280x800: La viste bien
			Modeline "1280x800"   83.50  1280 1352 1480 1680  800 803 809 831 -hsync +vsync

    # --- RESOLUCIONES 4:3 (Tus favoritas y Emergencia) ---
		# 1152x864: Tu mínima deseada 4:3 (a 75Hz y 60Hz)
			Modeline "1152x864"  104.00  1152 1224 1344 1536  864 867 871 905 -hsync +vsync

		# 1024x768: Emergencia / Clásica
			Modeline "1024x768"   82.00  1024 1088 1192 1360  768 771 775 805 -hsync +vsync
EndSection

Section "Device"
	Identifier		"Device0"
	Driver			"nvidia"
	VendorName		"NVIDIA Corporation"
	BoardName		"GeForce GT 620"

	# A partir de la versión de los controladores 304.88, el sistema se vuelve muy lento
	# Aquí está el arreglo de lentitud:

	# Forzar el nivel de rendimiento máximo para evitar tirones
	Option			"RegistryDwords"					"PowerMizerEnable=0x1" 
	Option			"RegistryDwords"					"PerfLevelSrc=0x3322"
	Option			"RegistryDwords"					"PowerMizerDefaultAC=0x1"

	# Forzar a que la GPU escale la imagen 
	# Para evitar las distorsiones en la relación de aspecto
#	Option			"ConnectToDevice"					"VGA-0"				# Ignorada por el controlador (determinación automática)
#	Option			"FlatPanelProperties"				"Scaling = Aspect-scaled"	# Solo para conexiones digitales (DVI/HDMI)
EndSection

Section "Screen"
	Identifier		"Screen0"
	Device			"Device0"
	Monitor			"Monitor0"
	DefaultDepth	 24

	# --- Configuración de Resoluciones ---
	# Prioridad: 1400x900 (mejor visualización), seguida de 16:10 y 4:3 de emergencia.
	Option			"AllowIndirectGLXProtocol"	"Off"

	# Prueba de la resolución 1400x900 y esas propiedades con ForceFullCompositionPipeline
	Option			"metamodes"	"VGA-0: 1400x900 +0+0 {ForceFullCompositionPipeline=On, ViewPortOut=1400x900+0+0, ResamplingMethod=Bilinear}, 1280x800 +0+0, 1152x864 +0+0, 1024x768 +0+0; 800x600 +0+0, 640x480 +0+0"
	Option			"TwinViewXineramaInfoOrder"	"VGA-0"

	# --- Rendimiento y Calidad Visual ---
	Option			"AllowSHMPixmaps"					"True"
	Option			"AllowUnofficialGLXProtocol"		"True"
	Option			"DamageEvents"						"True"
#	Option			"ForceCompositionPipeline"			"On"		# Elimina el lagrimeo (Tearing) en los videos
#	Option			"ForceFullCompositionPipeline"		"On"		# Elimina el lagrimeo (Tearing) en los videos
	Option			"RenderAccel"						"True"
	Option			"TripleBuffer"						"False"
#	Option			"VideoRAM"							"2097152"	# Especifica la memoria de video, pero se determina automáticamente

	# --- Opciones Especiales --- (Mantenidas por compatibilidad con GPUs antiguas)
#	Option			"CIOverlay"							"True"
#	Option			"ConstrainCursor"					"True"
#	Option			"Interactive"						"True"
#	Option			"MultisampleCompatibility"			"True"
#	Option			"OverlayDefaultVisual"				"True"
#	Option			"TransparentIndex"					"25"
	Option			"UseHotplugEvents"					"True"
#	Option			"Overlay"							"True"	# Puede causar conflictos con compositores modernos

	# --- Opciones Legadas / Compatibilidad ---
	Option			"AddARGBGLXVisuals"					"True"
	Option			"AllowGLXWithComposite"				"True"
	Option			"backingstore"						"True"
	Option			"DPMS"								"True"
	Option			"HWCursor"						"True"
	Option			"NoPowerConnectorCheck"				"True"
#	Option			"UseEdidFreqs"						"True"
	Option			"DPI"								"96 x 96"

# Cuando se actualizan los controladores privativos:
	Option			"BaseMosaic"						"Off"
	Option			"Dac8Bit"							"True"
	Option			"GLShaderDiskCache"					"True"
	Option			"MultiGPU"							"Off"
	Option			"nvidiaXineramaInfo"				"True"
	Option			"SLI"								"Off"
	Option			"Stereo"							"0"
	Option			"UBB"								"True"

# Nvidia 390.157 > Opciones no utilizadas o legadas
#	Option			"AddARGBVisuals"					"True"
#	Option			"CursorShadow"						"True"
#	Option			"DRI"								"True"
#	Option			"NoLogo"							"True"
#	Option			"NvAGP"								"3"
#	Option			"TwinView"							"0"
#	Option			"XAANoOffscreenPixmaps"				"True"
#	Option			"InitializeWindowBackingPixmaps"	"True"
#	Option			"UseEvents"							"True"

	SubSection		"Display"
		Depth		 24
		Modes		"1400x900" "1280x800" "1152x720" "1152x864" "1024x768" "800x600"
	EndSubSection
EndSection

Section "Extensions"
	Option			"Composite"	"Enable"
#	Option			"DRI"		"Enable"	# Opción no reconocida en nvidia 390.157
	Option			"RandR"		"Enable"
	Option			"RENDER"	"Enable"
EndSection

Section "DRI"
	Mode	0660
#	Group	"vglusers"	# Solo para VirtualGL (incompatible con Nvidia oficial)
EndSection
EOF

Lo siguiente es completamente opcional : como yo uso la tty6 para usar guiones personalizados para lanzar videojuegos de antaño de windows usando wine 9.0.1, pero como eso suele implicar el reescalado forzado a 640x480 y/o dejar la pantalla completamente en negro, prefiero lanzar eso en la tty6 pero para que esto funcione debo hacer los siguientes cambios en mi sistema

Code: Select all

cp /etc/inittab /etc/inittab.original

cat << 'EOF' > /etc/inittab
#
# inittab	This file describes how the INIT process should set up
#		the system in a certain run-level.
#
# Version:	@(#)inittab		2.04	17/05/93	MvS
#                                       2.10    02/10/95        PV
#                                       3.00    02/06/1999      PV
#                                       4.00    04/10/2002      PV
#
# Author:	Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Modified by:	Patrick J. Volkerding, <volkerdi@slackware.com>
# Modified by:  George Vlahavas <vlahavas~at~gmail~dot~com>
#

# These are the default runlevels in Slackware:
#   0 = halt
#   1 = single user mode
#   2 = unused (but configured the same as runlevel 3)
#   3 = multiuser mode (default Slackware runlevel)
#   4 = X11/Wayland with SDDM/KDM/GDM/XDM (session managers)
#   5 = unused (but configured the same as runlevel 3)
#   6 = reboot

# Default runlevel. (Do not set to 0 or 6)
#id:1:initdefault:
#id:3:initdefault:
id:4:initdefault:

# System initialization (runs when system boots).
si:S:sysinit:/etc/rc.d/rc.S

# Script to run when going single user (runlevel 1).
su:1S:wait:/etc/rc.d/rc.K

# Script to run when going multi user.
rc:2345:wait:/etc/rc.d/rc.M

# What to do at the "Three Finger Salute".
ca::ctrlaltdel:/sbin/shutdown -t5 -r now

# Runlevel 0 halts the system.
l0:0:wait:/etc/rc.d/rc.0

# Runlevel 6 reboots the system.
l6:6:wait:/etc/rc.d/rc.6

# What to do when power fails.
pf::powerfail:/sbin/genpowerfail start

# If power is back, cancel the running shutdown.
pg::powerokwait:/sbin/genpowerfail stop

# These are the standard console login getties in multiuser mode:
c1:12345:respawn:/sbin/agetty --noclear 38400 tty1 linux
c2:12345:respawn:/sbin/agetty 38400 tty2 linux
c3:12345:respawn:/sbin/agetty 38400 tty3 linux
c4:12345:respawn:/sbin/agetty 38400 tty4 linux
#c5:12345:respawn:/sbin/agetty 38400 tty5 linux
c5:12345:respawn:/sbin/agetty --autologin inukaze --noclear tty6 38400 linux
#c6:12345:respawn:/sbin/agetty 38400 tty6 linux
c6:12345:respawn:/sbin/agetty --autologin inukaze --noclear tty6 38400 linux

# Local serial lines:
#s1:12345:respawn:/sbin/agetty -L ttyS0 9600 vt100
#s2:12345:respawn:/sbin/agetty -L ttyS1 9600 vt100

# Dialup lines:
#d1:12345:respawn:/sbin/agetty -mt60 38400,19200,9600,2400,1200 ttyS0 vt100
#d2:12345:respawn:/sbin/agetty -mt60 38400,19200,9600,2400,1200 ttyS1 vt100

# Runlevel 4 also starts /etc/rc.d/rc.4 to run a display manager for X.
x1:4:respawn:/etc/rc.d/rc.4

# End of /etc/inittab
EOF
Luego creo el archivo /etc/X11/Xwrapper.config

Code: Select all

cat << 'EOF' > /etc/X11/Xwrapper.config
allowed_users=anybody
needs_root_rights=yes
EOF
inukaze
Posts: 84
Joined: 24. Nov 2024, 18:42

Re: Optimizaciones Personalizadas en base a mi equipo.

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