Please forgive the formatting errors. I have built this over the last few days and will likely make many edits.
This guide if for those of you using Rex’s images for the uConsole, specifically ParrotOS, with the HackerGadgets AIO SDR/LoRa/BlahBlahBlah board. It also shows a few tweaks to get around localization issues with Parrot. These tips may be relevant on Kali also.
Reboot and login with your new user before installing AIO Package.
Fix Locale
1. Edit /etc/locale.gen:
Open the /etc/locale.gen file with a text editor as root:
sudo nano /etc/locale.gen
Uncomment the line corresponding to the desired locale (e.g., en_US.UTF-8 UTF-8 or en_GB.UTF-8 UTF-8) by removing the # symbol at the beginning of the line.
PROTIP: A USB keyboard won’t fix the # key you need to edit locale.gen. Use alt keys: Alt+35
Save the file and exit the editor.
2. Generate the locale:
Run the locale-gen command to generate the selected locale:
sudo locale-gen
3. Set the system locale:
Edit the /etc/default/locale file.
sudo nano /etc/default/locale
Ensure the file contains the following lines, replacing en_US.UTF-8 with your chosen locale:
LANG=en_US.UTF-8
Save the file and exit.
4. Reboot the system:
Reboot your Raspberry Pi for the changes to take effect:
sudo reboot
Then reconfigure the keyboard layout.
Open a terminal.
Run the following command with sudo privileges to start the configuration utility:
sudo dpkg-reconfigure keyboard-configuration
I had to choose OTHER > US > US Default > And no special key assignments.
A dialog-based interface will appear. Follow the on-screen prompts to select your keyboard model, country of origin, and desired layout.
Once you have made your selections, you may need to reboot your system for the changes to take effect.
Install HackerGadgets SDR AIO Board Package by Rex
To install the package in Debian (Parrot in our case!)
Hi there, Thanks for starting this thread. I wish I had seen it sooner as I would have followed it.
I am currently using the ParrotOS image by Rex - out of the box - The only change being the user,password and timezone. Meshtastic LoRa works great for me, so not sure if rex has made some recent changes to the script.
One thing I did have an issue with was that SDR++ Brown did not work. So after a serious session of letting chatGPT assist in problem solving - it worked. Not sure if it will be useful for anyone else but I asked GPT to compile everything into a single script - DISCLAIMER - I have not tried the script as I went through each stage manually in terminal - ChatGPT put this togther - So use at your own risk.
This is to build and pull SDR++ brown form Github and install all the necessary dependancies.
#!/usr/bin/env bash
# Build SDR++ Brown (PulseAudio-only) on ParrotOS / Pi CM4
# - Builds RtAudio (Pulse only)
# - Builds PortAudio (Pulse only)
# - Builds SDRPlusPlusBrown
# Re-run safe; will pull/refresh sources. Creates a build log for each stage.
set -euo pipefail
# -------- settings --------
PREFIX_LOCAL="/usr/local"
PKGCONF_LOCAL="${PREFIX_LOCAL}/lib/pkgconfig"
REPO_DIR="${HOME}/SDRPlusPlusBrown"
LOG_DIR="${HOME}/sdrpp-brown-build-logs"
mkdir -p "${LOG_DIR}"
# -------- helper --------
log() { printf "\n\033[1;32m[+] %s\033[0m\n" "$*"; }
export_debconf() { export DEBIAN_FRONTEND=noninteractive; }
# -------- 0. base deps --------
log "Installing base build dependencies and SDR front-end libs (no ALSA dev)"
export_debconf
sudo apt update
sudo apt install -y \
git cmake build-essential pkg-config \
libpulse-dev \
libusb-1.0-0-dev libhidapi-dev \
libfftw3-dev libglfw3-dev libvolk2-dev \
libairspy-dev libairspyhf-dev librtlsdr-dev libhackrf-dev \
libsoapysdr-dev libiio-dev \
qtbase5-dev | tee "${LOG_DIR}/00_deps.log"
# -------- 1. RtAudio (Pulse only) --------
log "Building RtAudio (Pulse only)"
cd "${HOME}"
if [ ! -d rtaudio ]; then
git clone https://github.com/thestk/rtaudio.git | tee "${LOG_DIR}/10_rtaudio_clone.log"
else
(cd rtaudio && git fetch --all && git reset --hard origin/master) | tee "${LOG_DIR}/10_rtaudio_update.log"
fi
mkdir -p rtaudio/build && cd rtaudio/build
cmake .. \
-DBUILD_SHARED_LIBS=ON \
-DRTAUDIO_API_ALSA=OFF \
-DRTAUDIO_API_PULSE=ON \
-DRTAUDIO_API_JACK=OFF \
-DRTAUDIO_BUILD_TESTING=OFF | tee "${LOG_DIR}/11_rtaudio_cmake.log"
make -j"$(nproc)" | tee "${LOG_DIR}/12_rtaudio_make.log"
sudo make install | tee "${LOG_DIR}/13_rtaudio_install.log"
sudo ldconfig
# -------- 2. PortAudio (Pulse only) --------
log "Building PortAudio (Pulse only)"
cd "${HOME}"
if [ ! -d portaudio ]; then
git clone https://github.com/PortAudio/portaudio.git | tee "${LOG_DIR}/20_portaudio_clone.log"
else
(cd portaudio && git fetch --all && git reset --hard origin/master) | tee "${LOG_DIR}/20_portaudio_update.log"
fi
mkdir -p portaudio/build && cd portaudio/build
cmake .. \
-DPA_USE_PULSEAUDIO=ON \
-DPA_USE_ALSA=OFF \
-DPA_USE_JACK=OFF | tee "${LOG_DIR}/21_portaudio_cmake.log"
make -j"$(nproc)" | tee "${LOG_DIR}/22_portaudio_make.log"
sudo make install | tee "${LOG_DIR}/23_portaudio_install.log"
sudo ldconfig
# -------- 3. Ensure pkg-config sees local installs --------
log "Ensuring PKG_CONFIG_PATH includes ${PKGCONF_LOCAL}"
export PKG_CONFIG_PATH="${PKGCONF_LOCAL}:${PKG_CONFIG_PATH:-}"
if ! grep -q "PKG_CONFIG_PATH=.*${PKGCONF_LOCAL}" "${HOME}/.profile" 2>/dev/null; then
echo "export PKG_CONFIG_PATH=${PKGCONF_LOCAL}:\$PKG_CONFIG_PATH" >> "${HOME}/.profile"
fi
log "pkg-config checks:"
pkg-config --modversion rtaudio || { echo "RtAudio not visible to pkg-config"; exit 1; }
pkg-config --modversion portaudio-2.0 || { echo "PortAudio not visible to pkg-config"; exit 1; }
# -------- 4. SDR++ Brown --------
log "Cloning/updating SDR++ Brown"
cd "${HOME}"
if [ ! -d "${REPO_DIR}" ]; then
git clone https://github.com/sannysanoff/SDRPlusPlusBrown "${REPO_DIR}" | tee "${LOG_DIR}/30_sdrpp_clone.log"
else
(cd "${REPO_DIR}" && git fetch --all && git reset --hard origin/master) | tee "${LOG_DIR}/30_sdrpp_update.log"
fi
log "Configuring & building SDR++ Brown"
mkdir -p "${REPO_DIR}/build"
cd "${REPO_DIR}/build"
cmake .. | tee "${LOG_DIR}/31_sdrpp_cmake.log"
make -j"$(nproc)" | tee "${LOG_DIR}/32_sdrpp_make.log"
sudo make install | tee "${LOG_DIR}/33_sdrpp_install.log"
# -------- 5. Final checks --------
log "Final checks"
command -v sdrpp >/dev/null && echo "sdrpp is installed at: $(command -v sdrpp)"
echo
log "Done! Launch with: sdrpp"
echo "Build logs are in: ${LOG_DIR}"
This is the same setup that I use. I had Meshtastic working with the AIO board a few months ago, since then one of the updates pushed out has borked Meshtastic’s ability to interface with the LORA module on the AIO board.