From 2bb29041255b809e221187813bf1bf6c077ccb47 Mon Sep 17 00:00:00 2001 From: carlos Date: Wed, 19 Aug 2026 01:03:13 -0400 Subject: [PATCH] [system] audio: let the session user reach Maono mic controls Maono USB mics (PD400X, DM30, ...) put gain, EQ, compressor, limiter and the monitor mix on a vendor-defined HID page (usage page 0xFF01) rather than the audio interface. The kernel leaves both /dev/hidraw* and the raw USB node root-owned, so a control app running as the user cannot open either one and the mic stays on whatever settings were last written to it elsewhere. Ship 70-ryoku-maono.rules, granting the active-session user access via uaccess with no group setup, the same pattern as 60-ryoku-i2c.rules. The four standard USB-audio controls (mic gain and mute, headphone level and mute) are unaffected; they already worked. --- release/CHANGELOG.md | 5 +++++ release/packages/ryoku-desktop/PKGBUILD | 5 +++++ system/hardware/CHANGELOG.md | 9 +++++++++ system/hardware/audio/70-ryoku-maono.rules | 6 ++++++ 4 files changed, 25 insertions(+) create mode 100644 system/hardware/audio/70-ryoku-maono.rules diff --git a/release/CHANGELOG.md b/release/CHANGELOG.md index afb5d63bb..c52367541 100644 --- a/release/CHANGELOG.md +++ b/release/CHANGELOG.md @@ -2,6 +2,11 @@ ## Unreleased +### Added +- `ryoku-desktop` ships `system/hardware/audio/70-ryoku-maono.rules` to + `/usr/lib/udev/rules.d`, so the vendor HID node on Maono USB mics is reachable + by the active-session user. See the system/hardware changelog. + ### Fixed - `ryoku-desktop` no longer ships the PipeWire `switch-on-connect` drop-in (`ryoku/apps/pipewire/`): it broke the saved default audio device on every diff --git a/release/packages/ryoku-desktop/PKGBUILD b/release/packages/ryoku-desktop/PKGBUILD index 8c20ff732..a424da630 100644 --- a/release/packages/ryoku-desktop/PKGBUILD +++ b/release/packages/ryoku-desktop/PKGBUILD @@ -492,6 +492,11 @@ package() { install -Dm644 "$_repo/system/hardware/ddc/60-ryoku-i2c.rules" \ "$pkgdir/usr/lib/udev/rules.d/60-ryoku-i2c.rules" + # Maono USB mics: their control features sit on a vendor HID page the kernel + # leaves root-only, so uaccess is what lets a control app reach them at all. + install -Dm644 "$_repo/system/hardware/audio/70-ryoku-maono.rules" \ + "$pkgdir/usr/lib/udev/rules.d/70-ryoku-maono.rules" + # Bluetooth tuning: bluez owns /etc/bluetooth/main.conf and BlueZ has no # drop-in dir, so Ryoku cannot ship a copy here (pacman file conflict). The # ryoku-bluetooth-tune helper (installed by the hardware glob above) sets the diff --git a/system/hardware/CHANGELOG.md b/system/hardware/CHANGELOG.md index e1a0157e6..e312c5de8 100644 --- a/system/hardware/CHANGELOG.md +++ b/system/hardware/CHANGELOG.md @@ -3,6 +3,15 @@ ## Unreleased ### Added +- `audio/70-ryoku-maono.rules`: reach the control features on Maono USB mics. + The PD400X and its siblings put gain, EQ, compressor, limiter and the monitor + mix behind a vendor-defined HID page (usage page `0xFF01`) instead of the audio + interface, and the kernel leaves both `/dev/hidraw*` and the raw USB node + root-owned, so a control app running as the user cannot open either one. The + rule grants the active-session user access (`uaccess`, no group setup), the + same pattern as `60-ryoku-i2c.rules`. Shipped to `/usr/lib/udev` by + `ryoku-desktop`. The four standard USB-audio controls (mic gain and mute, + headphone level and mute) already worked without it. - `leds/ryoku-leds`: `RYOKU_LEDS_DISABLE=1` turns the OpenRGB accent sync off. `ryoku-leds apply` runs from Hyprland autostart and again from the shell daemon on every wallpaper change, and there was no off switch short of forking the diff --git a/system/hardware/audio/70-ryoku-maono.rules b/system/hardware/audio/70-ryoku-maono.rules new file mode 100644 index 000000000..e11c1f3aa --- /dev/null +++ b/system/hardware/audio/70-ryoku-maono.rules @@ -0,0 +1,6 @@ +# Maono USB mics (PD400X, DM30, ...) expose gain, EQ, compressor, limiter and +# the monitor mix on a vendor-defined HID page rather than the audio interface. +# The kernel leaves that node root-only, so grant the active-session user access +# (uaccess, no group setup) and any control app can reach it. +KERNEL=="hidraw*", ATTRS{idVendor}=="352f", TAG+="uaccess" +SUBSYSTEM=="usb", ATTR{idVendor}=="352f", TAG+="uaccess"