DGM20 control for Linux: protocol library, CLI and local web UI
Reverse-engineered from Maono Link 4.0.88 (DGM20_OLD.dll) and verified against a DGM20 (352f:0105, firmware 2.1.2). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
# dgm20-linux
|
||||
|
||||
Control the **Maono DGM20** USB microphone on Linux. Maono Link only runs on Windows and macOS; this
|
||||
covers the same settings with a local web page and a command-line tool.
|
||||
|
||||

|
||||
|
||||
- Noise cancellation on/off and strength
|
||||
- Vocal enhancement
|
||||
- Hear yourself (headphone monitoring)
|
||||
- Mute, kept in sync with the mic's touch pad
|
||||
- RGB ring brightness
|
||||
- Factory reset
|
||||
|
||||
Pure Python 3.9+, no dependencies. Nothing leaves your machine: the page is served from localhost
|
||||
and loads no external fonts or scripts.
|
||||
|
||||
> Unofficial. Not affiliated with or endorsed by Maono. Tested on a DGM20 with USB ID
|
||||
> `352f:0105`, firmware 2.1.2. Newer DGM20 revisions (`352f:0112`) and the DGM20G/DGM20W
|
||||
> use different firmware and are not supported yet.
|
||||
|
||||
## Install
|
||||
|
||||
```sh
|
||||
pipx install git+https://git.reiners.dev/ReinersCloudConsulting/dgm20-linux.git
|
||||
# or, from a checkout
|
||||
pipx install .
|
||||
```
|
||||
|
||||
Let your user reach the mic without root, then unplug and replug it:
|
||||
|
||||
```sh
|
||||
sudo cp udev/70-maono-dgm20.rules /etc/udev/rules.d/
|
||||
sudo udevadm control --reload && sudo udevadm trigger
|
||||
```
|
||||
|
||||
The rule grants access to the logged-in desktop user (`uaccess`) and to the `wheel` group, which
|
||||
covers ssh sessions. Change the group if your distro uses a different one.
|
||||
|
||||
## Use
|
||||
|
||||
```sh
|
||||
dgm20-web --open # control page at http://localhost:8720
|
||||
dgm20ctl # show settings
|
||||
dgm20ctl set nc on nc-level 80 enhance off
|
||||
dgm20ctl watch # print changes made on the mic itself
|
||||
dgm20ctl factory-reset --yes
|
||||
```
|
||||
|
||||
To keep the page running in the background:
|
||||
|
||||
```sh
|
||||
cp contrib/dgm20-web.service ~/.config/systemd/user/
|
||||
systemctl --user enable --now dgm20-web
|
||||
```
|
||||
|
||||
`dgm20-web` only listens on localhost. `--host 0.0.0.0` makes it reachable from your network, and
|
||||
anyone on that network can then change your mic settings, because there is no login.
|
||||
|
||||
Input gain and headphone volume are standard USB audio controls. Set them in your desktop's sound
|
||||
settings, `pavucontrol` or `alsamixer`. The mic does not expose them on its control channel.
|
||||
|
||||
## How it works
|
||||
|
||||
The settings were found by reading Maono Link's DGM20 plugin. See [PROTOCOL.md](PROTOCOL.md) for
|
||||
the packet format and register map. `dgm20ctl raw` gives direct register access if you want to
|
||||
explore.
|
||||
|
||||
## Development
|
||||
|
||||
```sh
|
||||
PYTHONPATH=src python3 -m unittest discover -s tests
|
||||
PYTHONPATH=src python3 -m dgm20.web
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
Reference in New Issue
Block a user