Ubuntu – How to change which audio jacks are used for input and output


I'm using a Realtek HD audio card built-in my motherboard. The Windows driver comes with a control panel that allows me to select which back panel jacks are used for what. So for example I can make both the blue jack and green jack for output and only the red one for mic-in. (Whereas by default, the blue jack is for line in, which I never need.)

How can I do the same under Linux? If possible, please don't suggest something that involves PulseAudio or JACK; I'd like to do it the plain way, e.g. by editing ALSA configuration files, if possible. The way I understand it, my problem should have nothing to do with software servers redirecting streams, just instructing the driver to treat this jack as so and so because it's hardware supported.

Thank you very much!

Best Answer

I managed to do it, but changes revert after rebooting. (Update: This can be worked around; see the bottom of this post.)

I did it via a GUI in python called HDA Analyzer that can be fetched and used from the ALSA website like the following:

  • wget -O run.py http://www.alsa-project.org/hda-analyzer.py

  • sudo python run.py (Their page doesn't say sudo, but if you don't do it with sudo, it will download the scripts but fail to run them and complain about privileges.)

Now this will make the GUI start, but its usage is not explained, and it's not exactly newbie-friendly. So to make life easier I'll explain how I did it. In my case, it was a matter of two clicks; the tricky part was locating exactly what needs to be clicked.

(Note: You may explore all the nodes one by one, but don't modify anything you don't understand. Any modification (e.g. ticking a checkbox) becomes effective immediately; there's no apply button.)

  • The list contains many nodes called Node[0x##] followed by any of AUD_OUT, AUD_IN, AUD_MIX, PIN and VENDOR. The only ones you have to look in are the PIN ones.

  • There are multiple types of PIN nodes; the type we want will fill the whole window with panels/control groups (It helps to stretch or maximize the window), as in this screenshot. (The site prevented me from inserting the image inline, sorry.)

  • Inside the Config Default field, some nodes will have in the first line Jack Connection: N/A; we need the ones that say Jack Connection: Jack as in the screenshot.

  • To change a Line-In to an output jack, look until you find the node that says Jack Type: Line In. (And notice the Jack Location2: Rear and Jack Color: Blue.)

  • Then, in the three checkboxes in the Widget Control group below, uncheck IN and check OUT.

  • Using the same way, you can assign any of the front or rear jacks to either input or output.

Now if you close the window, it will ask whether you want to revert changes. Saying yes reverts them immediately; saying no keeps them but only for this session.

If you want to keep your changes permanently, don't close HDA Analyzer yet. Instead, click "Exp" (Export) at the bottom-left and use Save As to write the python script to a file. Now copy that file to something like /etc/hda-mods.py and edit /etc/rc.local as root (e.g. using gksudo gedit /etc/rc.local) and add the line python /etc/hda-mods.py right before the exit 0 line, then save it and reboot. Your changes should survive.

Related Question