A terminal-based DVB frontend monitor for Linux. It can be used as a more capable alternative to the basic
femontool from thedvb-appspackage, especially on systems with many DVB frontends.dsfemonis designed for quick operational overview of tuner state, signal quality, tuning parameters, and service information in multistream backend environments, including IPTV backends.
dsfemon is a fork and modernized continuation of the original Femon DVB frontend monitor developed by David Seidl in 2012.
It shows a compact live overview of DVB tuner state in a terminal UI and is intended for quickly checking frontend lock state, signal quality, DVB tuning parameters, and basic demux/service information from Linux DVB devices.
- scans Linux DVB frontend devices under
/dev/dvb - displays frontend type, name, and lock/status flags
- shows signal and CNR/SNR values with terminal bars
- reads modern DVBv5 properties when available
- keeps legacy DVB ioctl fallbacks for signal and SNR bars
- displays DVB delivery system, frequency, bandwidth, symbol rate, FEC, and modulation
- reads PAT/PMT/NIT/SDT demux information and keeps multi-section NIT/SDT data stable
- supports paging when many frontends are present
- provides keyboard navigation with first/last item jumps
- provides a configurable monitor refresh interval
- shows a scrollable demux service detail screen with service type, audio/teletext/subtitle languages, provider, PCR PID, CA, and PMT stream information
| Key | Action |
|---|---|
Up / Down |
select frontend detail row or service row |
Enter |
open demux detail |
PgUp / PgDn |
switch page or scroll detail page |
Home / End |
jump to first or last frontend/service |
ESC |
return from detail view |
Q |
quit |
- Linux with DVB device support
- C++ compiler with C++11-era system headers
makepkg-configlibncurses-dev/ncursesw- Linux DVB headers, usually provided by the system libc/kernel headers package
Debian/Ubuntu example:
sudo apt install build-essential pkg-config libncurses-devmake clean
makeThe resulting binary is:
./dsfemon
Useful maintenance checks:
make format-check
make -BOptional local install:
sudo make installStart the monitor with the default broad adapter scan:
./dsfemonAdditional commands and useful arguments:
# Show command-line help
./dsfemon --help
# Show version
./dsfemon --version
# Scan only selected adapters
./dsfemon --adapters 0,2
# Limit the number of frontends scanned per adapter
./dsfemon --subadapters 1
# Change the monitor refresh interval in milliseconds, allowed range 100-60000
./dsfemon --interval 1000The refresh interval controls both the ncurses redraw cadence and the background frontend status collection cadence. Demux/SI data is still read continuously by the per-device demux reader threads.
/
├── docs/
│ └── screenshots/
│ ├── dsfemon-main.gif # main application screenshot
│ └── dsfemon-demux-detail.png # demux detail screenshot
├── dsfemon.cpp # main ncurses loop, paging, and keyboard handling
├── command_line.* # command-line options
├── device_discovery.* # DVB device scanning and lifecycle
├── frontend_monitor.* # DVBv5 property collection
├── frontend_status_cache.* # background frontend status cache
├── frontend_status.* # frontend status snapshot collection
├── frontend_view.* # frontend/status rendering
├── demux_reader.cpp # background PAT/PMT/NIT/SDT section reader
├── demux_detail_view.* # fullscreen demux detail rendering and service navigation
├── demux_snapshot.cpp # stable demux data copied for UI rendering
├── demux_view.* # demux/service summary rendering
├── si_parser.cpp # PSI/SI parser helpers
├── *_table.h # small PSI/SI table constants
├── ui_helpers.* # shared ncurses rendering helpers
├── ncurses_present.* # terminal bar helpers
└── color.* # ncurses color pairs/macros
- ✅ modern build against
ncursesw - ✅ default adapter scan starts at adapter
0 - ✅ DVBv5 properties are read individually for better compatibility with older drivers
- ✅ paging and keyboard navigation are implemented
- ✅
Home/Endjump to first/last frontend or service - ✅ demux detail shows a scrollable service table with service type, PMT/PCR PIDs, streams, audio/teletext/subtitle languages, CA, provider, and running status
- ✅ demux detail keeps the last valid snapshot visible during transient SI/PMT refresh gaps
- ✅ multi-section NIT/SDT caches keep network and service tables stable when broadcasts split them across sections
Special thanks to David Seidl, author of the original femon DVB frontend monitor from 2012.
This project is a modernized continuation of the original work, developed and published with the author's permission.
The original author granted permission to continue, modify and publicly distribute the project, provided that it remains aligned with open-source principles.
This continuation is distributed under the GNU GPL v3 license.

