Skip to content

Installation

stevenboyd78 edited this page Jul 30, 2026 · 5 revisions

Installation

Important

This page is a task-oriented guide. The repository README is the canonical installation reference.

Requirements

  • Python 3.11 or newer
  • A Uniden SDS100, SDS150, or SDS200 scanner
  • A USB serial connection for any supported model, or a trusted local network for native SDS200 Ethernet features
  • FFmpeg with libmp3lame for the Broadcastify adapter
  • A working PortAudio environment for optional local playback

Install from PyPI

Install the library and sdsctl command:

python -m pip install sds200

Install the optional Textual full-screen interface:

python -m pip install "sds200[tui]"

Install optional local audio playback:

python -m pip install "sds200[playback]"

Install both optional feature groups:

python -m pip install "sds200[tui,playback]"

Verify the installation:

sdsctl --version
sdsctl --help

Use a virtual environment

A virtual environment keeps the package and optional dependencies isolated:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install "sds200[tui,playback]"

Activate the environment again before using its sdsctl command:

source .venv/bin/activate

Install from source

git clone https://github.com/stevenboyd78/sds200-python.git
cd sds200-python

python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"

Run the project checks before contributing:

ruff check .
mypy src/sds200
pytest
python scripts/check_docs.py
git diff --check

Linux USB permissions

Some Linux systems do not automatically grant the active user access to the scanner serial port. The project includes an optional udev rule that uses systemd-logind uaccess, retains a dialout fallback, and prevents ModemManager from probing matching scanners.

Follow the canonical Linux udev guide rather than making scanner devices globally writable.

Inspect stable device paths with:

ls -l /dev/serial/by-id/

Optional FFmpeg support

Check that FFmpeg exposes the MP3 encoder required by the Broadcastify adapter:

ffmpeg -version | head -n 1
ffmpeg -hide_banner -encoders 2>/dev/null | grep -F libmp3lame

The encoder listing should contain libmp3lame.

First connection

Try automatic USB discovery:

sdsctl discover
sdsctl info

For an SDS200 on Ethernet:

sdsctl discover --network 192.168.0.0/24 --network-only
sdsctl --host SCANNER_IP info

Only scan networks you own or are authorized to probe.

Next steps

  • Launch the terminal monitor with sdsctl monitor.
  • Launch the optional TUI with sdsctl tui.
  • Read the canonical TUI guide.
  • Read the canonical network audio guide.
  • Open Troubleshooting when discovery or startup fails.

Clone this wiki locally