>>> Вам повезло с железом. Мну задрало перетыкивать на фряхе ухи и колонки,а
>>> с голой Алса норм в Линуксе.D
>> При чём тут альса или ОСС, если это проблема дров?
> Хотя перечитал, нет. Тут проблема в твоём миксере. У меня с xfce4-mixer-oss
> никогда таких проблем не было. Смотрю, ты теперь новый местный эксперт по всему.
Там проблема, скорее всего, в дефолтном конфиге железки.
/boot/device.hints
hint.hdaa.0.nid31.config="as=2 seq=0 device=Speaker"
hint.hdaa.0.nid25.config="as=2 seq=15 device=Headphones"
hint.hdaa.0.nid28.config="as=1 seq=15 device=Line-out conn=Jack"
группирует наушники, встроенные колонки и вывод в докстанции так, чтобы при колонки при подключении к доке переключались на внешние (но только, если не подключены наушники).
man snd_hda для пояснений и примеров.
-
Перетык наушников с сохранением громкости:
/etc/devd/thinkpad.conf
notify 0 {
match "system" "SND_HDA";
match "subsystem" "headphones";
match "type" "connection";
match "state" "connected";
action "/usr/bin/headphones_plugged_in";
};
notify 0 {
match "system" "SND_HDA";
match "subsystem" "headphones";
match "type" "connection";
match "state" "disconnected";
action "/usr/bin/headphones_unplugged";
};% cat /usr/bin/headphones_*
#!/bin/sh
snd_out="/var/db/snd_out"
speaker="/var/db/speaker_vol"
headphones="/var/db/headphones_vol"
/sbin/sysctl -n hw.snd.default_unit > ${snd_out}
/usr/sbin/mixer -s vol > ${speaker}
/sbin/sysctl hw.snd.default_unit=1
/usr/sbin/mixer $(cat ${headphones}) > /dev/null
#!/bin/sh
snd_out="/var/db/snd_out"
speaker="/var/db/speaker_vol"
headphones="/var/db/headphones_vol"
/usr/sbin/mixer -s vol > ${headphones}
/sbin/sysctl hw.snd.default_unit=$(cat ${snd_out})
/usr/sbin/mixer $(cat ${speaker}) > /dev/null
diff --git a/sys/dev/sound/pci/hda/hdaa.c b/sys/dev/sound/pci/hda/hdaa.c
index c57b18bcaa5..7bf81826fd7 100644
--- a/sys/dev/sound/pci/hda/hdaa.c
+++ b/sys/dev/sound/pci/hda/hdaa.c
@@ -386,6 +386,8 @@ hdaa_hpredir_handler(struct hdaa_widget *w)
struct hdaa_audio_ctl *ctl;
uint32_t val;
int j, connected = w->wclass.pin.connected;
+ devctl_notify("SND_HDA", "headphones", "connection",
+ connected ? "state=connected" : "state=disconnected")