49

During voice / video conversations I would like to mute/unmute the microphone without having to go through all these steps each time:

  • Sound indicator, Sound preferences, Select Input, Mute or unmute the microphone.

I'm looking for either:

  • an application that can do this from the command line,
  • a way I can assign a keyboard shortcut that can mute/unmute the microphone
2
  • 1
    If you use Empathy for voice chat, it has a mute button built-in (that works with Google Talk at least, Skype isn't supported yet).
    – JanC
    Nov 8, 2010 at 14:56
  • 2
    I'm looking for something that can be made to run through a shortcut, similar to the main volume mute/unmute laptop toggle button. Nov 8, 2010 at 16:03

14 Answers 14

57

Go to System Preferences then Keyboard and click Shortcuts then Custom Shortcuts:

Keyboard shortcuts

Click on Add

Custom shortcut

Fill in:

Toggle Microphone

and

amixer set Capture toggle

For USB webcams you need to chose the device (-c 1), or maybe another number.

amixer -c 1 sset Mic toggle

Click Apply and then associate a new key with this command (e.g. the Pause/Break key).

6
  • Works this with recent releases? Thank you.
    – Diego V
    Apr 9, 2013 at 19:23
  • 1
    It does work; thanks to Lucian. I have an "Audio mute" key on my laptop, I mapped it to shift+Audio mute, which is very easy to remember :) Apr 15, 2013 at 15:55
  • 1
    The command amixer set Mic toggle (not Capture) works for me in terminal but any assigned keyboard shortcut doesn't actually seem to run. I've tried ctrl+Audio Mute but also ctrl+M (captured by keyboard key presses) Jan 15, 2014 at 15:42
  • Confirmed, this works with Ubuntu 16.10 as well.
    – Kushal
    Nov 17, 2016 at 7:13
  • On MATE the menus for adding the keybinding are a little different, but it works in the same way. Thanks! Apr 11, 2017 at 5:04
22

You can mute the microphone with

amixer set Capture nocap

and unmute the microphone with

amixer set Capture cap
1
  • 1
    that worked great with raspberry pi, except you substitute Mic for Capture Apr 24, 2014 at 6:41
16

I switch between a USB webcam/mic and my internal mic and the other solutions typically work on the "default" device which is often not the device I'm actively using so I wrote this to mute all microphones

pacmd list-sources | \
        grep -oP 'index: \d+' | \
        awk '{ print $2 }' | \
        xargs -I{} pactl set-source-mute {} toggle \
        && pacmd list-sources | \
        grep -oP 'muted: (?:yes|no)'
2
  • I like this atomic approach. Consider using something like 'index: \d?\d' to account for double-digit source indices. Jan 22, 2020 at 22:41
  • 2
    'index: \d+' is the more appropriate regexp, but yeah that works :)
    – blockloop
    Jan 24, 2020 at 17:01
14
amixer set Capture toggle && amixer get Capture | grep '\[off\]' && notify-send "MIC switched OFF" || notify-send "MIC switched ON"
1
  • 2
    I like the way in which you combine grep and notifications: Super Neat =) Jul 18, 2017 at 17:19
11

Simply mute/unmute with this command:

amixer -D pulse sset Capture toggle

You can also add notification to make sure it's on or off, as per vladimirich answer to the same question

amixer -D pulse sset Capture toggle && amixer get Capture | grep '\[off\]' && notify-send "MIC switched OFF" || notify-send "MIC switched ON"

Inspired by Mark Rooney's answer on muting/unmuting sound.

3
  • 2
    This actually works for me on Ubuntu 16.04. -q can be skipped.
    – gronostaj
    Oct 8, 2018 at 9:29
  • 2
    bindsym XF86AudioMicMute exec --no-startup-id amixer -D pulse sset Capture toggle for i3wm Nov 7, 2018 at 21:20
  • 1
    This command works for me in Pop_OS! 19.10 (which is based on Ubuntu 19.10). One can explicitly disable microphone capture with the command amixer --device pulse sset Capture nocap and turn the volume of capturing to 0% simultaneously with the command amixer --device pulse sset Capture nocap 0%. Dec 6, 2019 at 13:20
7

On 20.04, I see option to set a shortcut for the same under Settings -> Keyboard Shortcuts -> Sound and Media.

enter image description here

There is no default key assigned though.

1
  • The same found in gnome 3.38.5 (debian 11). Aug 15, 2022 at 20:09
6

pacmd is the command line interface to PulseAudio (the sound subsystem used in recent releases). I don't know what the exact command is you'd need but I think you'd want to play with the set-sink-input-mute function.

pacmd is interactive when run without instructions so you have a good opportunity to play around with it and convert that into a one-line function for toggling mute.

2
  • pacmd is only interactive if you don't give it any commands. I used pacmd list-sources to get a list of inputs and outputs. Under index 2 I had an input devide. (based on its name) Then you can run pacmd set-source-mute 2 1 to mute. Last parameter is a boolean for mute state. 0 or false for unmute and 1 or true for mute.
    – Vitaly
    Jan 26, 2015 at 17:54
  • Here is a one-liner to toggle, instead of set the state: pacmd list-sources | grep -e 'index' -e 'muted:' | sed -n -e '/index: 5/,$p' | head -n2 | tail -n1 | grep yes && pacmd set-source-mute 5 0 || pacmd set-source-mute 5 1. Note that the index occurs in three places, so you need to change those.
    – Pieter Bos
    May 26, 2020 at 15:10
6

the gnome-shell extension nothing to say, which can be installed from its extensions.gnome.org page, provides a microphone icon, mouse and keyboard control, and walkie-talkie style push-to-talk.

0
5

To toggle mute of default microphone in pulseaudio:

  1. Make sure that you have pacmd (from pulseaudio-utils package) and notify-send (from libnotify-bin).
  2. Use this script:
#!/bin/sh

pacmd list-sources | awk '\
BEGIN {default_found=0;}

/^[\t ]*\*/ {default_found=1;}

/^[\t ]*name:/ {
    if (default_found) {
        name=$2;
        gsub("[<>]", "", name);
    }
}

/^[\t ]*muted:/ {
    if (default_found) {
        if ($2=="yes") {
            mute=0;
            icon="microphone-sensitivity-medium";
            status="unmuted"
        } else {
            mute=1;
            icon="microphone-sensitivity-muted";
            status="muted"
        }
        system("pacmd set-source-mute " name " " mute);
        system("notify-send --expire-time 1000 --icon " icon " Microphone: " status);
        exit;
    }
}

/^[\t ]*index:/{if (default_found) exit;}'
0
4

You can mute with:

/usr/bin/amixer -q -c 0 sset 'Master',0 mute

Unmute:

/usr/bin/amixer -q -c 0 sset 'Master',0 unmute

You just need to replace 'Master' with the appropriate mixer name, on the terminal use "amixer" to get a list of mixer devices.

About setting the keyboard shortcut check the answers for How can I find which command is bound to a given keyboard shortcut?

4
  • These mute the sound from my speakers, not the microphone, but thanks. Nov 8, 2010 at 15:29
  • You just need to replace 'Master' with the appropriate mixer name, on the terminal use "amixer" to get a list of mixer devices. Nov 8, 2010 at 15:36
  • This seems to work: # amixer set Capture toggle Nov 8, 2010 at 15:53
  • Can you edit your response (I don't have the necessary karma) to include this answer so I'll accept it? Nov 8, 2010 at 16:00
3

Complementing the response ofLucian Adrian Grijincu and vladimirich

Add the display of a message by enabling/disabling the microphone.

Run multiple commands on the shortcut command:

$ sh -c "amixer set Capture toggle ; amixer get Capture | \
     grep '\[off\]' && notify-send 'MIC switched OFF' || notify-send 'MIC switched ON'"
1

Based on answer above https://askubuntu.com/a/337662/106182

I like to create my own terminal stupid shortcuts. So to configrure m = mute; mm = unmute

I added this to ./.bashrc

# ~/.bashrc
# 
alias m="amixer set Capture nocap"
alias mm="amixer set Capture cap"

update

interesting enough, yesterday I've re-enable autostart of "Screen Locker (Launch screen locker program) in the menu> sessions and startup > Application Autostart and now my hardware mute button start working (after restart) I have no idea why (XFCE Xubuntu 18.08)

I'm still keeping those terminal shortcuts but just wanted to point out

1
  • It's silly that it's not on/off but cap/nocap and that it's not documented or discoverable. +1 for you.
    – poleguy
    Jan 11 at 14:20
1

Here's an example for toggling a selected audio source only using CLI (command line interface) only:

  1. Get list of possible sound cards in the system:

    pacmd list-sources | grep card:

    Example:

    card: 0 <alsa_card.usb-Microsoft_Microsoft___LifeCam_HD-5000-02>

    card: 1 <alsa_card.pci-0000_00_1b.0>

  2. Select some way to identify the correct card. If you trust that your configuration does not change, you can use card number and simply run (e.g. if you want to control the card 1):

    pactl set-source-mute 1 toggle

    However, if you instead want to prepare for a case where e.g. your USB connected source is not always connected and you only want to mute that, you can use some way to detect it from the above output. Let's say you want to control the LifeCam HD-5000 only. Then you could do it like this:

    pacmd list-sources | grep -P "card: \d+ <[^>]*LifeCam_HD-5000[^>]*>" | awk '{print $2}' | xargs -rn1 -I_ pactl set-source-mute _ toggle

    This queries all audio sources from PulseAudio, extracts card rows that have LifeCam_HD-5000 as part of their name, uses awk to extract the second part of the row to get the card number and passes it to pactl to toggle correct source muting using xargs to put the number in correct position in the command. The -rn1 flag tells xargs to do nothing if the card number couldn't be found.

    If you need to know the mute status for some scripting, you can do

    pacmd dump | grep -P 'set-source-mute [^ ]*LifeCam_HD-5000' | awk '{print $3}'

    which will emit yes (muted) or no (not muted).

0

Using answer of vladimirich I created a script, because we can't execute multiple commands in a hotkey entry.

  • so I made a script with the line:

    amixer set Capture toggle && amixer get Capture | grep '\[off\]' && notify-send "MIC switched OFF" || notify-send "MIC switched ON"
    
  • put it in a .sh file

  • and call it in the hotkey command with sh <path to script.sh>.

Works like a charm.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .