# 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. ![The control page](docs/screenshot.png) - 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