<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>android - ChriSoft</title>
	<atom:link href="https://blog.chrisoft.io/blog/tag/android/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.chrisoft.io</link>
	<description>make it easy</description>
	<lastBuildDate>Sat, 31 Jan 2026 22:05:54 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>USB/IP en Linux: cómo usar USB remotos por red con USB/IP Web UI (guía paso a paso)</title>
		<link>https://blog.chrisoft.io/blog/2026/01/31/usb-ip-en-linux-como-usar-usb-remotos-por-red-con-usb-ip-web-ui-guia-paso-a-paso/</link>
					<comments>https://blog.chrisoft.io/blog/2026/01/31/usb-ip-en-linux-como-usar-usb-remotos-por-red-con-usb-ip-web-ui-guia-paso-a-paso/#respond</comments>
		
		<dc:creator><![CDATA[Christopher]]></dc:creator>
		<pubDate>Sat, 31 Jan 2026 22:03:55 +0000</pubDate>
				<category><![CDATA[Homelab]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[administración de sistemas]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[raspberry pi]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[usb over ip]]></category>
		<category><![CDATA[usb remoto]]></category>
		<category><![CDATA[usbip]]></category>
		<category><![CDATA[usbip gui]]></category>
		<guid isPermaLink="false">https://blog.chrisoft.io/?p=494</guid>

					<description><![CDATA[<p>Controla dispositivos USB remotos desde Linux usando USB/IP con una interfaz web: añade el servidor, lista dispositivos y conéctalos/desconéctalos con un clic.</p>
<p>The post <a href="https://blog.chrisoft.io/blog/2026/01/31/usb-ip-en-linux-como-usar-usb-remotos-por-red-con-usb-ip-web-ui-guia-paso-a-paso/">USB/IP en Linux: cómo usar USB remotos por red con USB/IP Web UI (guía paso a paso)</a> first appeared on <a href="https://blog.chrisoft.io">ChriSoft</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Hoy traigo un programa que he realizado durante estos días. Lo que encontraba por la red no terminaba de gustarme así que decidí hacer uno a medida.</p>



<h2 class="wp-block-heading">1) Qué es esto y para qué sirve</h2>



<p><strong>USB/IP Web UI</strong> es una pequeña aplicación, realizada en NodeJS, que instalas en tu <strong>PC Linux (cliente)</strong> para poder:</p>



<ul class="wp-block-list">
<li>Añadir la <strong>IP del servidor USB/IP remoto</strong></li>



<li>Ver la lista de <strong>dispositivos USB exportados</strong> por ese servidor</li>



<li><strong>Conectar (attach)</strong> y <strong>Desconectar (detach)</strong> esos dispositivos con botones</li>



<li>Activar <strong>auto-conectar</strong> para que ciertos dispositivos se vuelvan a conectar automáticamente</li>
</ul>



<p>En pocas palabras:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Te permite “enchufar” (virtualmente) un USB que está en otro equipo de tu red, y que en tu Linux aparezca como si lo tuvieras conectado físicamente.</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2) Cómo funciona</h2>



<p>Qué se necesita:</p>



<h3 class="wp-block-heading">A) Servidor USB/IP (remoto)</h3>



<p>Es el equipo que <strong>tiene el USB físico</strong> conectado y lo comparte por la red mediante USB/IP.<br>Ejemplos típicos:</p>



<ul class="wp-block-list">
<li>Un móvil Android con un servidor USB/IP</li>



<li>Un ordenador con <code>usbip</code> exportando el dispositivo</li>
</ul>



<h3 class="wp-block-heading">B) Cliente Linux (tu PC) con USB/IP Web UI</h3>



<p>La Web UI se ejecuta en tu ordenador y por detrás hace cosas como:</p>



<ul class="wp-block-list">
<li>Listar exportaciones remotas:</li>



<li><code>usbip list --remote &lt;IP&gt;</code></li>



<li>Conectar un dispositivo (attach):</li>



<li><code>usbip attach -r &lt;IP&gt; -b &lt;BUSID&gt;</code></li>



<li>Ver y gestionar conexiones activas:</li>



<li><code>usbip port</code></li>



<li><code>usbip detach -p &lt;PUERTO&gt;</code></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">3) Qué necesitas (requisitos)</h2>



<h3 class="wp-block-heading">En tu Linux (cliente)</h3>



<ul class="wp-block-list">
<li><strong>Node.js</strong> (recomendado Node 18+ / 20+)</li>



<li><strong><code>usbip</code></strong> instalado</li>



<li>El módulo del kernel <strong><code>vhci-hcd</code></strong> cargado</li>



<li>Permisos de administrador (<strong>sudo</strong>) para conectar/desconectar (estoy preparando una <strong>versión rootless</strong>)</li>
</ul>



<h3 class="wp-block-heading">En el servidor remoto</h3>



<ul class="wp-block-list">
<li>Un servidor USB/IP funcionando</li>



<li>Que el dispositivo esté <strong>exportado</strong></li>



<li>Acceso de red desde tu ordenador a <code>&lt;IP&gt;:3240</code></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">4) Instalación paso a paso</h2>



<h3 class="wp-block-heading">4.1) Instala NodeJS y usbip en Linux</h3>



<p>En Debian/Ubuntu suele ser:</p>



<pre class="wp-block-preformatted">sudo apt update<br>sudo apt install -y usbip curl<br>curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash<br>nvm install 24</pre>



<h3 class="wp-block-heading">4.2) Carga el módulo del kernel (una vez)</h3>



<pre class="wp-block-code"><code>sudo modprobe vhci-hcd</code></pre>



<p>Comprueba que está cargado:</p>



<pre class="wp-block-code"><code>lsmod | grep vhci</code></pre>



<h3 class="wp-block-heading">4.3) Descomprime la Web UI y prepara dependencias</h3>



<p>1) Descarga el ZIP del proyecto y descomprímelo.<br>2) Entra en la carpeta descomprimida:</p>



<pre class="wp-block-code"><code>cd usbip-webui-0.1.0</code></pre>



<p>3) Instala dependencias:</p>



<pre class="wp-block-code"><code>npm install</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">5) Arrancar el servidor web (Web UI)</h2>



<p>Para que puedas acceder a la interfaz desde otro dispositivo de tu red, ejecuta:</p>



<pre class="wp-block-code"><code>sudo env HOST=0.0.0.0 PORT=8765 node server.js</code></pre>



<ul class="wp-block-list">
<li><code>HOST=0.0.0.0</code> &#8211; escucha en todas las interfaces (LAN)</li>



<li><code>PORT=8765</code> &#8211; puerto donde abrirás el navegador</li>
</ul>



<h3 class="wp-block-heading">Abrir la interfaz</h3>



<ul class="wp-block-list">
<li>En el mismo ordenador: <code>http://127.0.0.1:8765</code></li>



<li>Desde otro dispositivo: <code>http://IP_DE_TU_ORDENADOR:8765</code></li>
</ul>



<p>Para saber la IP en Linux:</p>



<pre class="wp-block-code"><code>ip -4 addr</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Nota: <code>0.0.0.0</code> NO es una IP a la que conectarse. Es solo para permitir conexiones desde otros dispositivos de tu red. Para abrir la web tienes que usar la IP real de tu PC (por ejemplo <code>192.168.1.50</code>).</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">6) Acceso, login y seguridad básica</h2>



<p>El webif trae login por defecto:</p>



<ul class="wp-block-list">
<li>Usuario: <strong>admin</strong></li>



<li>Contraseña: <strong>usbip</strong></li>
</ul>



<p>Se recomienda cambiar las credenciales por unas propias.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">7) Uso: añadir servidor, refrescar, conectar y desconectar</h2>



<h3 class="wp-block-heading">7.1) Añadir y seleccionar un servidor remoto</h3>



<p>En la tarjeta <strong>Servidores</strong>:</p>



<p>1) En “Nuevo servidor (IP/Host)”, pon la IP (ej. <code>192.168.1.10</code>)<br>2) “TCP port” normalmente <strong>3240</strong><br>3) Pulsa <strong>Añadir</strong><br>4) Selecciónalo en el desplegable y pulsa <strong>Usar</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img fetchpriority="high" decoding="async" width="1024" height="189" src="https://blog.chrisoft.io/wp-content/uploads/2026/01/image-1024x189.png" alt="" class="wp-image-510" srcset="https://blog.chrisoft.io/wp-content/uploads/2026/01/image-1024x189.png 1024w, https://blog.chrisoft.io/wp-content/uploads/2026/01/image-300x55.png 300w, https://blog.chrisoft.io/wp-content/uploads/2026/01/image-768x141.png 768w, https://blog.chrisoft.io/wp-content/uploads/2026/01/image-665x123.png 665w, https://blog.chrisoft.io/wp-content/uploads/2026/01/image.png 1129w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h3 class="wp-block-heading">7.2) Ver dispositivos exportados (Refresh)</h3>



<p>En la tarjeta <strong>Dispositivos</strong>, pulsa <strong>Refrescar</strong>.</p>



<p>Verás una tabla con:</p>



<ul class="wp-block-list">
<li><strong>BUSID</strong> (identificador del dispositivo en el servidor)</li>



<li><strong>Descripción</strong> (nombre del dispositivo)</li>



<li><strong>VID:PID</strong> (identidad del dispositivo, útil para auto-conectar)</li>



<li><strong>Auto</strong> (checkbox)</li>



<li><strong>Conectar / Desconectar</strong></li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="185" src="https://blog.chrisoft.io/wp-content/uploads/2026/01/image-1-1024x185.png" alt="" class="wp-image-511" srcset="https://blog.chrisoft.io/wp-content/uploads/2026/01/image-1-1024x185.png 1024w, https://blog.chrisoft.io/wp-content/uploads/2026/01/image-1-300x54.png 300w, https://blog.chrisoft.io/wp-content/uploads/2026/01/image-1-768x139.png 768w, https://blog.chrisoft.io/wp-content/uploads/2026/01/image-1-665x120.png 665w, https://blog.chrisoft.io/wp-content/uploads/2026/01/image-1.png 1129w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h3 class="wp-block-heading">7.3) Conectar (attach)</h3>



<p>Pulsa <strong>Conectar</strong> en el dispositivo que quieras.</p>



<p>Ahora debería aparecer en tu Linux como un USB “real”. Dependiendo del tipo:</p>



<ul class="wp-block-list">
<li>USB-Serial → <code>/dev/ttyUSB0</code> (o similar)</li>



<li>Almacenamiento → aparecerá en el sistema de discos</li>



<li>HID (teclado/ratón) → funcionará directamente</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="283" height="201" src="https://blog.chrisoft.io/wp-content/uploads/2026/01/image-3.png" alt="" class="wp-image-513" srcset="https://blog.chrisoft.io/wp-content/uploads/2026/01/image-3.png 283w, https://blog.chrisoft.io/wp-content/uploads/2026/01/image-3-60x42.png 60w" sizes="(max-width: 283px) 100vw, 283px" /></figure>
</div>


<h3 class="wp-block-heading">7.4) Desconectar (detach)</h3>



<p>Pulsa <strong>Desconectar</strong> en el dispositivo.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="310" height="202" src="https://blog.chrisoft.io/wp-content/uploads/2026/01/image-4.png" alt="" class="wp-image-514" srcset="https://blog.chrisoft.io/wp-content/uploads/2026/01/image-4.png 310w, https://blog.chrisoft.io/wp-content/uploads/2026/01/image-4-300x195.png 300w" sizes="auto, (max-width: 310px) 100vw, 310px" /></figure>
</div>


<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">8) Auto-conectar: mantener dispositivos conectados</h2>



<p>Si activas el checkbox <strong>Auto</strong> en un dispositivo, la aplicación lo conectará cada vez que el servidor lo exporte.</p>



<h3 class="wp-block-heading">Cambiar el intervalo</h3>



<p>En el <strong>Web UI</strong> cambia “Intervalo auto-conectar (seg)” y pulsa guardar.</p>



<p>Consejo:</p>



<ul class="wp-block-list">
<li>5–10 segundos suele ir bien en LAN</li>



<li>Si el servidor remoto es inestable, sube el intervalo para no “machacar” el puerto 3240</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">9) Problemas típicos</h2>



<h3 class="wp-block-heading">No puedo abrir la Web UI desde otro dispositivo</h3>



<p>1) Arráncalo así (muy importante el <code>env</code>):</p>



<pre class="wp-block-code"><code>sudo env HOST=0.0.0.0 PORT=8765 node server.js</code></pre>



<p>2) Comprueba que escucha en <code>0.0.0.0</code>:</p>



<pre class="wp-block-code"><code>sudo ss -lntp | grep 8765</code></pre>



<p>3) Si hay firewall (ufw):</p>



<pre class="wp-block-code"><code>sudo ufw allow 8765/tcp</code></pre>



<h3 class="wp-block-heading">Error “could not connect to :3240”</h3>



<ul class="wp-block-list">
<li>El servidor USB/IP remoto no está activo</li>



<li>Puerto 3240 bloqueado</li>



<li>IP incorrecta</li>
</ul>



<p>Prueba conectividad:</p>



<pre class="wp-block-code"><code>nc -zv 192.168.1.10 3240</code></pre>



<h3 class="wp-block-heading">Conecto pero el dispositivo no aparece</h3>



<p>Mira logs del kernel:</p>



<pre class="wp-block-code"><code>dmesg -w</code></pre>



<p>Lista puertos USB/IP:</p>



<pre class="wp-block-code"><code>sudo usbip port</code></pre>



<h3 class="wp-block-heading">Comprobar “a mano” si el servidor exporta bien</h3>



<pre class="wp-block-code"><code>sudo usbip list --remote 192.168.1.10</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">10) Descargas</h2>



<div class="wp-block-file"><a id="wp-block-file--media-9b7ffd4c-8f62-45e7-92bf-af6eed96ea31" href="https://blog.chrisoft.io/wp-content/uploads/2026/01/usbip-webui-0.1.0.zip">usbip-webui-0.1.0</a><a href="https://blog.chrisoft.io/wp-content/uploads/2026/01/usbip-webui-0.1.0.zip" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-9b7ffd4c-8f62-45e7-92bf-af6eed96ea31">Descarga</a></div>



<p></p><p>The post <a href="https://blog.chrisoft.io/blog/2026/01/31/usb-ip-en-linux-como-usar-usb-remotos-por-red-con-usb-ip-web-ui-guia-paso-a-paso/">USB/IP en Linux: cómo usar USB remotos por red con USB/IP Web UI (guía paso a paso)</a> first appeared on <a href="https://blog.chrisoft.io">ChriSoft</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.chrisoft.io/blog/2026/01/31/usb-ip-en-linux-como-usar-usb-remotos-por-red-con-usb-ip-web-ui-guia-paso-a-paso/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
