In molte situazioni, è molto desiderabile avere l'opportunità di condividere una periferica USB attraverso la rete. Per uno, se hai un intero team che utilizza un software con licenza costoso protetto con una chiave di sicurezza USB. Nessuno vuole spendere una fortuna in licenze individuali per ogni dipendente o scommettere con la perdita o il danneggiamento di detta chiave poiché verrà portata in giro per l'ufficio collegata a macchine diverse per tutto il giorno.
yum install [package];
Questo è tutto!
Da quel momento in poi, il dispositivo condiviso sarà accessibile in remoto da qualsiasi macchina Linux, Windows o Mac con FlexiHub installato e connessione Internet, indipendentemente dalla distanza fisica. Grazie all'esclusivo server di reindirizzamento USB, l'app è davvero una soluzione internetwork che funziona attraverso tutti i firewall e non richiede indirizzi IP pubblici.
E la ciliegina su questa torta è che non hai davvero bisogno di trasformare in modo permanente il tuo Raspberry Pi in un server USB-over-IP. Puoi condividere dispositivi USB da qualsiasi macchina con FlexiHub installato, incluso il tuo tablet Android, e non avere mai problemi con la connettività multipiattaforma. Da una macchina Windows, puoi persino condividere una periferica basata su COM. Quanto è fantastico? E, per una maggiore comodità, avrai l'opportunità di usufruire della connettività wireless accedendo ai dispositivi condivisi tramite Wi-Fi.
In linea di principio, questo metodo è simile a quello che abbiamo appena descritto, ma attraverso l'agenzia di un'app diversa. E dato che questa volta utilizzeremo una soluzione open source che è ancora in fase di sviluppo, il processo di configurazione richiede un discreto livello di competenza tecnica per funzionare, quindi se non ne hai, non sorprenderti se non funzionerà al primo tentativo.
Ecco alcuni punti più importanti che devi considerare prima di optare per questo metodo:
sudo apt install usbip
sudo modprobe usbip_host
echo 'usbip_host' >> /etc/modules
comando lsusb
per visualizzare un elenco di tutti i dispositivi USB fisicamente collegati al tuo Raspberry Pi e ricorda (o annota) il numero ID USB a 8 cifre di un dispositivo che stai per condividere. usbip list -p -l
per trovare l'ID bus del tuo dispositivo (utilizza il numero ID USB di un passaggio precedente per identificare il dispositivo corretto nell'elenco). Annota quel numero. sudo usbip bind --busid=N
usbipd
In alternativa, puoi creare un servizio systemd:
vi /lib/systemd/system/usbipd.service
con la seguente definizione (non dimenticare di cambiare la N per un numero ID USB effettivo del tuo dispositivo):
[Unit]
Description=usbip host daemon
After=network.target
[Service]
Type=forking
ExecStart=/usr/sbin/usbipd -D
ExecStartPost=/bin/sh -c "/usr/sbin/usbip bind --$(/usr/sbin/usbip list -p -l | grep '#usbid=N#' | cut '-d#' -f1)"
ExecStop=/bin/sh -c "/usr/sbin/usbip unbind --$(/usr/sbin/usbip list -p -l | grep '#usbid=N#' | cut '-d#' -f1); killall usbipd"
[Install]
WantedBy=multi-user.target
E poi dovrai eseguire questi comandi per avviare quel servizio:
sudo systemctl --system daemon-reload
sudo systemctl enable usbipd.service
sudo systemctl start usbipd.service
Ok, ora configuriamo un cliente:
Nota: l'app ha un client per Windows, ma è una versione beta fragile senza driver firmati o supporto per Windows 10, quindi non vale davvero la pena menzionarla.
1. Per installare la stessa app per la condivisione di USB su IP in Ubuntu, esegui questi comandi:
sudo -s
apt-get install linux-tools-generic -y
2. Abilita il modulo richiesto:
modprobe vhci-hcd
echo 'vhci-hcd' >> /etc/modules
Ora, per connettere il dispositivo condiviso a questa macchina, esegui il comando: sudo usbip attach -r 0.0.0.0
(digita l'indirizzo IP effettivo del tuo Raspberry Pi invece di 0.0.0.0)
Oppure puoi creare un servizio systemd:
vi /lib/systemd/system/usbip.service
Con la definizione (sostituisci N con un numero ID USB effettivo del tuo dispositivo e 0.0.0.0 con l'indirizzo IP del tuo Raspberry):
[Unit] Description=usbip client After=network.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/sh -c "/usr/lib/linux-tools/$(uname -r)/usbip attach -r 0.0.0.0 -b $(/usr/lib/linux-tools/$(uname -r)/usbip list -r 0.0.0.0 | grep 'N' | cut -d: -f1)" ExecStop=/bin/sh -c "/usr/lib/linux-tools/$(uname -r)/usbip detach --port=$(/usr/lib/linux-tools/$(uname -r)/usbip port | grep '<Port in Use>' | sed -E 's/^Port ([0-9][0-9]).*/\1/')" [Install] WantedBy=multi-user.target
Salva, quindi esegui questi comandi per avviare il servizio:
sudo systemctl --system daemon-reload
sudo systemctl enable usbip.service
sudo systemctl start usbip.service
Dopodiché, dovresti essere in grado di accedere al dispositivo condiviso da remoto. In caso contrario, riprova tutti i passaggi dall'inizio.
Importante! Se scolleghi un dispositivo USB dal Raspberry Pi mentre è condiviso con questo metodo, potrebbe verificarsi una perdita permanente di dati. Spegni prima il tuo lampone.
Server proxy | Server proxy | Server di reindirizzamento • non c'è bisogno di IP esterno • comunicazione multi-rete • funziona attraverso il firewall | N/A |
Piattaforme supportate: | Piattaforme supportate: | | |
Lato server | Lato server | ✓ Windows ✓ Linux ✓ macOS ✓ Android | ✓ Linux |
Dalla parte del cliente | Dalla parte del cliente | ✓ Windows ✓ Linux ✓ macOS | ✓ Windows (beta) ✓ Linux |
Firmware per microcontrollori | Firmware per microcontrollori | Raspberry (su richiesta) | N/A |
Sicurezza | Sicurezza | Token di accesso per la condivisione sicura dell'account Blocca per il controllo dell'accesso al dispositivo | N/A |
Crittografia | Crittografia | SSL a 2048 bit | N/A |
Stabilità migliorata | Stabilità migliorata | Opzione Mantieni la connessione attiva | N/A |
Di sicuro, spetta totalmente a te decidere quale dei due metodi descritti in questo articolo intendi adottare. Ma non sarebbe meglio investire in uno strumento facile da gestire con comprovata efficienza piuttosto che fare affidamento su qualcosa che può fallire in qualsiasi momento e causare chissà quanti nervi, tempo e denaro a causa di tempi di inattività non pianificati.