I’m using a Lenovo T14 Gen 4 (AMD), with the Fedora 40 KDE Spin.
The internal microphone works normally on boot, and after sleeping and waking up. However, sometimes (not always), after connecting a USB-A headset with microphone, upon disconnection, the internal microphone stops working. Its volume indicator remains “locked” either on minimal or maximal volume, and no one can hear me on any software I try; for instance, currently this is the case, and it says “Digital Microphone” and the blue bar is full.
This is really annoying, and after a few months, the only solution I found is to reboot. I tried restarting pipewire, reconnecting and disconnecting the headset, updating the kernel in the hopes that a new kernel will fix it, removing and re-adding devices in the System Settings - Sound panel, etc. Nothing can ever restart the internal microphone after it gets into this state.
Is this a Lenovo issue? KDE? pipewire? I don’t know how to debug it; I don’t see anything obvious on sudo dmesg; on the other hand, when I open the sound settings, there are lots of org.kde.pulseaudio messages, but too many to know what to look for.
On a previous Lenovo laptop (P1), I had never encountered this kind of issue with the internal microphone. Any help is appreciated…
As a workaround, could you switch your microphone input (and sound output) to the internal device instead of disconnecting the USB mic? I’m not sure if KDE has a way of quickly switching sound inputs and outputs, but GNOME has plugins that add menu entries for that sort of thing to the top level menus for quick access.
@glb: I tried the workaround in the linked website, but the “echo 1 >…” command to the PCI device (as root) does not terminate, and even Ctrl+C does nothing. I had to manually close the terminal. I retried it, and also with /rescan instead of /remove at the end, and, again, nothing happened, and the command does not terminate.
As for the other workaround, I’m not sure I understood it. You mean, before physically disconnecting the USB headset (which I need to do periodically), switching the currently active microphone to be the internal one, and then disconnecting the USB? I can try it next time. By the way, if I reconnect an external microphone (via a USB-A or USB-C headset w/ mic), this new microphone does work; it’s really only the internal one that stops working (I can still mute it and the keyboard light does respond to it, and everything seems fine except that no one can hear me, and the current volume indicator in the audio widget in the taskbar confirms that there is no sound variation at all; unlike when everything works, and I can tap the laptop or talk and see the widget sound indicator change as expected).
Sometimes older client programs like alsamixer (cli) or pavucontrol (gui) can reset/unmute audio channels when the default graphical control panel of the DE cannot. Other than that, I pretty much out of random ideas to try. You’d have to find some low-level debug messages to dig into the problem further.
I haven’t been able to reach the “no more microphone” state so far, but when it happens, I’ll try restarting wireplumber just in case. I did try alsamixer/pavucontrol once but they didn’t help.
Ok, so it finally arrived again, after connecting some Bluetooth earbuds with microphone, using them, and disconnecting them.
I ran systemctl --user restart wireplumber, but then all audio devices disappeared.
I then ran systemctl restart --user pipewire, and the audio devices reappeared, but the microphone remains at a constant level and does not work.
If I re-run systemctl restart, switching between wireplumber and pipewire, I can make the audio devices disappear and reappear, but no changes to the microphone.
I also tried removing ~/.local/state/wireplumber and restarting, didn’t help.
For now, no solution other than rebooting the laptop. I’ll try more things when I have the time.