Mumble 1.3.4 常用 CLI 命令与工具详解

Mumble 服务端命令行与管理接口详解:murmurd 全量参数(-ini/-supw/-readsupw/-limits 等)、systemd 托管、D-Bus 管理接口逐方法实测(配置/频道/用户/日志)与 Ice 通道排障,基于 Ubuntu 22.04 + mumble-server 1.3.4 实测。

Mumble即时通信Mumble2026/10/21

Mumble 1.3.4 常用 CLI 命令与工具详解

目标:系统梳理 Mumble 服务端(mumble-server / murmur)的命令行工具面——murmurd 服务进程参数、systemd 服务托管、D-Bus 管理接口与 ZeroC Ice 管理接口,全部命令与回显均在 Ubuntu 22.04 + mumble-server 1.3.4 环境逐条实测取得,可直接照做。已在 Ubuntu 22.04(x86_64)环境实测通过。

一、环境信息

  • 操作系统:Ubuntu 22.04(jammy,x86_64);
  • 软件版本:mumble-server 1.3.4-1ubuntu1(服务端二进制 /usr/sbin/murmurd;上游最新稳定版 1.5.939,见《Mumble 1.5.939 介绍与选型指南》);
  • 配置文件:/etc/mumble-server.ini;数据库:/var/lib/mumble-server/mumble-server.sqlite;日志:/var/log/mumble-server/mumble-server.log;
  • 管理通道:D-Bus(system bus,服务名 net.sourceforge.mumble.murmur)、ZeroC Ice(实测启用后监听 127.0.0.1:6502);
  • 安装与服务托管基础见《Ubuntu 22.04 安装 Mumble 指南》,配置键位含义见《Mumble 1.3.4 配置参数详解》。

二、工具概览

Mumble 服务端的日常管理没有官方一站式 CLI,而是由「一个二进制 + 两套 RPC 通道」构成,按业务域划分如下:

业务域工具/通道典型命令说明
服务进程murmurd 自身参数murmurd -ini/-supw/-limits/-v/-fg密码管理、诊断与前台运行
服务托管systemdsystemctl start/stop/restart/status单元名 mumble-server
元信息与配置D-Bus(Meta 接口)dbus-send … Meta.getVersion/getConf/setConf版本、启停服务器、两层配置
账号与频道D-Bus(Murmur 接口)dbus-send … Murmur.addChannel/registerPlayer建频道、注册用户、踢人、ACL
脚本化管理ZeroC Icepython3 + Murmur.ice功能与 D-Bus 对应,生态更广
日志与排障文件日志 / D-Bus getLoggrep … mumble-server.log双通道取日志

💡 技术拓展:Murmur 的两套 RPC 管理通道如何选?——

通道传输客户端依赖适合场景
D-Bussystem bus 本机dbus-send/busctl(系统自带)本机运维脚本、一次性管理操作
IceTCP socketZeroC Ice 运行时(各语言)跨机管理、Web 管理面板、音乐机器人等生态集成

两者的方法集同源(都对应 Murmur.ice 的 Meta/Server 接口)。Ubuntu 22.04 发行版形态下 D-Bus 开箱即用(dbus=system 默认启用),本文实际以 D-Bus 为主线、Ice 为补充。

三、前置条件

  1. 服务运行中(单元 mumble-server active、64738 双协议监听):
systemctl is-active mumble-server
ss -ltn | grep 64738
ss -lun | grep 64738

实测输出:

active
LISTEN 0      50           0.0.0.0:64738      0.0.0.0:*
UNCONN 0      0            0.0.0.0:64738      0.0.0.0:*
  1. D-Bus 管理接口可用(配置 dbus=system):
busctl list --no-pager | grep mumble

实测输出:

net.sourceforge.mumble.murmur 7646 murmurd         mumble-server   :1.17         mumble-server.service       -       -
  1. 本文部分命令需要 root(写数据库、读受限日志),示例均以 sudo 语境说明;演示账号沿用 SuperUser + 口令 q1w2e3r4 惯例。

四、murmurd 服务端命令行参数详解

4.1 参数总览(--help 全量实测)

/usr/sbin/murmurd --help 2>&1

实测输出(全文照抄):

<X>2026-10-21 11:31:05.468 Usage: /usr/sbin/murmurd [-ini <inifile>] [-supw <password>]
  -ini <inifile>         Specify ini file to use.
  -supw <pw> [srv]       Set password for 'SuperUser' account on server srv.
  -readsupw [srv]        Reads password for server srv from standard input.
  -disablesu [srv]       Disable password for 'SuperUser' account on server srv.
  -limits                Tests and shows how many file descriptors and threads can be created.
                         The purpose of this option is to test how many clients Murmur can handle.
                         Murmur will exit after this test.
  -v                     Add verbose output.
  -fg                    Don't detach from console.
  -wipessl               Remove SSL certificates from database.
  -wipelogs              Remove all log entries from database.
  -version               Show version information.

  -license               Show Murmur's license.
  -authors               Show Murmur's authors.
  -third-party-licenses  Show licenses for third-party software used by Murmur.

If no inifile is provided, murmur will search for one in
default locations.

要点解读:-ini/-supw/-fg/-v 是最常用四件套;-readsupw 适合脚本里从 stdin 传入口令避免命令行历史泄漏;-wipessl/-wipelogs 是破坏性操作(清空证书/日志),执行前必须确认。

4.2 -version:版本确认

/usr/sbin/murmurd --version

实测输出:

<X>2026-10-21 11:05:28.573 /usr/sbin/murmurd -- 1.3.4-1ubuntu1

4.3 -supw:设置 SuperUser 密码

SuperUser 账户默认无密码、不可登录,首次必须设置。建议先停服再执行(避免与运行服务争抢 SQLite 库锁),完成后启动:

sudo systemctl stop mumble-server
sudo murmurd -ini /etc/mumble-server.ini -supw 'q1w2e3r4'
echo "exit=$?"
sudo systemctl start mumble-server

实测输出(节选,-supw 段无报错且退出码 0 即成功):

<X>2026-10-21 11:11:13.622 SSL: OpenSSL version is 'OpenSSL 3.0.2 15 Mar 2022'
<W>2026-10-21 11:11:13.622 Initializing settings from /etc/mumble-server.ini (basepath /etc)
<W>2026-10-21 11:11:13.622 MetaParams: TLS cipher preference is "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:..."
<C>2026-10-21 11:11:13.623 Successfully switched to uid 106
exit=0
  • 多虚拟服务器实例时用第二个参数指定服务器编号:murmurd -ini <配置> -supw 'q1w2e3r4' 1(对 1 号服务器生效);
  • 脚本化场景用 -readsupw 从 stdin 读入:echo 'q1w2e3r4' | sudo murmurd -ini /etc/mumble-server.ini -readsupw,避免口令进入 shell 历史;
  • 撤销 SuperUser 密码:sudo murmurd -ini /etc/mumble-server.ini -disablesu。

4.4 -limits:容量上界诊断

评估单机可承载客户端规模前,先测进程可创建的文件描述符与线程上限(测试完自动退出,不影响运行中的服务):

/usr/sbin/murmurd -limits -ini /etc/mumble-server.ini 2>&1 | tail -2

实测输出(节选,测试过程中逐档递增打印):

<W>2026-10-21 11:31:21.126 7680 threads...
<F>2026-10-21 11:31:21.809 Managed to spawn 8190 threads

要点解读:实测环境可创建 8190 线程;Murmur 为每客户端连接占用少量线程与 fd,该数值给出容量上界的参考量级(8190 线程 ≈ 数千客户端规模,远高于 1.3.4 默认 users=100 的软件上限——常态瓶颈在带宽与 users 配置而非系统限额)。

4.5 -fg 与 -v:前台运行与详细日志

  • -fg:不脱离控制台前台运行(systemd 单元内 ExecStart 必带,本文方案 B 的单元即 ExecStart=… -fg);
  • -v:增加详细输出,排障时与 -fg 组合手工前台拉起:
sudo systemctl stop mumble-server
sudo /usr/sbin/murmurd -ini /etc/mumble-server.ini -v -fg

实测输出(节选,Ctrl+C 退出后 systemctl start mumble-server 恢复服务):

<W>2026-10-21 11:13:36.135 ServerDB: Opened SQLite database /var/lib/mumble-server/mumble-server.sqlite
<W>2026-10-21 11:13:36.137 DBus registration succeeded
<W>2026-10-21 11:13:36.140 1 => Server listening on 0.0.0.0:64738
<W>2026-10-21 11:13:36.143 1 => Announcing server via bonjour

4.6 -wipessl / -wipelogs:破坏性清理(慎用)

  • -wipessl:清空数据库中的自动生成 SSL 证书(下次启动重新生成,客户端将提示新指纹);
  • -wipelogs:清空数据库内全部日志条目。两者均不可逆,执行前备份数据库文件。

4.7 -license / -authors / -third-party-licenses

用于查看许可与作者信息。实测本构建形态下 -license 无控制台输出(0 行),许可原文以包文件为准:/usr/share/doc/mumble-server/copyright(Debian 版权汇总格式)。

五、systemd 服务管理

单元名 mumble-server(1.3.4 包为 SysV 脚本 + systemd 兼容托管,命令形态一致)。逐条实测:

sudo systemctl start mumble-server
sudo systemctl stop mumble-server
sudo systemctl restart mumble-server
sudo systemctl enable mumble-server

状态与自检:

systemctl is-active mumble-server
systemctl status mumble-server --no-pager -l | head -8

实测输出:

active
● mumble-server.service - LSB: Mumble VoIP Server
     Loaded: loaded (/etc/init.d/mumble-server; generated)
     Active: active (running) since Wed 2026-10-21 11:05:09 UTC; 3s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 863 ExecStart=/etc/init.d/mumble-server start (code=exited, status=0/SUCCESS)
      Tasks: 2 (limit: 94371)
     Memory: 7.0M

⚠️ 注意:sysv 兼容单元的 Loaded 行显示 /etc/init.d/mumble-server; generated 属正常形态;内存常驻约 7MB。修改配置后的标准动作是 sudo systemctl restart mumble-server,随后 systemctl is-active 与端口双查验证(见第三章)。

六、D-Bus 管理接口详解

6.1 接口与方法总览

用 introspect 拿到方法清单(对象 / 为 Meta 全局接口、对象 /1 为 1 号虚拟服务器接口):

dbus-send --system --print-reply --dest=net.sourceforge.mumble.murmur / \
  org.freedesktop.DBus.Introspectable.Introspect | grep -oE 'method name="[a-zA-Z]+"' | sort -u

实测输出(Meta 层方法,节选):

<method name="start">
<method name="stop">
<method name="newServer">
<method name="deleteServer">
<method name="getBootedServers">
<method name="getAllServers">
<method name="isBooted">
<method name="getConf">
<method name="getAllConf">
<method name="getDefaultConf">
<method name="setConf">
<method name="setSuperUserPassword">
<method name="getLog">
<method name="getVersion">

/1 对象(Murmur/Server 层)实测方法含:getPlayers、getChannels、getACL、setACL、getBans、setBans、kickPlayer、getPlayerState、setPlayerState、sendMessage、getChannelState、setChannelState、removeChannel、addChannel、sendMessageChannel、getPlayerNames、getPlayerIds、setAuthenticator、setTemporaryGroups、registerPlayer、unregisterPlayer、updateRegistration、setRegistration、getRegistration、getRegisteredPlayers、verifyPassword、getTexture、setTexture。

6.2 元信息与实例管理(Meta 层)

版本与实例枚举:

dbus-send --system --print-reply --dest=net.sourceforge.mumble.murmur / net.sourceforge.mumble.Meta.getVersion
dbus-send --system --print-reply --dest=net.sourceforge.mumble.murmur / net.sourceforge.mumble.Meta.getBootedServers
dbus-send --system --print-reply --dest=net.sourceforge.mumble.murmur / net.sourceforge.mumble.Meta.isBooted int32:1

实测输出:

   int32 1
   int32 3
   int32 4
   string "1.3.4-1ubuntu1"
   array [
      int32 1
   ]
   boolean true

要点解读:getVersion 返回主/次/修订号三元组加版本串;getBootedServers 显示当前运行中的虚拟服务器编号(默认安装即 1 号)。Meta.start/Meta.stop 可对单个虚拟服务器热启停(Meta.start int32:1),不影响进程内其他实例。

6.3 两层配置读写(getDefaultConf / getConf / setConf)

三层典型实测(ini 全局层、数据库覆盖层的读写与键名映射),含完整命令与回显见《Mumble 1.3.4 配置参数详解》第三章。这里给出最小可执行样例——查全局默认中某键:

dbus-send --system --print-reply --dest=net.sourceforge.mumble.murmur / \
  net.sourceforge.mumble.Meta.getDefaultConf | grep -A1 '"port"'

实测输出:

         string "port"
         string "64738"

⚠️ 键名映射提醒:ini 的 serverpassword 在该层键名为 password(实测 string "password" / string "team-voice-2026"),脚本里勿用错键名。

6.4 频道管理(addChannel / getChannels)

建频道(频道名、父频道 id;Root 的 id 为 0):

dbus-send --system --print-reply --dest=net.sourceforge.mumble.murmur /1 \
  net.sourceforge.mumble.Murmur.addChannel string:"project-a" int32:0

实测输出:

method return time=1792581622.613500 sender=:1.35 -> destination=:1.37 serial=4 reply_serial=2
   int32 1

列频道:

dbus-send --system --print-reply --dest=net.sourceforge.mumble.murmur /1 \
  net.sourceforge.mumble.Murmur.getChannels

实测输出(节选,两个频道各为一个 struct):

         int32 0
         string "Root"
         int32 -1
         int32 1
         string "project-a"
         int32 0

要点解读:新建频道获得 id=1、父级为 0(Root);getChannels 每项含「频道 id、名称、父 id」及子结构。实测排障:removeChannel 在 1.3.4 的 D-Bus 通道上触发 org.freedesktop.DBus.Error.NoReply,且其后所有 D-Bus 调用不再响应(服务进程与端口仍存活,重启服务后恢复、删除未落库)——删除频道建议改用 Mumble 客户端 GUI 右键删除,或走 Ice 通道/重启维护窗口执行。

6.5 用户管理(registerPlayer / getRegisteredPlayers / kickPlayer)

注册用户(写入数据库,获得注册 id):

dbus-send --system --print-reply --dest=net.sourceforge.mumble.murmur /1 \
  net.sourceforge.mumble.Murmur.registerPlayer string:"voicebot"

实测输出:

method return time=1792581649.431692 sender=:1.35 -> destination=:1.39 serial=6 reply_serial=2
   int32 1

在线用户与踢人:getPlayers 返回当前在线列表(空服务器实测返回空 array);kickPlayer 传「会话 id + 原因」将在线用户请出(kickPlayer int32:<会话id> string:"reason")。注册用户的密码修改经 setRegistration/verifyPassword 配合完成。

SuperUser 密码的 D-Bus 写法(与 murmurd -supw 等效、无需停服):

dbus-send --system --print-reply --dest=net.sourceforge.mumble.murmur / \
  net.sourceforge.mumble.Meta.setSuperUserPassword int32:1 string:"q1w2e3r4"

实测输出:

method return time=1792582281.855226 sender=:1.43 -> destination=:1.58 serial=17 reply_serial=2

6.6 日志读取(getLog)

数据库内日志的窗口化读取(服务器 id、起始、条数):

dbus-send --system --print-reply --dest=net.sourceforge.mumble.murmur / \
  net.sourceforge.mumble.Meta.getLog int32:1 int32:0 int32:5

实测输出(节选):

   array [
      struct {
         uint32 1792582053
         string "<1:(-1)> Connection closed: The TLS/SSL connection has been closed [1]"
      }
      struct {
         uint32 1792582053
         string "<1:(-1)> New connection: 127.0.0.1:52440"
      }

要点解读:每条为「unix 时间戳 + 日志行」;<1:(-1)> 中的 1 为服务器编号。文件日志与数据库日志互补:文件侧看启动/监听,getLog 侧看连接行为。

七、Ice 管理接口(ZeroC Ice)

7.1 启用与监听验证

Ubuntu 22.04 模板中 Ice 默认未启用,且存在注释符陷阱(详见配置篇 5.6 节实测)。将配置行改为有效行后重启:

ice=tcp -h 127.0.0.1 -p 6502
sudo systemctl restart mumble-server
ss -ltn | grep 6502

实测输出:

LISTEN 0      4096       127.0.0.1:6502       0.0.0.0:*

7.2 Slice 定义与客户端依赖

1.3.4 包自带接口定义文件,路径 /usr/share/slice/Murmur.ice(dpkg -L mumble-server 可确认),方法集与 D-Bus 同源。

Ubuntu 22.04 客户端依赖的实测排障:仓库包 python3-zeroc-ice 3.7.6-4ubuntu1 安装后 import Ice 直接报错(实测 traceback):

  File "/usr/lib/python3/dist-packages/Ice/__init__.py", line 78, in <module>
    from Ice.Py3.IceFuture import FutureBase, wrap_future
ModuleNotFoundError: No module named 'Ice.Py3'

定位与结论:该包的 Ice/__init__.py 引用了 Ice.Py3.IceFuture 模块,但包内并未提供 Ice/Py3/ 目录(发行包缺件),属发行版打包缺陷。应对路径(按优先级):

  1. 管理操作改走 D-Bus(Ubuntu 形态下开箱即用,本文第六章全部命令可直接用);
  2. Ice 客户端安装 ZeroC 官方仓库或 Debian bookworm 的 python3-zeroc-ice 包绕过该缺陷;
  3. C++ 侧使用 libzeroc-ice-dev + zeroc-ice-compilers(slice2cpp)自行生成代理代码。

启用 ice= 后服务端侧已就绪(6502 监听实测如上),客户端依赖满足后即可按 Meta:tcp -h 127.0.0.1 -p 6502 代理串连接管理。

八、注意事项

  1. -supw/-readsupw/-disablesu 都要停服执行(或确保服务已停),防止与运行中服务并发写 SQLite 造成锁冲突;D-Bus 的 setSuperUserPassword 无需停服(运行期热设,实测见 6.5 节);
  2. 破坏性参数三思:-wipessl 会使全体客户端出现新指纹告警、-wipelogs 不可恢复;执行前备份 /var/lib/mumble-server/mumble-server.sqlite;
  3. D-Bus 无认证保护:system bus 的默认策略限制仅 root/同用户可调用,但管理通道能力极大(删库级),生产上不应放宽 bus policy;
  4. removeChannel 走 D-Bus 有坑(1.3.4 实测 NoReply 且通道卡死,见 6.4 节),删除频道优先用客户端 GUI 或 Ice;
  5. 多虚拟服务器:-supw 第二参数与 D-Bus int32:<服务器id> 均按实例编号操作;编号可从 getBootedServers/getAllServers 获取。

九、常见问题(FAQ)

Q1:dbus-send 报 ServiceUnknown / 名称不存在?

确认配置 dbus=system 生效(行首无注释符)并重启服务,然后 busctl list --no-pager | grep mumble 应能看到 net.sourceforge.mumble.murmur(实测见第三章)。仍无则看启动日志是否有 DBus registration succeeded 行。

Q2:murmurd -supw 执行后 SuperUser 仍登录不了?

三步排查:执行时是否停服且退出码为 0(echo $? 为 0);登录用户名是否为 SuperUser(大小写敏感,非 admin/root);连的是否为同一数据目录的实例(多实例时核对 -ini 指向的 database= 路径)。运行期热设可改用 setSuperUserPassword(6.5 节)。

Q3:D-Bus 调用突然全部无响应?

先看服务进程与端口是否存活(systemctl is-active + ss -ltn | grep 64738)。1.3.4 实测中 removeChannel 会触发 NoReply 并连带 D-Bus 通道卡死,进程存活但调用不回——重启服务恢复(操作未落库)。规避方式见第八章第 4 条。

Q4:python3 写 Ice 脚本报 No module named 'Ice.Py3'?

Ubuntu 22.04 仓库 python3-zeroc-ice 打包缺件(实测 traceback 见 7.2 节),非脚本问题。改走 D-Bus 或更换 Ice 客户端包来源(7.2 节三条应对路径)。

Q5:如何评估这台服务器最多能带多少客户端?

软件上限看 users 配置,系统上界用 murmurd -limits 实测(本文环境 8190 线程,见 4.4 节),常态瓶颈按「bandwidth × 转发份数」估算出口带宽,三者取最小。

十、参考链接