Skip to main content

A Python USB/IP server for sharing USB devices over the network

Project description

usbipd-python

Downloads REUSE Compliant Lint

A USB/IP server written in Python 3 for sharing USB devices over the network. This implementation uses the pyusb library and the libusb backend to support cross-platform USB device access on macOS and Linux.

Note: This is an early-stage implementation, primarily created for learning purposes. Simple USB devices generally work well, but more complex or HID-based devices may experience issues. HID devices are managed by OS kernel drivers on macOS and Windows, making them difficult to detach without OS-native code or custom drivers. Contributions are welcome!

Installation

Users

Install from PyPI:

pip install usbipd-python
usbipd --help

Developers

  1. Clone the repository:

    git clone https://github.com/abrinkman/usbipd-python.git
    cd usbipd-python
    
  2. Create and activate a virtual environment:

    python3 -m venv .venv
    source .venv/bin/activate
    
  3. Install in development mode with dev dependencies:

    pip install -e ".[dev]"
    

System Requirements

  • Python: 3.9 or higher
  • libusb: Install using your system package manager
    • macOS: brew install libusb
    • Linux (Debian/Ubuntu): sudo apt-get install libusb-1.0-0-dev
    • Linux (Fedora/RHEL): sudo dnf install libusbx-devel

Usage

List USB Devices

Display all available USB devices:

usbipd-python list

Bind a Device

Bind a USB device by its bus ID to make it available for sharing:

usbipd-python bind --bus-id <bus-id>

Bindings are stored persistently using the device's VID:PID:serial for future recognition, even if the bus ID changes. Devices without a serial number are matched by VID:PID only.

Start the Server

Start the USB/IP server (requires root/sudo on macOS):

sudo usbipd-python start

Add -v or --verbose for debug output:

sudo usbipd-python -v start

Connect to the Server

Use a USB/IP client on another machine to connect and access shared devices.

Development

Code Quality

Run linting and formatting checks using ruff:

ruff check .          # Check for linting issues
ruff format --check . # Check code formatting
ruff format .         # Auto-format code

Run type checking:

mypy --ignore-missing-imports .

Project Structure

  • usbipd.py - Main CLI entry point using argparse
  • usb_device.py - USBDevice wrapper class for pyusb device access
  • usbip_server.py - USBIPServer class implementing the USB/IP protocol
  • binding_configuration.py - BindingConfiguration class for XML-based device binding storage
  • libusb_backend.py - Cross-platform libusb backend loader for pyusb

License

Licensed under GPL-3.0. See LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

usbipd-0.0.6.tar.gz (47.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

usbipd-0.0.6-py3-none-any.whl (31.3 kB view details)

Uploaded Python 3

File details

Details for the file usbipd-0.0.6.tar.gz.

File metadata

  • Download URL: usbipd-0.0.6.tar.gz
  • Upload date:
  • Size: 47.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for usbipd-0.0.6.tar.gz
Algorithm Hash digest
SHA256 1e4b00e381cb41f4533253b1c76d86a4a55de6e0da585ede3be1725093d3bd99
MD5 e29c9528cef68f9d2036eea0789922a2
BLAKE2b-256 d4af93026584427df2479df69ebb8650ec94d8c2b6879574e81a0d94574bb252

See more details on using hashes here.

Provenance

The following attestation bundles were made for usbipd-0.0.6.tar.gz:

Publisher: publish.yml on abrinkman/usbipd-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file usbipd-0.0.6-py3-none-any.whl.

File metadata

  • Download URL: usbipd-0.0.6-py3-none-any.whl
  • Upload date:
  • Size: 31.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for usbipd-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 73598b31634f278168562f9786cfc6884f678e0d4f44bb0493be01db38901f39
MD5 109c4350c8d58eb1fce5fc0abfa27daf
BLAKE2b-256 c8455feb5062a33ac8755fa14ea120ccf926e3d2574546a5cfd1628a76d70f5f

See more details on using hashes here.

Provenance

The following attestation bundles were made for usbipd-0.0.6-py3-none-any.whl:

Publisher: publish.yml on abrinkman/usbipd-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page