# LXST Client Single-file Python application for managing LXST Channel connections via Reticulum Network (RNS) and LXMF protocols. Supports CLI and Whisplay HAT GUI modes. ## Running python client.py [-c CONFIGDIR] [-w WHITELIST] Options: -c, --config : config directory (default: ~/.lxst-client or /etc/lxst-client) -w, --whitelist : path to bridge_whitelist.json -v, --verbose : enable debug logging --rnsconfig : alternative Reticulum config directory ## Whisplay GUI Controls ## CLI Commands Inside the interactive client: d Discover channels from whitelist l List discovered channels Connect to channel at index NUM (1-based) h / ? Show help q Quit ## Whisplay GUI Controls ### Channel list (STATE_READY) Short press (<1s) Cycle to next channel in list Long press (>=1s) Call the selected channel ### In call — Push-to-Talk mode (default) Hold (>=1s) Talk (unmute microphone) Release Stop talking (mute microphone) Short press (<1s) Switch to always-on mode Double press Hang up ### In call — Always-on mode (toggled) Short press (<1s) Switch to push-to-talk mode Double press Hang up ### RGB LED indicates state: Blue = ready, showing channels Orange = calling Green = in call Yellow = transmitting (PTT mode, mic active) ## Initial Setup Order 1. Ensure ~/.lxst-client or /etc/lxst-client exists 2. Place bridge_whitelist.json in either directory (or pass with -w) 3. First run creates identity automatically at configdir/identity 4. In CLI mode: run `python client.py` then `d` to discover channels 5. In GUI mode: run `python client.py -W` — auto-discovers on startup 6. Messages appear in configdir/lxmf/ ## Known quirks - If bridge_whitelist.json is missing, client prints an error and returns. - Identity is auto-generated on first run if not present. - Use -v for RNS debug output (path discovery is verbose here). - Path discovery waits up to 10s for relays; increase timeout in client code if needed. - Whisplay mode requires Pillow and the Whisplay runtime (whisplay.py / whisplay_client.py). - Falls back to CLI gracefully if Whisplay hardware or dependencies are unavailable.