How do I 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!
Solution 1:
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 saysudo
, but if you don't do it withsudo
, 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 ofAUD_OUT
,AUD_IN
,AUD_MIX
,PIN
andVENDOR
. The only ones you have to look in are thePIN
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 sayJack 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 theJack Location2: Rear
andJack 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.
Solution 2:
Another gui tool might be hdajackretask
from the alsa-tools-gui
package. Very simple gui, supports boot override and advanced options.
I hope I didn't misunderstand the question entirely. OP asked for non-JACK-options but I am pretty sure this might help someone else out. In my case, I had to check Advance override and Show unconnected pins and set an unconnected microphone input to a headphone output.. very weird, but works. Would love to see a cmd line solution though