
WA8Q 发布 Linux RTTY 终端 gtty,基于 GTK4/libadwaita
来源标题:Rtty Program for Linux Radio Teletype for Amateur Radio
业余无线电爱好者 WA8Q 推出 gtty,一款专为 Linux 桌面打造的 RTTY 终端,采用 GTK4/libadwaita 界面并支持深色模式。它面向竞赛场景设计,提供频段按钮、宏和常驻日志栏,并内置多个并行解码器投票及 Gritty 风格相关器。作者称现有 RTTY 竞赛软件 MMTTY、2Tone、Gritty 仅支持 Windows,因此决定在 Linux 上把单一模式做专做精。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
gtty 是一个基于 GTK4/libadwaita 的 RTTY 终端,具备现代化的竞赛风格功能集。用户手册:https://github.com/gjyoung1974/GTTY/wiki(源文件在 docs/ 中,也可从应用程序菜单的“帮助”或 Ctrl+F1 打开)。
我(WA8Q)想入门 RTTY,而我用的是 Linux。这方面可选的软件很少。fldigi 很优秀,支持几十种模式,但作为通用多模式程序,它的 RTTY 工作流是一种妥协,而且它的 GTK 2 界面已经显露出老态。RTTY 竞赛者真正会用的程序——MMTTY、2Tone 和 Gritty——都只在 Windows 上运行,而在 Wine 下配合声卡和串口运行它们,不是我愿意在比赛中间依赖的方案。
所以 Gtty 就是我想用的程序:在当前的 Linux 桌面上,把一个模式做精。这意味着一个看起来属于 2026 年的 GTK4/libadwaita 界面,包括深色模式;一种竞赛风格的布局,频段按钮、宏和日志行始终可见;一个依据公开的 MMTTY 设计编写的解调器,而不是移植别人的代码;以及那些让 Windows 工具出彩的理念——多个解码器并行运行并对其输出进行投票、Gritty 风格的相关器,以及一个能一次性解码整个通带的 skimmer。通过普通 USB 串口适配器实现真正的 FSK 键控、Hamlib 电台控制,以及与 GridTracker 和 XML-RPC 日志软件的集成,使功能更加完整,因为一个无法融入电台其余部分的终端是不会被使用的。
sudo apt install build-essential cmake ninja-build pkg-config
libgtk-4-dev libadwaita-1-dev libhamlib-dev portaudio19-dev
libfftw3-dev libsamplerate0-dev libsndfile1-dev libsqlite3-dev
cmake -S . -B build -G Ninja
cmake --build build
ctest --test-dir build
./build/src/gui/gtty
始终从顶层目录进行配置;src/* 目录不是独立的 CMake 项目。
gtty-cli 可以在没有 GUI 的情况下测试调制解调器: gtty-cli encode "CQ CQ DE N0CALL" cq.wav # 生成一个 AFSK RTTY WAV gtty-cli decode cq.wav # 解码一段录音(两个解码器都用) gtty-cli listen --in 7 # 将实时音频解码输出到 stdout gtty-cli record out.wav --in 7 --seconds 10 # 捕获 PortAudio 送来的音频 gtty-cli devices # 列出音频设备 gtty-cli rigs icom # 列出 Hamlib 型号 gtty-cli rig --model 3073 --device /dev/ttyUSB0 # 读取频率/模式 选项:--baud 45.45 --shift 170 --mark 2125 --reverse --rate 48000 --no-afc --no-atc --ustty。
在 GridTracker2 中,设置 → 常规:设置 WSJT-X/JTDX 接收端口(默认 UDP 2237,IP 127.0.0.1)。在 gtty 中,首选项 → GridTracker:启用并指向相同的主机/端口。gtty 随后会表现得像一个名为 gtty 的 WSJT-X 实例:GridTracker 只会标出它能确定频段的电台,因此如果没有连接电台,请在首选项 → 电台 → “无电台时的拨号频率”中设置为你正在收听频率(默认 14080 kHz);gtty 会在状态栏中报告该频率,并在日志中用它来确定频段。在首选项 → 站点中设置你的呼号和网格,以便 GridTracker 知道是谁在上报。
如果 WSJT-X 也在运行,GridTracker 会在同一端口上接受多个发送者。像 224.0.0.1 这样的组播地址也同样可用。
电台的 USB 端口会呈现两个串口(CP2105):接口 00(/dev/ttyUSB0,“增强型 COM”)承载 CAT;接口 01(/dev/ttyUSB1,“标准 COM”)提供电台可用于 FSK 和 PTT 的 DTR/RTS 线路。在首选项 → 集成中启用它。gtty 随后会响应日志软件使用的 fldigi XML-RPC 方法:text.get_rx_length / text.get_rx / text.add_tx、main.tx / main.rx / main.abort / main.get_trx_status、main.get_frequency / main.set_frequency、modem.get_carrier / modem.set_carrier、log.* 字段访问器、rig.* 模式查询以及 main.run_macro。将 CQRLOG 或 TLF 的 fldigi 设置指向 127.0.0.1:7362。如果 fldigi 本身正在运行,请给 gtty 分配一个不同的端口。
Debian / Ubuntu:从发布页面下载适用于你的发行版的 .deb 包,然后执行 sudo apt install ./gtty_*.deb。软件包为 Debian 13(trixie)、Ubuntu 24.04 LTS、25.04 和 25.10 构建,支持 amd64 和 arm64,命名为 gtty_<version><distro><arch>.deb;依赖项由 apt 解析。在 PipeWire 桌面上,必须安装 pipewire-alsa 包才能打开默认音频设备和 pipewire 音频设备;apt 会将其作为推荐项自动拉入,而 dpkg -i 不会。如果音频输入无法打开,gtty 会在窗口顶部显示一条横幅。
AppImage:下载 gtty-x86_64.AppImage 或 gtty-aarch64.AppImage,chmod +x 后运行。内置 GTK4、libadwaita 和 Hamlib 4.6.2。
软件包由 .github/workflows/build.yml 在每次推送时生成,并附加到 v* 标签的 GitHub 发布中。在本地构建 .deb:cd build && cpack -G DEB;构建 AppImage:packaging/build-appimage.sh。
解码器基准测试 tools/bench_rtty.py 会解码内容已知的空中录音,并报告每个解码器的字符错误率(CER)。将录音放在 resources/ 中(被 git 忽略)。默认数据集使用 W6IWI 的“quick brown fox”信标(在 WebSDR 上捕获,40 米波段有深度 QSB,以及 20 米波段)、一段干净的维基百科文本,以及一段以 SDR I/Q 录制的 DWD 汉堡 50 波特 / 450 Hz 频移的海事公报。典型结果:
解调器的各项参数可在 gtty-cli decode 上调整: --filter-bits、--window 0|1、--atc-tau、--bit-window、--afc-gain。 gtty-cli decode --iq --center 1000 file.wav 将立体声文件视为 I/Q 基带,并将其中心移到 1000 Hz,因此可以直接解码 SDR 录音。HF 上剩余的误码集中在深度衰落中;最大似然字符解码器是计划中的下一步。
UART:串口设置为 RTTY 波特率(termios2 BOTHER)、5 个数据位、2 个停止位。TXD 空闲时为 mark。适用于 FTDI、CP210x、PL2303 和原生端口;你的接口中的晶体管/光耦通常会反相,这正是电台所期望的。DTR/RTS:在专用线程中用 clock_nanosleep 定时;如果电台打印出乱码,请使用“反转 FSK 极性”开关。 CAT 文本:使用 Hamlib rig_send_morse,它在……上映射为 KY 命令
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。