From f18ed260052631b234c3722484fbd354a12bd07c Mon Sep 17 00:00:00 2001 From: Smittix Date: Sun, 8 Feb 2026 18:13:15 +0000 Subject: [PATCH] Fix grgsm_livemon Qt crash in headless Docker container MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Set QT_QPA_PLATFORM=offscreen for both grgsm_livemon and grgsm_scanner to prevent SIGABRT when no X11 display is available. grgsm_livemon uses GNU Radio which loads Qt plugins — without a display, Qt aborts with "could not connect to display". Co-Authored-By: Claude Opus 4.6 --- routes/gsm_spy.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/routes/gsm_spy.py b/routes/gsm_spy.py index 7591f6e..b1b5607 100644 --- a/routes/gsm_spy.py +++ b/routes/gsm_spy.py @@ -263,7 +263,8 @@ def _start_monitoring_processes(arfcn: int, device_index: int) -> tuple[subproce ] env = dict(os.environ, OSMO_FSM_DUP_CHECK_DISABLED='1', - PYTHONUNBUFFERED='1') + PYTHONUNBUFFERED='1', + QT_QPA_PLATFORM='offscreen') logger.info(f"Starting grgsm_livemon: {' '.join(grgsm_cmd)}") grgsm_proc = subprocess.Popen( grgsm_cmd, @@ -1305,7 +1306,8 @@ def scanner_thread(cmd, device_index): # abort on duplicate FSM registration (common with apt gr-gsm) env = dict(os.environ, OSMO_FSM_DUP_CHECK_DISABLED='1', - PYTHONUNBUFFERED='1') + PYTHONUNBUFFERED='1', + QT_QPA_PLATFORM='offscreen') process = subprocess.Popen( cmd, stdout=subprocess.PIPE,