Skip to main content

a container that mounts remote devices locally using anywhereusb

Project description

CI Coverage PyPI License

awusb

Client-server software to share USB devices over the network.

Source https://github.com/epics-containers/awusb
PyPI pip install awusb
Docker docker run ghcr.io/epics-containers/awusb:latest
Releases https://github.com/epics-containers/awusb/releases

Documentation

Multi-Server Configuration

You can configure awusb to scan multiple USB device servers automatically. The client discovers configuration files in the following priority order:

  1. Environment variable: AWUSB_CONFIG=/path/to/config.yaml
  2. Project-local config: .awusb.config in current directory
  3. User config: ~/.config/awusb/awusb.config (default)

Create a configuration file with the following format:

servers:
  - localhost
  - raspberrypi
  - 192.168.1.100
  - usb-server-1.local

# Optional: Connection timeout in seconds (default: 5.0)
timeout: 5.0

See awusb.config.example for a sample configuration file.

Config File Discovery Examples

# Use default config from ~/.config/awusb/awusb.config
awusb list

# Use project-specific config from current directory
cd /path/to/project
echo "servers: [myserver]" > .awusb.config
awusb list

# Use environment variable (useful in CI/CD)
export AWUSB_CONFIG=/etc/awusb/production.config
awusb list

Connection Timeout

The timeout setting controls how long to wait when connecting to each server before giving up. This prevents the client from hanging when a server is unreachable. The default is 5 seconds, but you can adjust it based on your network conditions:

  • Fast local network: Use a shorter timeout (e.g., 2.0 seconds)
  • Slow or remote servers: Use a longer timeout (e.g., 10.0 seconds)

When a server times out, it's logged as a warning and skipped, allowing other servers to be queried.

Behavior

  • list: Without --host, queries all configured servers and displays devices grouped by server
  • attach/detach: Without --host, scans all servers to find a matching device
    • Fails if no match is found across all servers
    • Fails if multiple matches are found across different servers (unless --first is used)
    • Succeeds if exactly one match is found (reports which server it was found on)
    • With --first flag: Attaches the first matching device found, even if multiple servers have matching devices
  • --host flag: When specified, only queries that specific server (ignores config file)

Examples

# List devices on all configured servers
awusb list

# List devices on a specific server
awusb list --host raspberrypi

# Attach a device (scans all servers, fails if multiple matches)
awusb attach --desc "Camera"

# Attach first matching device across servers
awusb attach --desc "Camera" --first

# Attach a device from a specific server
awusb attach --desc "Camera" --host 192.168.1.100

# Detach with first match (if same device attached from multiple servers)
awusb detach --desc "Camera" --first

Installing as a Service

You can install the awusb server as a systemd service to run automatically at boot.

System Service (Recommended)

Install as a system service (runs at boot, before login):

# Install as system service (requires sudo)
sudo awusb install-service --system

# Enable and start
sudo systemctl enable awusb.service
sudo systemctl start awusb.service

# Check status
sudo systemctl status awusb.service

User Service (Not Recommended)

Install as a user service (runs when you log in) useful for testing if you don't have sudo access:

# Install the service
awusb install-service

# Enable it to start on login
systemctl --user enable awusb.service

# Start the service now
systemctl --user start awusb.service

# Check status
systemctl --user status awusb.service

# View logs
journalctl --user -u awusb.service -f

Uninstalling

# Uninstall user service
awusb uninstall-service

# Uninstall system service (requires sudo)
sudo awusb uninstall-service --system

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

awusb-1.0.0.tar.gz (99.4 kB view details)

Uploaded Source

Built Distribution

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

awusb-1.0.0-py3-none-any.whl (25.2 kB view details)

Uploaded Python 3

File details

Details for the file awusb-1.0.0.tar.gz.

File metadata

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

File hashes

Hashes for awusb-1.0.0.tar.gz
Algorithm Hash digest
SHA256 a6e8abf7bf323da7618d95ed6590157c47478a9cb96fffe19b0fdf058685581e
MD5 b5f3a15a7390e2f7316b62f099b1df58
BLAKE2b-256 5cd7287283efab4a3492d85e942b4fc8014e3b25942b00f5350a3485096dcfa0

See more details on using hashes here.

File details

Details for the file awusb-1.0.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for awusb-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f223364891340f4e3d87d6b5530953057234ac0087fc3f1dd7c3ae0ce804c6f6
MD5 193d48f3461a4c7a5e576d99366c6962
BLAKE2b-256 8ebef69c45bee4faffbc856511b5a6aa583e03ed92b4eb61eeace55640249afd

See more details on using hashes here.

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