Linux Support

101 views
Skip to first unread message

Mikey Ross

unread,
Jan 4, 2026, 5:13:31 PMJan 4
to SkyRoof
Hi,

Thank you all for such an amazing tool. I checked the system requirement and the OS requirements are: Windows 10 or 11 (64bit)

Is it possible to run it on linux? if not, what would be the direction for the contribution needed to have Skyroof officially support linux?

Thanks,
Mikey

Alex VE3NEA

unread,
Jan 4, 2026, 6:14:26 PMJan 4
to SkyRoof
I am a Windows developer, I do not really know what is involved in making an application multi-platform. In theory, .NET software can now run on Linux and MacOS, but since SkyRoof is a WinForms app, its visual part is probably based on the Windows system, and it may be difficult to add support of other platforms.

Gert de Haan

unread,
Jan 5, 2026, 3:22:03 AMJan 5
to Alex VE3NEA, SkyRoof
My guess is that it could run on Linux in Wine. It's on my list for testing on Zoran 18 which is capable of running Gridtracker2 windows, wsjtx3.0 windows. I know the both are also avaliable as a Linux variant. Most Sdr's run on Linux. 
I will test skyroof on my Zoran Linux box soon. 

Rgrds Gert 


Verzonden vanaf Outlook voor Android

From: sky...@googlegroups.com <sky...@googlegroups.com> on behalf of Alex VE3NEA <ve3...@gmail.com>
Sent: Monday, January 5, 2026 12:14:26 AM
To: SkyRoof <sky...@googlegroups.com>
Subject: Re: Linux Support
 
--
You received this message because you are subscribed to the Google Groups "SkyRoof" group.
To unsubscribe from this group and stop receiving emails from it, send an email to skyroof+u...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/skyroof/d1916236-acab-4c1f-9390-204495f15fa7n%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Alex VE3NEA

unread,
Jan 5, 2026, 9:17:12 AMJan 5
to SkyRoof
Thank you, Gert. It will be interesting to know if SkyRoof works on Wine. The SkyCAT tool that SkyRoof uses to control the transceiver is also a .NET application, but it does not use anything that is Windows-specific, chances are that SkyCAT will run on Linux directly.

none

unread,
Jan 18, 2026, 12:38:03 PM (14 days ago) Jan 18
to SkyRoof
I tried on Linux Mint 22.2 with Wine64 9.0. It gets the sat data, then loads fft, displays the main display but when I try and select and SDR it throws a DPIAwareness error and stops. YMMV

none

unread,
Jan 18, 2026, 1:10:11 PM (14 days ago) Jan 18
to SkyRoof
I started it up once again and found that it looks like it is tracking the satellites and adjusting dopler. It only crashes when I touch an menu item. Is there a file I can edit to set the sdr device outside of the program so it comes up defaulting to the SDR?

Alex VE3NEA

unread,
Jan 18, 2026, 1:44:27 PM (14 days ago) Jan 18
to SkyRoof
SDR selection is stored in the Settings.json file, click on Help / Data Folder in the menu to find it. All settings of all found SDR devices are stored, here is an example:

"Sdr": {
    "Devices": [
      {
        "KwArgs": {
          "driver": "airspy",
          "label": "AirSpy One [744c60c821486f4f]",
          "serial": "744c60c821486f4f"
        },
        "Properties": [
          {
            "Value": "RX",
            "ArgInfo": {
              "Key": null,
              "Value": null,
              "Name": "Antenna",
              "Description": "Antenna Input Selection",
              "Unit": null,
              "Type": 3,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {
                "RX": "RX"
              }
            },
            "Category": "Common",
            "Name": "Antenna"
          },
          {
            "Value": "true",
            "ArgInfo": {
              "Key": null,
              "Value": null,
              "Name": "DCOffsetMode",
              "Description": "Automatic frontend DC offset correction",
              "Unit": null,
              "Type": 0,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Common",
            "Name": "DCOffsetMode"
          },
          {
            "Value": "true",
            "ArgInfo": {
              "Key": null,
              "Value": null,
              "Name": "IQBalanceMode",
              "Description": "Automatic frontend IQ balance correction",
              "Unit": null,
              "Type": 0,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Common",
            "Name": "IQBalanceMode"
          },
          {
            "Value": "false",
            "ArgInfo": {
              "Key": null,
              "Value": null,
              "Name": "AGC",
              "Description": "Automatic gain control on the chain",
              "Unit": null,
              "Type": 0,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Common",
            "Name": "AGC"
          },
          {
            "Value": "4.329999923706055",
            "ArgInfo": {
              "Key": null,
              "Value": null,
              "Name": "PPM",
              "Description": "SDR clock correction, Parts Per Million",
              "Unit": null,
              "Type": 2,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Common",
            "Name": "PPM"
          },
          {
            "Value": "true",
            "ArgInfo": {
              "Key": null,
              "Value": null,
              "Name": "Single Gain",
              "Description": "When true, gain is controlled by a slider, individual stage gains are ignored",
              "Unit": null,
              "Type": 0,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Common",
            "Name": "Single Gain"
          },
          {
            "Value": "false",
            "ArgInfo": {
              "Key": "biastee",
              "Value": "false",
              "Name": "Bias tee",
              "Description": "Enable the 4.5v DC Bias tee to power SpyVerter / LNA / etc. via antenna connection.",
              "Unit": "",
              "Type": 0,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Model-specific",
            "Name": "Bias tee"
          },
          {
            "Value": "false",
            "ArgInfo": {
              "Key": "bitpack",
              "Value": "false",
              "Name": "Bit Pack",
              "Description": "Enable packing 4 12-bit samples into 3 16-bit words for 25% less USB trafic.",
              "Unit": "",
              "Type": 0,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Model-specific",
            "Name": "Bit Pack"
          },
          {
            "Value": "0",
            "ArgInfo": {
              "Key": null,
              "Value": null,
              "Name": "LNA",
              "Description": "",
              "Unit": null,
              "Type": 2,
              "Range": {
                "minimum": 0.0,
                "maximum": 15.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Stage Gains",
            "Name": "LNA"
          },
          {
            "Value": "0",
            "ArgInfo": {
              "Key": null,
              "Value": null,
              "Name": "MIX",
              "Description": "",
              "Unit": null,
              "Type": 2,
              "Range": {
                "minimum": 0.0,
                "maximum": 15.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Stage Gains",
            "Name": "MIX"
          },
          {
            "Value": "0",
            "ArgInfo": {
              "Key": null,
              "Value": null,
              "Name": "VGA",
              "Description": "",
              "Unit": null,
              "Type": 2,
              "Range": {
                "minimum": 0.0,
                "maximum": 15.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Stage Gains",
            "Name": "VGA"
          }
        ],
        "FrequencyRange": [
          {
            "minimum": 24000000.0,
            "maximum": 1800000000.0,
            "step": 0.0
          }
        ],
        "SampleRateRange": [
          {
            "minimum": 6000000.0,
            "maximum": 6000000.0,
            "step": 0.0
          },
          {
            "minimum": 3000000.0,
            "maximum": 3000000.0,
            "step": 0.0
          }
        ],
        "BandwidthRange": [],
        "GainRange": {
          "minimum": 0.0,
          "maximum": 45.0,
          "step": 0.0
        },
        "SampleRate": 6000000.0,
        "MaxBandwidth": 3100000.0,
        "HardwareBandwidth": 3410000.0000000005,
        "Frequency": 436500000.0,
        "Gain": 45.0,
        "Name": "AirSpy One [744c60c821486f4f]",
        "Ppm": 4.329999923706055
      },
      {
        "KwArgs": {
          "driver": "sdrplay",
          "label": "SDRplay Dev0 RSP1A 2235036E99",
          "serial": "2235036E99"
        },
        "Properties": [
          {
            "Value": "RX",
            "ArgInfo": {
              "Key": null,
              "Value": null,
              "Name": "Antenna",
              "Description": "Antenna Input Selection",
              "Unit": null,
              "Type": 3,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {
                "RX": "RX"
              }
            },
            "Category": "Common",
            "Name": "Antenna"
          },
          {
            "Value": "true",
            "ArgInfo": {
              "Key": null,
              "Value": null,
              "Name": "DCOffsetMode",
              "Description": "Automatic frontend DC offset correction",
              "Unit": null,
              "Type": 0,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Common",
            "Name": "DCOffsetMode"
          },
          {
            "Value": "true",
            "ArgInfo": {
              "Key": null,
              "Value": null,
              "Name": "IQBalanceMode",
              "Description": "Automatic frontend IQ balance correction",
              "Unit": null,
              "Type": 0,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Common",
            "Name": "IQBalanceMode"
          },
          {
            "Value": "false",
            "ArgInfo": {
              "Key": null,
              "Value": null,
              "Name": "AGC",
              "Description": "Automatic gain control on the chain",
              "Unit": null,
              "Type": 0,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Common",
            "Name": "AGC"
          },
          {
            "Value": "0",
            "ArgInfo": {
              "Key": null,
              "Value": null,
              "Name": "PPM",
              "Description": "SDR clock correction, Parts Per Million",
              "Unit": null,
              "Type": 2,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Common",
            "Name": "PPM"
          },
          {
            "Value": "true",
            "ArgInfo": {
              "Key": null,
              "Value": null,
              "Name": "Single Gain",
              "Description": "When true, gain is controlled by a slider, individual stage gains are ignored",
              "Unit": null,
              "Type": 0,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Common",
            "Name": "Single Gain"
          },
          {
            "Value": "0",
            "ArgInfo": {
              "Key": "rfgain_sel",
              "Value": "4",
              "Name": "RF Gain Select",
              "Description": "RF Gain Select",
              "Unit": "",
              "Type": 3,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Model-specific",
            "Name": "RF Gain Select"
          },
          {
            "Value": "true",
            "ArgInfo": {
              "Key": "iqcorr_ctrl",
              "Value": "true",
              "Name": "IQ Correction",
              "Description": "IQ Correction Control",
              "Unit": "",
              "Type": 0,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Model-specific",
            "Name": "IQ Correction"
          },
          {
            "Value": "-30",
            "ArgInfo": {
              "Key": "agc_setpoint",
              "Value": "-30",
              "Name": "AGC Setpoint",
              "Description": "AGC Setpoint (dBfs)",
              "Unit": "",
              "Type": 1,
              "Range": {
                "minimum": -60.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Model-specific",
            "Name": "AGC Setpoint"
          },
          {
            "Value": "false",
            "ArgInfo": {
              "Key": "biasT_ctrl",
              "Value": "true",
              "Name": "BiasT Enable",
              "Description": "BiasT Control",
              "Unit": "",
              "Type": 0,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Model-specific",
            "Name": "BiasT Enable"
          },
          {
            "Value": "false",
            "ArgInfo": {
              "Key": "rfnotch_ctrl",
              "Value": "true",
              "Name": "RfNotch Enable",
              "Description": "RF Notch Filter Control",
              "Unit": "",
              "Type": 0,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Model-specific",
            "Name": "RfNotch Enable"
          },
          {
            "Value": "false",
            "ArgInfo": {
              "Key": "dabnotch_ctrl",
              "Value": "true",
              "Name": "DabNotch Enable",
              "Description": "DAB Notch Filter Control",
              "Unit": "",
              "Type": 0,
              "Range": {
                "minimum": 0.0,
                "maximum": 0.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Model-specific",
            "Name": "DabNotch Enable"
          },
          {
            "Value": "50",
            "ArgInfo": {
              "Key": null,
              "Value": null,
              "Name": "IFGR",
              "Description": "",
              "Unit": null,
              "Type": 2,
              "Range": {
                "minimum": 20.0,
                "maximum": 59.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Stage Gains",
            "Name": "IFGR"
          },
          {
            "Value": "0",
            "ArgInfo": {
              "Key": null,
              "Value": null,
              "Name": "RFGR",
              "Description": "",
              "Unit": null,
              "Type": 2,
              "Range": {
                "minimum": 0.0,
                "maximum": 9.0,
                "step": 0.0
              },
              "Options": {}
            },
            "Category": "Stage Gains",
            "Name": "RFGR"
          }
        ],
        "FrequencyRange": [
          {
            "minimum": 1000.0,
            "maximum": 2000000000.0,
            "step": 0.0
          }
        ],
        "SampleRateRange": [
          {
            "minimum": 62500.0,
            "maximum": 62500.0,
            "step": 0.0
          },
          {
            "minimum": 96000.0,
            "maximum": 96000.0,
            "step": 0.0
          },
          {
            "minimum": 125000.0,
            "maximum": 125000.0,
            "step": 0.0
          },
          {
            "minimum": 192000.0,
            "maximum": 192000.0,
            "step": 0.0
          },
          {
            "minimum": 250000.0,
            "maximum": 250000.0,
            "step": 0.0
          },
          {
            "minimum": 384000.0,
            "maximum": 384000.0,
            "step": 0.0
          },
          {
            "minimum": 500000.0,
            "maximum": 500000.0,
            "step": 0.0
          },
          {
            "minimum": 768000.0,
            "maximum": 768000.0,
            "step": 0.0
          },
          {
            "minimum": 1000000.0,
            "maximum": 1000000.0,
            "step": 0.0
          },
          {
            "minimum": 2000000.0,
            "maximum": 10660000.0,
            "step": 0.0
          }
        ],
        "BandwidthRange": [
          {
            "minimum": 200000.0,
            "maximum": 200000.0,
            "step": 0.0
          },
          {
            "minimum": 300000.0,
            "maximum": 300000.0,
            "step": 0.0
          },
          {
            "minimum": 600000.0,
            "maximum": 600000.0,
            "step": 0.0
          },
          {
            "minimum": 1536000.0,
            "maximum": 1536000.0,
            "step": 0.0
          },
          {
            "minimum": 5000000.0,
            "maximum": 5000000.0,
            "step": 0.0
          },
          {
            "minimum": 6000000.0,
            "maximum": 6000000.0,
            "step": 0.0
          },
          {
            "minimum": 7000000.0,
            "maximum": 7000000.0,
            "step": 0.0
          },
          {
            "minimum": 8000000.0,
            "maximum": 8000000.0,
            "step": 0.0
          }
        ],
        "GainRange": {
          "minimum": 0.0,
          "maximum": 48.0,
          "step": 0.0
        },
        "SampleRate": 4000000.0,
        "MaxBandwidth": 3100000.0,
        "HardwareBandwidth": 5000000.0,
        "Frequency": 436500000.0,
        "Gain": 48.0,
        "Name": "SDRplay Dev0 RSP1A 2235036E99",
        "Ppm": 0.0
      }
    ],
    "SelectedDeviceName": "AirSpy One [744c60c821486f4f]",
    "Enabled": true
  },

none

unread,
Jan 18, 2026, 2:46:19 PM (14 days ago) Jan 18
to SkyRoof
I can't select help or any other menu items. But I was trying ot find the settings.json file but I suspect it is not created until you make you selection of SDR because I can't find it in the program files/Skyroof directory?

Alex VE3NEA

unread,
Jan 18, 2026, 5:54:48 PM (14 days ago) Jan 18
to SkyRoof
The settings file is always created on program exit. See the Data Folder section for other ways to find the file.

none

unread,
Jan 18, 2026, 7:37:56 PM (13 days ago) Jan 18
to SkyRoof

It never gets to exit cleanly because none of the menu option work. They all crash. It will work all day until you select a menu option. I will try grabbing the settings from my Windows install.

none

unread,
Jan 19, 2026, 9:28:44 AM (13 days ago) Jan 19
to SkyRoof
I moved the json files over from my WIndows install. Again any selection of the menu crashes. But it is amazingly close given that everything on the main display works. 

Alex VE3NEA

unread,
Jan 19, 2026, 1:13:50 PM (13 days ago) Jan 19
to SkyRoof

DPIAwareness error is a known incompatibility between WinForms and Wine’s incomplete DPI-awareness implementation. I have added a work around to SkyRoof, it will be included in the next build.

none

unread,
Jan 19, 2026, 1:37:25 PM (13 days ago) Jan 19
to SkyRoof
Thanks for looking into it Alex.

Gert de Haan

unread,
Jan 19, 2026, 2:26:42 PM (13 days ago) Jan 19
to Alex VE3NEA, SkyRoof
I found out that SkyRoof works in the Wine environment on Zorin18. But spoken announcements need to be off. I have to do further tests. Will let you know about it. 

73 de PD3PAM 
Gert de Haan 

Verzonden vanaf Outlook voor Android

Sent: Monday, January 19, 2026 7:13:50 PM

none

unread,
Jan 22, 2026, 12:09:15 AM (10 days ago) Jan 22
to SkyRoof
Gert,
What SDR device were you using. USB connected?
Reply all
Reply to author
Forward
0 new messages