In Fedora 40 Workstation, I am aware that it is possible to mute the internal built-in microphone in Gnome Settings and have it stay muted even after a restart.
What I’d like to know is how can the internal built-in microphone be permenanently disabled without disabling the microphone on any other external plugged-in devices (e.g. headset)?
Each microphone is configured as a discrete source and in most cases can be enabled or disabled without interfering with other hardware. When the headset is connected it should see its own mic separately.
Does your laptop firmware have a setting to disable the internal mic? And if it is disabled does fedora report that no internal mic exists (some devices disabled in firmware are still discoverable by linux)? There have been laptops with an external switch to turn off the internal mic but I doubt yours would have that.
Personally I went out of my way to purchase a laptop without an internal mic (or internal camera). Keep that in you back pocket for consideration on your next purchase.
P.S.
see smbios-token-ctl --help
as it provides a generic way to access uefi setup from linux. This can be very useful and very scary. On the one hand it shows you can get/set uefi settins from the os. On the other hand it shows that entering uefi setup at boot and changing settings is not the only way settings can change.
If a bad actor was able to change your mic to ‘enabled’ in uefi it may not be active until the next reboot but the bad act was still successful.
With my Dell Latitude 5591, if I disable Internal Mic from BIOS checkbox, it disables the laptop’s onboard mic in the OS, but 3.5mm mics still detect and work fine along with anything on USB.
My laptop seemingly sets this in EC or SMBIOS or something too (keyboard button and LED for mic disable; persists between reboots/OS), but I haven’t tried messing with this from anything outside that BIOS toggle.
I believe this to be relatively easy to set with Realtek audio on Intel chipsets/CPU mobos with Intel DSP disabled (no SOF) but if the BIOS doesn’t provide an easy-toggle for it there might be a UEFI var for it under setup_var.
I didn’t see an option for disabling it in the bios. I’d like to ask you, in the terminal, how can one see a list of recognized microphones and then disable a specific one?
One idea, can you use wireplumber to identify your device with
wpctl status
and then inspect that device with
wpctl inspect 42
replacing the 42 with whatever you device ID is.
Maybe from there someone else could let us know how to disable this device in the wireplumber or pipewire config? Alternatively we could remove the driver.
I am learning as I look into this, and I have not tested it.
My understanding is that for the microphone - or any device - to work it must be loaded into the kernel.
Therefore if you can disable the loading of the device at a kernel level, it will not work.
I have found at Disable Analog Audio, Force Default HDMI Audio - Disable / Blacklist snd_hda_intel Module - Unix & Linux Stack Exchange the example of blacklisting the microphone/sound module in /etc/modprobe.d/ and then the further blocking of the loading of snd_hda_codec_generic. To me it appears that this will not only block the microphone but all sound. However using this mix of either blacklisting or blocking you should eventually be able to essentially remove the mic from your system.
You can see loaded modules with lsmod, and lspci -nnvk to see what kernel driver/module you are using. I am pretty sure you can disable ALL sound easily enough with this method - but not sure about just the microphone.
Q: why do you want to disable the microphone? Personally on my desktops I do not install the microphone hardware, I then use an AudioBox to plug in a Rode Mic when I need it. Old school plug-it-in-when-you-need-it! Also a reason I don’t like laptops.
Rather than blocking this at the kernel level I would think doing it at the alsa level would be a better match. The internal mic can be disabled and the headphone jack mic still work. I think the pipewire/pulseaudio layer is too late as the alsa level would still be active.
But the complexities of the Intel hda, though wonderfully flexible, is still something I need to learn more about. It looks like I can reassign which function is on which ring of the headphone jack if I want to.
I never use the built-in microphone because it is low quality so disabling it would mean less decision making on a daily basis when selecting the audio input option in a pull down menu of video calling or screen recording software. That’s the main reason. But it also seems like the screen recording software picks up the internal fan noise even when the audio input selected is the external higher quality microphone on a headset, and not the built-in microphone, so other than using noise suppression and other filters, I want to make sure that the built-in microphone is disabled.
While looking at another thread, I found out that hardware can be disabled by device ID.
So either steppybug’s ALSA idea or blacklist by device ID. lsusb will give you the device ID.