• Saltar al contenido principal
  • Saltar a la barra lateral principal
  • Blog
  • Sistemas Operativos
    • Todos los sistemas operativos del Raspberry Pi Imager en 2026
  • Tipos de Raspberry Pi
    • Selector interactivo de Raspberry Pi
    • Raspberry Pi: rivales y alternativas SBC en 2026 con Armbian y DietPi
  • Glosario
  • FAQ
  • Contacto
  • Cookies y RGPD
  • Acerca de

Raspberry para torpes

Blog sobre Raspberry Pi en español desde 2013. Guías de configuración, hardware, sistemas operativos y proyectos para todos los niveles.

whatcable en Raspberry Pi

WhatCable para Linux: inspecciona tus puertos USB en Raspberry Pi OS

6 mayo, 2026 by manuti Deja un comentario

☕
¿El blog te ha sido útil?Puedes invitarme a un café en Ko-fi. Sin suscripciones, sin compromisos.
Invitar a un café

Todo empezó con un post de Microsiervos sobre WhatCable, una pequeña utilidad para macOS que lee los cables USB-C conectados y explica exactamente qué capacidades tiene cada uno. Velocidad real, potencia máxima, si el cable lleva e-marker o no. Todo lo que el conector no cuenta por sí mismo. La app es de darrylmorley y funciona sobre la API IOKit de Apple, así que en principio era solo para Mac.

Sin embargo, buscando un poco más, apareció en Hacker News un port para KDE Plasma hecho por Zetaphor. Está escrito en C++ con QML y requiere KDE Frameworks 6. Y luego, buscando más, apareció otro port de nedrichards, este específicamente para GNOME: Python, GTK4 y libadwaita. Orientado a Flatpak y con cara de acabar en Flathub en algún momento. Es este último el que he probado en Raspberry Pi OS Bookworm.

whatcable en el escritorio de Raspberry Pi OS

Qué hace WhatCable por dentro

En Linux, la información sobre puertos y cables USB-C llega a través del kernel, concretamente de la clase typec, que expone sus datos en /sys/class/typec/. Si el driver del controlador USB-C del sistema registra el puerto correctamente en esa clase, ahí aparece todo: velocidad del cable, PDOs de carga, identidad del cable si lleva e-marker, modo alternativo si lo hay. Además, la información de dispositivos conectados a puertos USB-A viaja por /sys/bus/usb/devices/, que es el sysfs USB estándar de toda la vida.

El port de nedrichards lee ambas fuentes. También lee /sys/kernel/debug/usb/devices para datos adicionales de topología. No necesita root para nada de esto. En teoría, debería funcionar igual en cualquier distribución Linux moderna, incluido Raspberry Pi OS.

El problema con el USB-C de la Raspberry Pi

Aquí viene la parte que no es obvia. Tanto la Raspberry Pi 4 como la Raspberry Pi 5 tienen puerto USB-C, pero ese puerto lo gestiona el firmware del bootloader, no un driver de kernel. La negociación de USB-C Power Delivery —qué PDOs pide la placa, qué corriente puede entregar la fuente— ocurre antes de que el sistema operativo ni siquiera haya arrancado. El propio Raspberry Pi Ltd lo confirma en su white paper sobre USB PD: la Pi 5 solo pide PDOs a 5V y esa lógica vive en el EEPROM del bootloader.

Como resultado, /sys/class/typec/ está vacío en ambas placas. No hay driver UCSI, no hay TCPM, no hay nada que registre el puerto USB-C como typec_port en el kernel. WhatCable arranca sin problema, pero el apartado de puertos USB-C aparece vacío. No es un bug de la app: es una limitación arquitectónica de estas placas que no tiene solución desde userspace.

Lo que sí funciona: los cuatro puertos USB-A

Por otro lado, los puertos USB-A sí exponen toda su información. Y en el contexto de una Raspberry Pi, eso es bastante útil. Tanto la Pi 4 como la Pi 5 tienen un presupuesto de corriente limitado para los periféricos USB. Los problemas de alimentación USB en Raspberry Pi vienen de lejos, y poder ver de un vistazo cuánta corriente declara consumir cada dispositivo conectado ayuda a detectar situaciones comprometidas antes de que empiecen los problemas.

Por cada dispositivo conectado, WhatCable muestra el fabricante y nombre de producto, la velocidad negociada (12, 480 o 5000 Mbps según el puerto), la versión USB, el consumo declarado en el descriptor del dispositivo, la clase de dispositivo y el driver de kernel activo. Además, expone la topología completa: en la Pi 4, por ejemplo, aparece el hub VL805 de VIA Labs como hub raíz del bus USB 3.0, con los dispositivos conectados colgando de él como ramas. En la Pi 5, el mismo papel lo hace el chip RP1.

Eso sí, el consumo que muestra es el bMaxPower del descriptor USB, no el consumo real en ese momento. Es lo que el dispositivo dice que puede necesitar, no lo que está usando. Para consumo real hace falta un vatímetro USB en serie. Aun así, como referencia para dimensionar qué cabe dentro del presupuesto de la placa, es un dato útil.

Amazon Basics Cable de carga rápida con adaptador USB-C a USB-A 3.1 Gen 2, alta velocidad de 10 Gbps

Amazon Basics Cable de carga rápida con adaptador USB-C a USB-A 3.1 Gen 2, alta velocidad de 10 Gbps

5,77€

Comprar en Amazon

Como Asociado de Amazon, gano por compras calificadas. Este enlace es un enlace de afiliado, lo que significa que puedo ganar una comisión si realizas una compra a través de estos enlaces, sin costo adicional para ti.

Instalación en Raspberry Pi OS Bookworm

Raspberry Pi OS Bookworm es Debian 12. Tiene GTK4 y libadwaita en repos, así que el software corre sin problemas. El único obstáculo es que el paquete meson del sistema es la versión 1.0.1, y el proyecto exige >= 1.2.0. Se resuelve instalando meson desde pip.

Primero, las dependencias:

sudo apt install git ninja-build python3-pip \
    python3-gi python3-gi-cairo \
    gir1.2-gtk-4.0 gir1.2-adw-1
whatcable ninja install

Después, meson actualizado:

pip3 install meson --break-system-packages
meson --version

La versión debe ser 1.2.0 o superior. A continuación, clonar e instalar:

git clone https://github.com/nedrichards/whatcable-linux.git
cd whatcable-linux
meson setup build --prefix="$HOME/.local"
meson install -C build
whatcable meson setup

Los ajustes necesarios para que funcione bien

Meson instala el módulo Python en ~/.local/lib/python3/dist-packages/, que es la ruta de Debian pero no está en el sys.path por defecto. Sin ese path, el ejecutable falla con un ModuleNotFoundError. La solución es añadirlo al .bashrc:

echo 'export PYTHONPATH="$HOME/.local/lib/python3/dist-packages:$PYTHONPATH"' >> ~/.bashrc
source ~/.bashrc

Con eso, el CLI funciona desde terminal. Sin embargo, las aplicaciones lanzadas desde el escritorio no cargan el .bashrc, así que el menú de inicio sigue sin arrancar la app. La solución más limpia es reemplazar el ejecutable por un wrapper que lleve el entorno incorporado:

cat > ~/.local/bin/whatcable-linux << 'EOF'
#!/bin/bash
export PYTHONPATH="$HOME/.local/lib/python3/dist-packages:$PYTHONPATH"
export GTK_A11Y=none
exec python3 -m whatcable_linux "$@"
EOF
chmod +x ~/.local/bin/whatcable-linux

La variable GTK_A11Y=none silencia un warning inofensivo sobre el bus de accesibilidad, que no está disponible en Raspberry Pi OS por defecto.

Por último, el archivo .desktop que crea meson usa el nombre del comando sin ruta absoluta. En el entorno gráfico eso falla porque ~/.local/bin no siempre está en el PATH de la sesión. Se corrige así:

sed -i \
    "s|Exec=whatcable-linux|Exec=/home/$USER/.local/bin/whatcable-linux|" \
    ~/.local/share/applications/com.nedrichards.WhatCable.desktop

update-desktop-database ~/.local/share/applications/

Después de esto, la app arranca tanto desde terminal como desde el menú de aplicaciones.

Un ejemplo real de salida

Con los ajustes hechos, esto es lo que muestra WhatCable en la Raspberry Pi 4 con tres periféricos conectados: el hub interno VL805 del chip USB 3.0, un adaptador USB con tarjeta SD dentro y el receptor Logitech Unifying del teclado y ratón inalámbrico.

WhatCable con el USB2.0 Hub seleccionado en el panel izquierdo. El panel derecho muestra el hub interno VIA Labs VL805 (2109:3431): 480 Mbps, USB 2.10, 100 mA declarados, 1 interfaz. Es el dispositivo 1-1, la raíz del bus desde la que cuelgan el resto.

El primer dispositivo que aparece en la lista es el hub USB 2.0 interno (2109:3431). Es el VIA Labs VL805, el controlador que gestiona los cuatro puertos USB-A de la Pi 4. Aparece a 480 Mbps y con 100 mA declarados, lo esperable en un hub de bus alimentado por la propia placa.

WhatCable con la Generic USB2.0 card seleccionada. Panel derecho: Silicon Motion 090c:6200, 480 Mbps, USB 2.00, 500 mA declarados, 1 interfaz, driver usb-storage, dispositivo 1-1.2.

El segundo es el adaptador USB con tarjeta SD (090c:6200, Silicon Motion). Esta Pi 4 tiene el slot microSD dañado, así que el almacenamiento principal va por USB mediante un adaptador. WhatCable lo identifica correctamente como dispositivo de almacenamiento con driver usb-storage, 480 Mbps y 500 mA declarados. Esos 500 mA son el máximo que el adaptador dice que puede necesitar; en la práctica consume bastante menos.

WhatCable con el USB Receiver de Logitech seleccionado. Panel derecho: 046d:c52b, 12 Mbps, USB 2.00, 98 mA, 3 interfaces (teclado, ratón y canal de datos del protocolo Unifying), dispositivo 1-1.3.

El tercero es el receptor Logitech Unifying (046d:c52b). Negocia a 12 Mbps, que es Full Speed, lo normal para dispositivos HID. Lo interesante aquí son las tres interfaces: una para el teclado, otra para el ratón y una tercera para el canal de datos del protocolo Unifying. Todo visible en el panel de detalle. Consume 98 mA declarados.

El apartado typec_ports llega vacío en los tres casos, exactamente como se esperaba. La app muestra 8 dispositivos en total porque también cuenta el hub raíz del bus USB 3.0 y los nodos internos del xHCI, que aparecen en la sección Advanced Sources.

La app tiene menos de dos semanas de vida y ya es funcional en Raspberry Pi OS con cuatro ajustes concretos. Para lo que cuesta instalarlo, ver de un vistazo el consumo declarado de cada periférico USB conectado a la Pi vale la pena, especialmente si tienes un disco externo, un hub o varios dispositivos enchufados a la vez y quieres saber si estás cerca del límite de los 600 mA que da la placa con una fuente de 3A. También me ha servido para ver que algunos cables USB que tenía eran bastante malos en cuestión de velocidad, así que compré un par de Amazon Basics que realmente funcionan y ha sido un descubrimiento.

Amazon Basics Cable de carga rápida con adaptador USB-C a USB-A 3.1 Gen 2, alta velocidad de 10 Gbps

Amazon Basics Cable de carga rápida con adaptador USB-C a USB-A 3.1 Gen 2, alta velocidad de 10 Gbps

5,77€

Comprar en Amazon

Como Asociado de Amazon, gano por compras calificadas. Este enlace es un enlace de afiliado, lo que significa que puedo ganar una comisión si realizas una compra a través de estos enlaces, sin costo adicional para ti.

El repositorio del port GNOME está en github.com/nedrichards/whatcable-linux. El port para KDE Plasma 6 en github.com/Zetaphor/whatcable-linux. Y la app original para macOS en github.com/darrylmorley/whatcable.

Artículos relacionados:

  • DSC_0688_thumb.jpg
    Opinión D-Link Hi-Speed USB 2.0 4-Port Hub
  • orange-pi-pc2-header
    Rivales Raspberry Pi: Orange Pi PC 2
  • odroid u3 sin disipador nacked
    ODROID-U3 vs ODROID-U2
  • cozyswan_mk809_ii
    Opinión Android mini PC COZYSWAN MK809 II TV stick

Publicado en: Proyectos Etiquetado como: whatcable

Barra lateral principal

α Fotografía El lado analógico de manuti

Categorías

  • Cajas (9)
  • comandos (21)
  • Compras (116)
  • dudas (41)
  • Empezando (55)
  • Hardware (110)
  • Instalacion (64)
  • Media Center (56)
  • Negocios (5)
  • Proyectos (45)
  • Rivales (114)
  • Sistemas Operativos (70)
  • sorteo (2)
Raspberry Pi 5 - 4GB RAM
Raspberry Pi 5 - 4GB RAM
Ver precio en Amazon →
Raspberry Pi Zero 2W
Raspberry Pi Zero 2W
Ver precio en Amazon →

Por si te lo perdiste

touch display 2 10"

Touch Display 2 de 10″: la pantalla más grande

ubuntu ama a arm

Ubuntu apuesta fuerte por ARM: ya es arquitectura principal

NasberryPi

NasberryPi: NAS fácil con Raspberry Pi

Raspberry Pi 5 - 8GB RAM
Raspberry Pi 5 - 8GB RAM
Ver precio en Amazon →

Visita la tienda Raspberry Pi en Amazon - enlace afiliado
© 2013–2026

Cookie y RGPD | Aviso Legal
Este sitio web usa cookies para mejorar su experiencia como usuario ► «Aceptar todo» Rechazar Elegir cookies ◘ Si necesita Política de cookies
Política de Cookies

Resumen de privacidad

Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. De estas cookies, las clasificadas como necesarias se almacenan en tu navegador, ya que son esenciales para el funcionamiento de las funcionalidades básicas del sitio web. También utilizamos cookies de terceros que nos ayudan a analizar y entender cómo usas este sitio web. Estas cookies se almacenarán en tu navegador únicamente con tu consentimiento. También tienes la opción de rechazarlas. Sin embargo, rechazar algunas de estas cookies puede afectar a tu experiencia de navegación.
Necessary
Siempre activado
Las cookies necesarias son imprescindibles para el funcionamiento correcto del sitio web. Esta categoría solo incluye cookies que garantizan las funcionalidades básicas y las características de seguridad del sitio. Estas cookies no almacenan ninguna información personal.
CookieDuraciónDescripción
cookielawinfo-checkbox-advertisement1 añoEstablecida por el plugin GDPR Cookie Consent, esta cookie registra el consentimiento del usuario para las cookies de la categoría "Advertisement".
cookielawinfo-checkbox-analytics1 añoEstablecida por el plugin GDPR Cookie Consent, esta cookie registra el consentimiento del usuario para las cookies de la categoría "Analytics".
cookielawinfo-checkbox-comentarios1 añoEstablecida por el plugin GDPR Cookie Consent, esta cookie registra el consentimiento del usuario para las cookies de la categoría "Comentarios (Disqus)".
cookielawinfo-checkbox-functional1 añoEstablecida por el plugin GDPR Cookie Consent, esta cookie registra el consentimiento del usuario para las cookies de la categoría "Functional".
cookielawinfo-checkbox-necessary1 añoEstablecida por el plugin GDPR Cookie Consent, esta cookie registra el consentimiento del usuario para las cookies de la categoría "Necessary".
cookielawinfo-checkbox-others1 añoEstablecida por el plugin GDPR Cookie Consent, esta cookie almacena el consentimiento del usuario para las cookies de la categoría "Others".
cookielawinfo-checkbox-performance1 añoEstablecida por el plugin GDPR Cookie Consent, esta cookie almacena el consentimiento del usuario para las cookies de la categoría "Performance".
CookieLawInfoConsent1 añoCookieYes establece esta cookie para registrar el estado por defecto de los botones de cada categoría y el estado de la CCPA. Funciona únicamente en coordinación con la cookie principal.
wpEmojiSettingsSupportssesiónWordPress establece esta cookie cuando un usuario interactúa con emojis en un sitio WordPress. Ayuda a determinar si el navegador del usuario puede mostrar los emojis correctamente.
__cf_bm1 horaEsta cookie, establecida por Cloudflare, se utiliza para dar soporte a la gestión de bots de Cloudflare.
Functional
Las cookies funcionales ayudan a realizar ciertas funciones como compartir el contenido del sitio web en redes sociales, recoger comentarios y otras características de terceros.
CookieDuraciónDescripción
VISITOR_INFO1_LIVE6 mesesCookie establecida por YouTube para medir el ancho de banda y determinar si el usuario recibe la interfaz de reproductor nueva o antigua.
ytidb::LAST_RESULT_ENTRY_KEYnuncaYouTube utiliza esta cookie para almacenar la última entrada de resultados de búsqueda en la que hizo clic el usuario. Esta información se usa para mejorar la experiencia ofreciendo resultados más relevantes en el futuro.
Performance
Las cookies de rendimiento se utilizan para entender y analizar los índices clave de rendimiento del sitio web, lo que ayuda a ofrecer una mejor experiencia de usuario a los visitantes.
Analytics
Las cookies analíticas se utilizan para entender cómo interactúan los visitantes con el sitio web. Estas cookies ayudan a ofrecer información sobre métricas como el número de visitantes, la tasa de rebote, la fuente de tráfico, etc.
CookieDuraciónDescripción
YSCsesiónCookie establecida por YouTube que se usa para hacer seguimiento de las visualizaciones de vídeos embebidos en páginas de YouTube.
Advertisement
Las cookies de publicidad se utilizan para ofrecer a los visitantes anuncios y campañas de marketing relevantes. Estas cookies rastrean a los visitantes a través de distintos sitios web y recopilan información para mostrar anuncios personalizados.
CookieDuraciónDescripción
VISITOR_PRIVACY_METADATA6 mesesYouTube establece esta cookie para almacenar el estado de consentimiento de cookies del usuario para el dominio actual.
__Secure-ROLLOUT_TOKEN6 mesesYouTube utiliza esta cookie para gestionar el despliegue de funciones y la experimentación. Ayuda a Google a controlar qué funciones nuevas o cambios de interfaz se muestran a los usuarios como parte de pruebas y despliegues escalonados, garantizando una experiencia coherente durante un experimento.
__Secure-YECsesiónCookie de YouTube. Se encarga de almacenar tus preferencias de reproducción de video (como el volumen, la calidad de video predeterminada o la configuración de subtítulos) cuando ves videos de YouTube incrustados en otras páginas web.
__Secure-YNID6 mesesCookie de YouTube utilizada para proteger la seguridad del usuario y prevenir el fraude, especialmente durante el proceso de inicio de sesión.
Others
Otras cookies sin clasificar son aquellas que están siendo analizadas y que todavía no se han asignado a ninguna categoría.
Comentarios (Disqus)
Las cookies de comentarios permiten mostrar y gestionar el sistema de comentarios de terceros (Disqus), incluyendo el registro de usuarios y el control de spam. Estas cookies solo se cargan si aceptas esta categoría.
CookieDuraciónDescripción
disqus_unique1 añoCookie de Disqus usada para el registro de usuarios y control de spam en los comentarios.
GUARDAR Y ACEPTAR
Funciona con CookieYes Logo