# cockpit-nvidia-gpu Plugin nativo de [Cockpit](https://cockpit-project.org/) que agrega una página "GPU" al menú lateral, mostrando el estado en vivo de GPUs NVIDIA (uso, memoria, temperatura, consumo, fan) y los procesos que las están usando. ## Por qué existe Cockpit no trae un panel de GPU. Los plugins de terceros existentes para esto (por ejemplo `cockpit-gpu` de binbinsh/gridheap-dev) son proyectos chicos, sin auditar, con instaladores que compilan contra el código fuente completo de Cockpit e instalan un servicio systemd persistente sin pedir confirmación clara. Este plugin es la alternativa: HTML + JavaScript plano, sin build step, sin dependencias externas, sin nada corriendo en segundo plano — sólo se ejecuta `nvidia-smi` bajo demanda mientras la página está abierta. ## Requisitos - Cockpit (probado con versión ≥ 260). - Driver NVIDIA instalado, con `nvidia-smi` disponible en el `PATH` del sistema. ## Instalación Recomendado: symlink desde un checkout del repo, así un `git pull` actualiza el plugin al instante sin recopiar nada. ```bash git clone https://gitea.mateosaldain.uy//cockpit-nvidia-gpu.git /opt/cockpit-nvidia-gpu sudo mkdir -p /usr/share/cockpit sudo ln -s /opt/cockpit-nvidia-gpu/gpu-monitor /usr/share/cockpit/gpu-monitor ``` Recargá la pestaña de Cockpit en el navegador y debería aparecer la entrada **GPU** en el menú, junto a **Overview**. Si no aparece (paquete cacheado), como último recurso: `sudo systemctl restart cockpit.socket`. ### Instalación alternativa para desarrollo (sin root) ```bash mkdir -p ~/.local/share/cockpit ln -s /opt/cockpit-nvidia-gpu/gpu-monitor ~/.local/share/cockpit/gpu-monitor ``` ## Desinstalación ```bash sudo rm /usr/share/cockpit/gpu-monitor # borra sólo el symlink rm -rf /opt/cockpit-nvidia-gpu # opcional: borra también el checkout ``` ## Estructura ``` gpu-monitor/ ├── manifest.json # declara la entrada de menú "GPU" en Cockpit ├── index.html # esqueleto de la página ├── gpu.js # toda la lógica: polling, parseo de nvidia-smi, render └── style.css # estilos autocontenidos ``` No hay `package.json` ni paso de build: los archivos se copian o symlinkean tal cual. ## Screenshot _(pendiente)_ ## Extensibilidad - **Multi-GPU**: ya soportado. `nvidia-smi --query-gpu=...` devuelve una línea CSV por GPU física, y `gpu.js` itera todas las líneas, creando una tarjeta por índice de GPU. En un servidor con una sola GPU (como Arkax Server) simplemente se renderiza una tarjeta. - **AMD / Intel**: toda la obtención de datos pasa por `fetchNvidiaMetrics()` en `gpu.js`, que devuelve una forma de datos neutral (`{index, util, memUsed, memTotal, tempC, powerW, fanPct}`). Para agregar soporte AMD (`rocm-smi`) o Intel (`intel_gpu_top`), alcanza con escribir una función equivalente que devuelva la misma forma y elegir cuál usar (por detección del binario disponible o config), sin tocar el resto de la página. - **Procesos multi-GPU**: la lista de procesos hoy es global (no discrimina por GPU). Para separarla por GPU, agregar `gpu_uuid` a `--query-compute-apps` y cruzarlo con el `uuid` de cada GPU. ## Licencia MIT — ver [LICENSE](LICENSE).