+++ title = "FreeBSD: Switching Between Speakers and Headphones" author = ["MichaƂ Sapka"] date = 2023-03-16T23:02:00+01:00 categories = ["bsd"] draft = false weight = 3004 primary_menu = "bsd" image_dir = "bsd" image_max_width = 600 abstract = "How to change the audio sevices?" [menu] [menu.bsd-thinkpad] weight = 3004 identifier = "freebsd-switching-between-speakers-and-headphones" name = "Switching beteen headphnes and speakers" +++ I want my laptop to switch to wired headphones when I attach them. FreeBSD has its own [Sound System](https://wiki.freebsd.org/Sound), so it's a great learning experience. I have yet to automate it (it is possible, but an attempt to do so forced me to do a complete rollback of the system state), but for now, this is working. First, check which audio outputs your device supports: ```shell $ cat /dev/sndstat ``` In the case of my ThinkPad, this returns ```shell Installed devices: pcm0: (play) pcm1: (play) pcm2: (play) pcm3: (play/rec) default pcm4: (play) No devices installed from userspace. ``` The ones I care about are: pcm3 - the speakers pcm4 - the headphone jack I can now easily switch between them: ```shell # enable speakers $ sysctl hw.snd.default_unit=3 # enable headphones $ sysctl hw.snd.default_unit=4 ``` (replace the value with the correct id from \`sndstat\` file.) This, however, comes with a huge caveat. Some apps (khem khem, Firefox) not native to FreeBSD come configured with PulseAudio instead of FreeBSD's Sound System. This creates a level of indirection, and changing system output may not work instantly. In the case of Firefox, I need to reload the tab. Some apps, as I've heard, require a restart.