# Sistema

# Actualizar wireguard-tools desde el repositorio oficial

---
Las versiones de `wireguard-tools` incluidas en Ubuntu permanecen sin actualizar desde hace años (`v1.0.20210914` a fecha de esta nota). Este script permite **actualizar directamente las utilidades de espacio de usuario desde el repositorio oficial de Jason Donenfeld (`git.zx2c4.com`)**, compilando los binarios desde la fuente y reemplazando los del sistema.

---

### Por qué usar una versión actualizada

Las versiones distribuidas por Ubuntu se detuvieron en `v1.0.20210914`, mientras que la versión oficial más reciente (`v1.0.20250521`) incluye numerosas mejoras:

* Correcciones en la gestión de `resolvconf` y DNS.
* Ajustes de MTU automático más precisos.
* Compatibilidad ampliada con FreeBSD, Android y Windows.
* Eliminación de fugas momentáneas de tráfico al levantar el túnel.
* Limpieza y refactorización del código (`setconf` → `addconf`, mejor manejo de memoria, etc.).

En resumen: mantener `wireguard-tools` actualizado mejora la compatibilidad, estabilidad y seguridad del sistema.
Los cambios completos pueden consultarse aquí: [Registro oficial de cambios](https://git.zx2c4.com/wireguard-tools/log/)

---

### Script utilizado

Repositorio en Gitea:
[`UpdateWireguard.sh`](https://gitea.jtrapero.eu.org/R4di04kt1v3/Scripts/src/branch/main/Sistema/UpdateWireguard.sh)

El script:

* Comprueba si existen las herramientas y dependencias necesarias (`git`, `make`, `gcc`, etc.).
* Instala los paquetes faltantes mediante `apt`.
* Clona el repositorio oficial de `wireguard-tools`.
* Compila e instala los binarios (`wg`, `wg-quick`, etc.) sobre el sistema.
* Muestra la versión instalada al finalizar.

---

### Ejemplo de uso

Instalar primero `wireguard` desde los repositorios del sistema para disponer de la base necesaria:

```bash
sudo apt install wireguard -y
```

Luego ejecutar el script para actualizar las herramientas:

```bash
chmod +x UpdateWireguard.sh
sudo ./UpdateWireguard.sh
```

Salida esperada:

```
Installing missing build dependencies: ...
Cloning into 'wireguard-tools'...
Installed version:
wireguard-tools v1.0.2025xxxx - https://git.zx2c4.com/wireguard-tools
```

---

### Detalles técnicos

Este script solo afecta a las **utilidades de espacio de usuario** (`wg`, `wg-quick`, etc.), **no al módulo del kernel**.
El kernel mantiene su versión estable; los binarios pueden actualizarse sin riesgo.

---

### Referencias

* [Repositorio oficial de wireguard-tools](https://git.zx2c4.com/wireguard-tools)
* [Instalación de WireGuard](https://www.wireguard.com/install/)
* [Script en Gitea](https://gitea.jtrapero.eu.org/R4di04kt1v3/Scripts/src/branch/main/Sistema/UpdateWireguard.sh)

# Cambiar el plan de CPU según enchufe o batería

---
### Introducción

Apunte para automatizar el cambio de plan de energía (governor) en un portátil según si está enchufado o funcionando con batería. La idea es olvidarse de cambiarlo manualmente y que se ajuste solo.

---

### Características

* Detecta si el portátil está en corriente o en batería.
* Cambia el governor de CPU automáticamente.
* Funciona como servicio systemd para que siempre esté activo.

---

### Requisitos previos

* Linux (probado en distros con `/sys/class/power_supply`, funciona bien en Fedora 42).
* Tener sudo configurado para poder escribir en `scaling_governor` sin pedir contraseña (o configurar `sudoers`).
* Acceso root para instalar y habilitar servicios.

---

### Script principal

> 📁 [Puedes consultarlo en Gitea](https://gitea.jtrapero.eu.org/R4di04kt1v3/Scripts/src/branch/main/Sistema/Change_Power_AC.sh)

* Se revisa cada 3 minutos (`sleep 180`).
* Modificar los governors según preferencias.


---

### Servicio systemd

Archivo en `/etc/systemd/system/power_manager.service`:

```ini
[Unit]
Description=Power Manager Script
After=network.target

[Service]
Type=simple
ExecStart=/bin/bash -c "sudo /home/usuario/Documentos/Scripts/power_manager.sh"
Restart=always
User=usuario
Environment=DISPLAY=:0
Environment=HOME=/home/usuario

[Install]
WantedBy=multi-user.target
```

* Cambiar `usuario` por el nombre real si se copia literal.
* Importante revisar permisos y rutas.

---

### Configuración en sudoers

Añadir al archivo sudoers (con `visudo`) para permitir ejecutar el script sin contraseña:

```
# Custom
usuario ALL=(ALL) NOPASSWD: /home/usuario/Documentos/Scripts/power_manager.sh
```

---

### Errores comunes o decisiones importantes

* **Permisos sudo**: hay que permitir `sudo tee` sin contraseña para que funcione sin bloqueo.
* **Ruta AC0**: depende del hardware, a veces es `AC`, `ACAD`, etc. Verificar en `/sys/class/power_supply/`.
* **Intervalo**: se podría reducir el tiempo de espera (sleep), pero puede consumir más recursos.

---

### Resumen breve

* Script en bash que revisa si está enchufado.
* Cambia automáticamente el governor de CPU.
* Servicio systemd para que se inicie solo.
* Configurar sudoers para no pedir contraseña.
* Revisar nombre del adaptador AC.

---

### Notas personales

Quizá se podría mejorar para no usar un bucle infinito y en su lugar usar udev o eventos ACPI, pero el loop es más sencillo y robusto para no complicarse.

# Cambiar el plan de CPU según enchufe o batería (v2)

---
### Introducción

Sistema para aplicar perfiles de energía dinámicos en Linux según el estado de alimentación (AC o batería). La idea es automatizar el cambio de governor, EPP y boost de CPU sin depender de herramientas externas.

---

### Requisitos previos

* Kernel con soporte para `cpufreq` y governors (`performance`, `schedutil`, `powersave`, etc.).
* Opcional: soporte `amd-pstate-epp` para Energy Performance Preference.
* `systemd` y `udev` disponibles (entornos modernos ya lo traen).
* Script personalizado [Change_Power_v2.sh](https://gitea.jtrapero.eu.org/R4di04kt1v3/Scripts/src/branch/main/Sistema/Change_Power_v2.sh).

---

### Flujo general

1. **Regla udev** detecta conexión/desconexión de corriente.
2. **udev dispara units systemd** específicas para cada estado.
3. **systemd ejecuta script Bash**, que aplica el perfil de energía correspondiente.

---

### Configuración

#### 1. Regla udev

Archivo `/etc/udev/rules.d/99-power-profile.rules`:

```udev
# Detectar cambio en el estado de AC
SUBSYSTEM=="power_supply", KERNEL=="AC0", ATTR{type}=="Mains", ACTION=="change", ATTR{online}=="1", TAG+="systemd", ENV{SYSTEMD_WANTS}+="power-profile-ac.service"
SUBSYSTEM=="power_supply", KERNEL=="AC0", ATTR{type}=="Mains", ACTION=="change", ATTR{online}=="0", TAG+="systemd", ENV{SYSTEMD_WANTS}+="power-profile-bat.service"
```

Con esto, cualquier cambio de estado en el adaptador de corriente dispara la unit correspondiente.

---

#### 2. Units systemd

**AC** → `/etc/systemd/system/power-profile-ac.service`

```ini
[Unit]
Description=Perfil de energía: AC (enchufado)

[Service]
Type=oneshot
ExecStart=/usr/local/bin/Change_Power_v2.sh ac
```

**Batería** → `/etc/systemd/system/power-profile-bat.service`

```ini
[Unit]
Description=Perfil de energía: Batería

[Service]
Type=oneshot
ExecStart=/usr/local/bin/Change_Power_v2.sh bat
```

---

#### 3. Script Bash

El script principal se mantiene versionado en Gitea:

👉 [Change_Power_v2.sh en Gitea](https://gitea.jtrapero.eu.org/R4di04kt1v3/Scripts/src/branch/main/Sistema/Change_Power_v2.sh)

Testeado en un portátil con **Fedora 41**, donde funciona correctamente el cambio de perfiles al enchufar o desenchufar el cargador.

---

### Errores comunes o decisiones importantes

* **Script genérico**: no contiene información personal ni rutas específicas. Solo depende del nombre del dispositivo de alimentación (`AC0` por defecto), que puede variar según el hardware.
* **Detección de AC**: en algunos equipos el dispositivo no se llama `AC0` sino `AC`, `ACAD` o similar. Conviene verificar en `/sys/class/power_supply/`.
* **Permisos**: escribir en `/sys/devices/system/cpu/*/cpufreq/*` puede requerir root. Se ejecuta vía systemd, así que no suele ser problema.
* **Drivers**: si `amd-pstate-epp` no está disponible, las opciones EPP se ignoran de forma silenciosa.

---

### Resumen breve

* udev escucha cambios en el estado de corriente.
* systemd ejecuta units `power-profile-ac` o `power-profile-bat`.
* El script aplica governors, EPP y boost con fallbacks robustos.