AsamK/signal-cli
效率与系统工具为 Signal 提供命令行、JSON-RPC 和 D-Bus 接口,用于注册、收发消息和服务器自动化。
项目介绍
signal-cli 是 Signal 的非官方命令行客户端,支持注册号码、验证、关联已有账号、发送和接收消息,也能以守护进程方式提供 JSON-RPC 和 D-Bus 接口。它基于从 Signal-Android 源码中提取并修补过的 libsignal-service-java 客户端库。文档说明的主要场景是服务器上通知管理员重要事件,同时也适合希望不在智能手机上使用 Signal 的用户。
除单次命令外,守护进程提供 JSON-RPC 接口(附一个 Rust 编写的简单示例客户端)和 D-Bus 接口。协议要求定期接收消息;文档指出这样才能保证加密高效工作,并及时获得群组、阅后即焚计时器等更新。
快速使用
需要至少 JRE 25 和自带的 libsignal-client 原生库;预编译包已为 x86_64 Linux(glibc 足够新)、Windows 和 macOS 打包,也可用 Gradle 自行构建。其他系统或架构的原生库方案见 wiki。README 给出了 Linux 全系统安装脚本:自动解析最新版本号并解压到 /opt;仅在你的机器适合这种目录布局时执行。
把可执行文件加入 PATH 后,基本流程如下:
- 关联已有账号:
signal-cli link;或注册新号码:signal-cli -a ACCOUNT register,其中ACCOUNT是带+和国际区号的电话号码。注册会注销该号码上已有的客户端。 - 用短信或语音收到的验证码验证:
signal-cli -a ACCOUNT verify CODE(账号设有 PIN 时加--pin PIN_CODE)。 - 发送:
signal-cli -a ACCOUNT send -m "This is a message" RECIPIENT;用户名需加u:前缀,也可通过--message-from-stdin从标准输入读取消息内容。 - 接收:
signal-cli -a ACCOUNT receive,或运行守护进程持续接收。
座机无法接收短信;README 描述了先尝试短信失败后用 --voice 走语音验证的流程,并给出需要验证码时的注册说明入口。
使用约束
这是非官方客户端;项目说明必须保持更新,因为官方客户端三个月后过期,服务端可能随后做不兼容变更,超过三个月的版本可能无法正常工作。注册依赖能接收短信或电话的号码,从 signal-cli 注册会挤掉该号码上的其他客户端。密码和加密密钥在注册时生成,存放在用户主目录下的 $XDG_DATA_HOME/signal-cli/data/(或 $HOME/.local/share/signal-cli/data/)。项目采用 GPL-3.0 许可,并包含源自 Open Whisper Systems libsignal-service-java 的代码。
HN 讨论中有用户质疑非官方客户端连接 Signal 服务器是否被允许。有评论认为这是对网络服务的使用条款限制而非许可证限制,并指出 signal-cli 使用了 Android 客户端库的分支。这属于讨论观点,应结合 Signal 当前条款核实,不应视为项目方声明。
HotRepo 点评
在 2026-11-09 的 Java 日榜上,signal-cli 记录到第 7 的最佳名次,当日新增 3 个 Star,说明这个长期存在的工具仍能进入语言榜。较早的 HN 讨论(2017 年和 2021 年)围绕「为以手机为中心的即时通讯提供命令行客户端」这一特殊定位展开,2021 年有评论者称已用五年在不用智能手机的情况下保持 Signal。这些记录反映的是持续的小众需求,而非近期爆发;单次快照不足以判断趋势。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。