Ubuntu – How to automatically switch PulseAudio input to headset upon connection


Using Xubuntu 18.04, I have a headset that I connect, with its own microphone input. Every time I connect it, I then have to launch pavucontrol, click to the "Input Devices" tab, then select the "Headset Microphone" (instead of "Internal Microphone") in the "Port" drop down menu.

Whenever I disconnect the headset, the "Port" gets switched back to "Internal Microphone", so I have to repeat the process the next time I connect the headset.

Is there a way to do this automatically, or with minimal effort on my part?

I searched online and saw the advice to ensure the PulseAudio module-switch-on-connect is loaded, but I checked pactl list short modules and it appears to be already loaded.

Best Answer

  • I almost fix it on my laptop running Debian 10 this way:

    1. Unplug your headset.
    2. Edit /etc/pulse/daemon.conf — set log-level = debug
    3. Restart pulseaudio: pulseaudio -k
    4. Run journalctl --follow in a separate terminal/tmux window
    5. Plug in your headset and watch what happens. module-alsa-card.c: Jack 'Headphone Mic Jack' is now plugged in says which jack is detected
    6. Edit /usr/share/pulseaudio/alsa-mixer/paths/analog-input-headset-mic.conf, find the [Jack Headphone Mic] section and change state.plugged from unknown to yes

    I said "almost", because

    1. Mic gain did not restore
    2. It does not distinguish external loudspeakers (TRS jack) and headset (TRRS jack) and switch input source anyway, so I get static noise instead of internal mic audio.

    The blog post guided me this direction.