blob: 82e842b712ce8e181785053c8ec9dc70cc49feec (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
---
title: "Switching Between Speakers and Headphones on FreeBSD"
category: bsd
abstract: How to change the audio device?
date: 2023-03-16T22:52:01+01:00
year: 2023
draft: false
tags:
- FreeBSD
- headphones
- speakers
- ThinkPad
- audio
- tutorial
---
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:
```
$ cat /dev/sndstat
```
In the case of my ThinkPad, this returns
```
Installed devices:
pcm0: <NVIDIA (0x0094) (HDMI/DP 8ch)> (play)
pcm1: <NVIDIA (0x0094) (HDMI/DP 8ch)> (play)
pcm2: <NVIDIA (0x0094) (HDMI/DP 8ch)> (play)
pcm3: <Conexant (0x1f86) (Analog)> (play/rec) default
pcm4: <Conexant (0x1f86) (Left Analog Headphones)> (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:
```
# 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.
|