NKS UsbShare
Sdílení USB zařízení mezi počítači s Windows, Linuxem a macOS po šifrovaném spojení, v místní síti, přes VPN i přes internet. Bez balíčků z NuGetu.
Hardwarový klíč k licenci je zapojený v serveru ve sklepě, ale program, který ho potřebuje, běží ve virtuálním stroji na jiném hostiteli. Telefon leží u počítače v dílně a data z něj chcete stáhnout z notebooku v kanceláři. Na flashce zapojené do počítače s Windows je soubor, který potřebujete na Macu. NKS UsbShare v takových případech zpřístupní USB zařízení druhému počítači, jako by bylo zapojené přímo v něm, a to v místní síti, přes VPN i přes internet.
Virtualizace ani obyčejné USB/IP na to nestačí
Hypervizor předá USB zařízení jen virtuálnímu stroji na tom hostiteli, do kterého je zařízení fyzicky zapojené. Linux má pro USB po síti protokol USB/IP, ten ale data posílá nešifrovaně a klienty sám neověřuje. Windows k němu nemají vestavěný virtuální řadič a macOS vzdálené USB zařízení systému předat neumí vůbec.
NKS UsbShare vede každé spojení přes TLS a klienty pouští dovnitř až po spárování. Tam, kde systém potřebuje USB/IP, ho používá jen uvnitř jednoho počítače na adrese loopback, takže nešifrovaný protokol stroj nikdy neopustí. Po síti jde vždycky šifrované spojení NKS UsbShare.
Co z toho uživatel má
- Zařízení vidí každá aplikace. Vzdálená flashka se na Windows i na Linuxu připojí do systému a Průzkumník ji ukáže jako vyměnitelný disk.
- Na Windows bez ruční práce s ovladači. Zařízení, které drží systémový ovladač, aplikace sama přepne na
winusb.sysa tlačítkem ho zase vrátí. Uživatel jednou potvrdí práva správce a Secure Boot zůstává zapnutý. - Disk z jiného počítače přečte i Mac. Na macOS virtuální USB zařízení vytvořit nejde, proto NKS UsbShare mluví s diskem přímo přes SCSI a má vlastní čtečku FAT32. Výpis kořenového adresáře flashky zapojené do počítače s Windows takhle vznikl na Macu.
- Hostitel rozhoduje, kdo k čemu smí. U každého sdíleného zařízení se nastaví, které spárované počítače ho smějí používat. Zablokovaný počítač je odpojený okamžitě a všechno, co držel, se uvolní.
- Tři platformy, jedno ovládání. Okno ve WPF na Windows, v GTK 3 na Linuxu a v AppKitu na macOS má všude stejné rozvržení. Všechny funkce umí i příkazová řádka
nksusb. - Řídit to může i AI agent. Server MCP nabízí nástroje pro sdílení, párování, přístupová práva i převzetí vzdáleného zařízení. Podobně se dá přes MCP ovládat i celý vzdálený stroj nástrojem RemoteCmd.
- Žádné cizí balíčky. Řešení nepoužívá jediný balíček z NuGetu, ani v testech; protokol, vrstva SCSI, čtečka FAT32 i vazby na AppKit a GTK jsou přímo v repozitáři.
Jak zařízení projde sítí
Počítač, do kterého je zařízení zapojené, je hostitel. Druhý počítač, klient, mu posílá požadavky na přenos (URB): který koncový bod, jaký typ přenosu a jaká data. Hostitel je provede přes systém a vrátí výsledek. Spojení jde přes TCP na portu 57340. Řídicí, hromadné i přerušovací přenosy fungují všude, izochronní, které používají třeba webkamery, zatím jen linuxová část.
Na Windows aplikace k převzetí zařízení sama vygeneruje balíček ovladače, podepíše jeho katalog vlastním certifikátem a nainstaluje ho. Používá k tomu jen nástroje, které jsou součástí Windows, a Secure Boot nevadí, protože winusb.sys už podepsal Microsoft. Windows ale často nechá stát starý zásobník zařízení, dokud se zařízení neodpojí, a když čeká na restart počítače, nedovolí zařízení zakázat ani restartovat rozbočovač. Aplikace proto převzetí končí softwarovým odpojením a připojením portu na rozbočovači. Sdílené zařízení mezitím přestane fungovat jako obvykle: flashka zmizí z Průzkumníka a klávesnice přestane psát, dokud ji aplikace nevrátí.
Aby vzdálené zařízení viděl celý systém, je potřeba virtuální USB řadič, a ten umí vytvořit jen kód v jádře. Linux ho má, je to vhci_hcd. Na Windows používá NKS UsbShare řadič z projektu usbip-win2, jehož ovladače nesou podpis Microsoftu. Při prvním připojení zařízení aplikace ověří, jestli řadič funguje, případně stáhne pevně danou verzi 0.9.7.8, zkontroluje ji podle otisku SHA-256, nainstaluje a znovu spustí řadiče USB, které Windows při instalaci uspaly, aby na počítači nezůstala mrtvá klávesnice ani myš.

Kde se to hodí
- Virtuální stroj na jiném hostiteli. Ověřená cesta z README: flashka zapojená do jednoho počítače se přes VPN připojila do virtuálního stroje s Windows 11 na jiném hostiteli. Systém ji rozpoznal, připojil souborový systém a soubor o velikosti 2 MB se vrátil bajt po bajtu stejný.
- Licenční klíč nebo čtečka u serveru. Zařízení zůstane na jednom místě a používá ho počítač, na kterém zrovna běží program.
- Telefon nebo flashka v jiné místnosti.
- Flashka z Windows na Macu. Příkaz
nksusb storagepřečte kapacitu, oddíl, jmenovku svazku i obsah adresáře bez jakéhokoli ovladače.
Podobně zpřístupňuje hardware jiného počítače i NKS AudioLink, jen místo USB zařízení posílá zvuk do zvukové karty linuxového stroje.
Šifrování a párování
Každé spojení jde přes TLS 1.3 (nejníž 1.2) ještě před prvním bajtem protokolu. Uzel si při prvním spuštění vytvoří certifikát s klíčem P-384. Klient si otisk klíče hostitele zapamatuje při prvním připojení, a když se klíč později změní, spojení odmítne. Certifikační autorita v tom není, protože mezi dvěma počítači žádná třetí strana nestojí. Klient se vždy prokazuje vlastním klíčem, takže hostitel vidí, které počítače se připojily, a rozezná je. Volitelně jde zapnout vzájemné ověření, kdy hostitel pustí jen klíč, který už zná.
Dovnitř se dostane jen klient se 125bitovým párovacím tokenem, který se porovnává v konstantním čase. Token se ukazuje po pěti znacích a chybí v něm znaky, které se dají splést, takže jde nadiktovat.

Co je ověřené a co zatím ne
Na Windows a Linuxu prošly všechny funkce zkouškou na skutečném hardwaru. Na macOS je ověřený výpis zařízení, okno, příkazová řádka a používání vzdáleného zařízení z aplikace. Sdílení zařízení z Macu a přístupová práva jsou tam napsané, ale na skutečném Macu zatím neběžely. Předat vzdálené zařízení celému systému na macOS dnes nejde: Apple kromě HID virtuální USB zařízení nepovolí a rozšíření jádra by na Apple Silicon vyžadovalo snížit zabezpečení spouštění.
Poslední vydání 1.0.0 je z 13. srpna 2026. Softwarové odpojení portu místo restartu, nativní instalace ovladače a automatická instalace virtuálního řadiče přibyly do kódu téhož dne až po něm, takže zatím jsou jen v sestavení ze zdrojů.
Ke stažení
Sestavení jsou v GitHub Releases: okenní aplikace pro Windows x64, Linux x64 a macOS na Apple Silicon a zvlášť příkazová řádka a server MCP pro všechny tři systémy. Běhové prostředí .NET mají přibalené, archivy mají kolem 30 MB, okenní aplikace pro Windows 59 MB. V obchodech s aplikacemi NKS UsbShare není.
nksusb share 3 # na hostiteli: sdílet třetí zařízení
nksusb pair 192.0.2.10 ABCDE-FGHIJ-KLMNO-PQRST-UVWXY
nksusb attach 192.0.2.10 <device-id> # na klientovi: předat zařízení systému
Ze zdrojů se aplikace sestaví příkazem dotnet build, potřeba je .NET 9 SDK.
Zdrojový kód a licence
Kód je na github.com/nks-hub/nks-usbshare, napsaný v C# na .NET 9. Licence je proprietární: repozitář nemá licenční soubor a zveřejněný kód nedává právo ho používat, kopírovat, upravovat ani šířit. Řadič z usbip-win2, který si aplikace na Windows doinstaluje, má licenci BSD-2-Clause. O nasazení se dá domluvit na dev@nks-hub.cz.