Ubuntu - Client Installation

From SatNOGS Wiki

This guide will enable you to install SatNOGS client on an Ubuntu 20.04 environment. It has been tested on PC, laptop, and Virtual Machines, all with success. Information is currently being added and announcement will be made when complete. It has been broken down into logical steps that will help allow for any troubleshooting should it be required.

Don't let the long contents fool you. It's not a complicated process and in fact is a great way for new SatNOGS users to experience SatNOGS from their own PC or laptop.

Installing SatNOGS on Ubuntu 20.04 - PC

This guide is currently being tested

Please feel free to test the instructions below, and submit any feedback whether it be to help clarify or fix any errors.

Installation information for gr-satnogs on Ubuntu 20.04

Do not add any repo for GNU Radio. It is not the required version and will cause errors.

sudo apt-get update
sudo apt-get upgrade -y

sudo apt-get --purge remove snapd -y

Install required software packages

sudo apt install -y \
      libboost-dev \
      libitpp-dev \
      libboost-date-time-dev \
      libboost-filesystem-dev \
      libboost-program-options-dev \
      libboost-system-dev \
      libboost-thread-dev \
      libboost-regex-dev \
      libboost-test-dev \
      swig \
      cmake \
      build-essential \
      pkg-config \
      gnuradio-dev \
      libconfig++-dev \
      libgmp-dev \
      liborc-0.4-0 \
      liborc-0.4-dev \
      liborc-0.4-dev-bin \
      nlohmann-json3-dev \
      libpng++-dev \
      libvorbis-dev \
      git \

Install from source

cd ~
git clone https://gitlab.com/librespacefoundation/satnogs/gr-satnogs.git
cd gr-satnogs
mkdir build
cd build
cmake ..
sudo make install
cd ~

If you get an error stating: server certificate verification failed. CAfile: none CRLfile: none, then use this git command instead to skip verification.

GIT_SSL_NO_VERIFY=true git clone https://gitlab.com/librespacefoundation/satnogs/gr-satnogs.git

If this is the first time you are building the gr-satnogs module, run:

sudo ldconfig

Installation information for Soapy SDR and Device on Ubuntu 20.04

Install required software packages

sudo apt-get update
sudo apt-get install rtl-sdr librtlsdr-dev -y

sudo apt-get install soapysdr-tools python3-soapysdr libsoapysdr-dev -y

Installation information for gr-soapy on Ubuntu 20.04

Install from source

cd ~
git clone https://gitlab.com/librespacefoundation/gr-soapy
cd gr-soapy
mkdir build
cd build
cmake ..
sudo make install
sudo ldconfig
cd ~

Installation information for satnogs-flowgraphs on Ubuntu 20.04

Set & configure PYTHONPATH environment setting

Edit bashrc

sudo nano ~/.bashrc

Add the following to your .bashrc. This will make sure that every time you login the variable will be set.

export PYTHONPATH=/usr/local/lib/python3/dist-packages

If you do not re-login after adding to .bashrc then run the following (same) command in the current session.

export PYTHONPATH=/usr/local/lib/python3/dist-packages

Installation from source

cd ~
git clone https://gitlab.com/librespacefoundation/satnogs/satnogs-flowgraphs.git
cd satnogs-flowgraphs
mkdir build
cd build
cmake ..
sudo make install

Configuration information for SatNOGS user on Ubuntu 20.04

Add SatNOGS user

sudo useradd -c "SatNOGS-client" -d /var/lib/satnogs -G plugdev,dialout -m -s /bin/false satnogs

Create the satnogs python virtual environent

Install the required packages.

sudo apt-get install python3.8-venv virtualenv python3-pip -y


sudo -H -u satnogs virtualenv --system-site-packages --python python3 /var/lib/satnogs

Start a SatNOGS user bash and activate the virual environment

sudo -H -u satnogs bash source /var/lib/satnogs/bin/activate pip install satnogs-client pip install gps

Exit the bash


cd /tmp sudo mkdir -p .satnogs/data/incomplete sudo chown -R satnogs:satnogs .satnogs

Configure SatNOGS Client (yes, it's a little different) on Ubuntu 20.04

Create the satnogs-client environment file, make sure the PYTHONPATH is also in there (this is not normally done).

We're using nano (installed on Ubuntu 20.04 by default, though you can also use vi)

sudo nano /etc/default/satnogs-client

Here you will need to add your station information. The setup command does not run to configure this through an interface.


Configure System Services

Create systemd service file on Ubuntu 20.04

Create file using nano (you can use vi)

sudo nano /etc/systemd/system/satnogs-client.service

Now add the following:

[Unit] Description=SatNOGS client

[Service] EnvironmentFile=-/etc/default/satnogs-client ExecStart=/var/lib/satnogs/bin/satnogs-client Restart=on-failure User=satnogs Group=satnogs

[Install] WantedBy=multi-user.target

hamlib, rigctld and rotctld

There is also a dependency with hamlib, rigctld and rotctld, so we also need to add its environment file and the systemd services file.

Install hamlib-utils

sudo apt-get install python3-libhamlib2 libhamlib-utils

Edit hamlib-utils

sudo nano /etc/default/hamlib-utils

Add the following:

RIG_OPTS="-T -m 1"

Edit rigctld.service

sudo nano /etc/systemd/system/rigctld.service

Add the following:

Description=rigctld server

ExecStart=/usr/bin/rigctld $RIG_OPTS


Edit rotctld.service

sudo nano /etc/systemd/system/rotctld.service

Edit rotctld.service

[Unit] Description=rotctld server

[Service] EnvironmentFile=-/etc/default/hamlib-utils ExecStart=/usr/bin/rotctld $ROT_OPTS Restart=on-failure User=satnogs Group=satnogs

[Install] WantedBy=multi-user.target

Reload systemd daemon

After the above is complete, you must reload the systemd daemon so it will use the newly created services.

Execute the following:

sudo systemctl daemon-reload

Now we can enable and start rigctld, rotctld and finally when all the /etc/default/satnogs-client variables are set, the satnogs-client.

sudo systemctl enable rigctld.service sudo systemctl start rigctld.service sudo systemctl status rigctld.service

sudo systemctl enable rotctld.service sudo systemctl start rotctld.service sudo systemctl status rotctld.service

sudo systemctl enable satnogs-client.service sudo systemctl start satnogs-client.service sudo systemctl status satnogs-client.service

If you want to see log information you can use the following commands:

sudo journalctl -f -u rigctld -n 512 sudo journalctl -f -u rotctld -n 512 sudo journalctl -f -u satnogs-client -n 512

Device Blacklisting

Create RTL-SDR blacklisting on Ubuntu 20.04

Create blacklist configuration (you can also use vi)

sudo nano /etc/modprobe.d/blacklist-rtlsdr.conf

Add the following:

blacklist dvb_usb_rtl28xxu

RTL-SDR udev configuration

sudo nano /etc/udev/rules.d/54-rtlsdr.conf

Add the following:

# Copyright 2012-2013 Osmocom rtl-sdr project
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
# original RTL2832U vid/pid (hama nano, for example)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2832", MODE:="0660", GROUP="plugdev"
# RTL2832U OEM vid/pid, e.g. ezcap EzTV668 (E4000), Newsky TV28T (E4000/R820T) etc.
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", MODE:="0660", GROUP="plugdev"
# DigitalNow Quad DVB-T PCI-E card (4x FC0012?)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0413", ATTRS{idProduct}=="6680", MODE:="0660", GROUP="plugdev"
# Leadtek WinFast DTV Dongle mini D (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0413", ATTRS{idProduct}=="6f0f", MODE:="0660", GROUP="plugdev"
# Genius TVGo DVB-T03 USB dongle (Ver. B)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0458", ATTRS{idProduct}=="707f", MODE:="0660", GROUP="plugdev"
# Terratec Cinergy T Stick Black (rev 1) (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00a9", MODE:="0660", GROUP="plugdev"
# Terratec NOXON rev 1 (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b3", MODE:="0660", GROUP="plugdev"
# Terratec Deutschlandradio DAB Stick (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b4", MODE:="0660", GROUP="plugdev"
# Terratec NOXON DAB Stick - Radio Energy (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b5", MODE:="0660", GROUP="plugdev"
# Terratec Media Broadcast DAB Stick (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b7", MODE:="0660", GROUP="plugdev"
# Terratec BR DAB Stick (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b8", MODE:="0660", GROUP="plugdev"
# Terratec WDR DAB Stick (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b9", MODE:="0660", GROUP="plugdev"
# Terratec MuellerVerlag DAB Stick (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00c0", MODE:="0660", GROUP="plugdev"
# Terratec Fraunhofer DAB Stick (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00c6", MODE:="0660", GROUP="plugdev"
# Terratec Cinergy T Stick RC (Rev.3) (E4000)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00d3", MODE:="0660", GROUP="plugdev"
# Terratec T Stick PLUS (E4000)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00d7", MODE:="0660", GROUP="plugdev"
# Terratec NOXON rev 2 (E4000)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00e0", MODE:="0660", GROUP="plugdev"
# PixelView PV-DT235U(RN) (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1554", ATTRS{idProduct}=="5020", MODE:="0660", GROUP="plugdev"
# Astrometa DVB-T/DVB-T2 (R828D)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="15f4", ATTRS{idProduct}=="0131", MODE:="0660", GROUP="plugdev"
# Compro Videomate U620F (E4000)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0620", MODE:="0660", GROUP="plugdev"
# Compro Videomate U650F (E4000)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0650", MODE:="0660", GROUP="plugdev"
# Compro Videomate U680F (E4000)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0680", MODE:="0660", GROUP="plugdev"
# GIGABYTE GT-U7300 (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d393", MODE:="0660", GROUP="plugdev"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d394", MODE:="0660", GROUP="plugdev"
# Peak 102569AGPK (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d395", MODE:="0660", GROUP="plugdev"
# KWorld KW-UB450-T USB DVB-T Pico TV (TUA9001)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d397", MODE:="0660", GROUP="plugdev"
# Zaapa ZT-MINDVBZP (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d398", MODE:="0660", GROUP="plugdev"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d39d", MODE:="0660", GROUP="plugdev"
# Twintech UT-40 (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3a4", MODE:="0660", GROUP="plugdev"
# ASUS U3100MINI_PLUS_V2 (FC0013)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3a8", MODE:="0660", GROUP="plugdev"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3af", MODE:="0660", GROUP="plugdev"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3b0", MODE:="0660", GROUP="plugdev"
# Dexatek DK DVB-T Dongle (Logilink VG0002A) (FC2580)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1101", MODE:="0660", GROUP="plugdev"
# Dexatek DK DVB-T Dongle (MSI DigiVox mini II V3.0)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1102", MODE:="0660", GROUP="plugdev"
# Dexatek DK 5217 DVB-T Dongle (FC2580)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1103", MODE:="0660", GROUP="plugdev"
# MSI DigiVox Micro HD (FC2580)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1104", MODE:="0660", GROUP="plugdev"
# Sweex DVB-T USB (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="a803", MODE:="0660", GROUP="plugdev"
# GTek T803 (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="b803", MODE:="0660", GROUP="plugdev"
# Lifeview LV5TDeluxe (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="c803", MODE:="0660", GROUP="plugdev"
# MyGica TD312 (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="d286", MODE:="0660", GROUP="plugdev"
# PROlectrix DV107669 (FC0012)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="d803", MODE:="0660", GROUP="plugdev"

Udev reload without reboot

sudo udevadm control --reload-rules && sudo udevadm trigger

Volk Profile


SatNOGS Monitor Setup Script

After all of that, here's a bash script to setup SatNOGS monitor. It's great to see your laptop come to life!

Create this script with nano (or vi), ensure you have permissions to execute and install.


sudo apt-get update
sudo apt-get install libglib2.0-dev cmake build-essential git -y

cd ~
git clone https://github.com/cubehub/libgpredict.git
cd libgpredict
mkdir build
cd build
cmake ../
sudo make install
sudo ldconfig
cd ~

wget https://github.com/wose/satnogs-monitor/releases/download/0.4.1/satnogs-monitor_0.4.1_amd64.deb
sudo dpkg -i satnogs-monitor_0.4.1_amd64.deb
cd ~

To run in the most visually appealing way, run this replacing '175' with your station ID:

satnogs-monitor -l 175 --data-path /tmp/.satnogs/data/ --waterfall --spectrum

Reference: SatNOGS Monitor