Bła*_*lik 27 sound headphones pulseaudio 16.04 18.04
编辑:这个问题似乎也影响到 18.04。
我从 15.10 开始就有这个问题,但是在升级到 16.04 后它开始真正磨我的齿轮。
假设我插入了耳机。我重新启动\重新登录\启动到ubuntu,然后播放音乐。它来自内置扬声器而不是耳机。
我可以看到在音频设置菜单中检测到耳机,但只有在我更换设备或重新插入耳机后,它们才能工作。
这在 15.10 上更容易被忽略,因为当时启动后,一切都被静音了。耳机和扬声器,如果在上述启动之前有耳机。
我会在问题中添加日志,但我真的不知道哪个或如何获取它们(我愿意接受建议)。问题发生在戴尔 Inspiron 3537 笔记本电脑上,它内置了 Realtek 声卡。
它的侧面有一个输出插孔,既可以作为输入也可以作为输出。
输出 pacmd listcards
2 card(s) available.
index: 0
name: <alsa_card.pci-0000_00_03.0>
driver: <module-alsa-card.c>
owner module: 6
properties:
alsa.card = "0"
alsa.card_name = "HDA Intel HDMI"
alsa.long_card_name = "HDA Intel HDMI at 0xc0810000 irq 49"
alsa.driver_name = "snd_hda_intel"
device.bus_path = "pci-0000:00:03.0"
sysfs.path = "/devices/pci0000:00/0000:00:03.0/sound/card0"
device.bus = "pci"
device.vendor.id = "8086"
device.vendor.name = "Intel Corporation"
device.product.id = "0a0c"
device.product.name = "Haswell-ULT HD Audio Controller"
device.form_factor = "internal"
device.string = "0"
device.description = "Wbudowany d?wi?k"
module-udev-detect.discovered = "1"
device.icon_name = "audio-card-pci"
profiles:
output:hdmi-stereo: Wyj?cie Digital Stereo (HDMI) (priority 5400, available: unknown)
output:hdmi-surround: Wyj?cie Digital Surround 5.1 (HDMI) (priority 300, available: unknown)
output:hdmi-surround71: Wyj?cie Digital Surround 7.1 (HDMI) (priority 300, available: unknown)
output:hdmi-stereo-extra1: Wyj?cie Digital Stereo (HDMI 2) (priority 5200, available: unknown)
output:hdmi-surround-extra1: Wyj?cie Digital Surround 5.1 (HDMI 2) (priority 100, available: unknown)
output:hdmi-surround71-extra1: Wyj?cie Digital Surround 7.1 (HDMI 2) (priority 100, available: unknown)
output:hdmi-stereo-extra2: Wyj?cie Digital Stereo (HDMI 3) (priority 5200, available: unknown)
output:hdmi-surround-extra2: Wyj?cie Digital Surround 5.1 (HDMI 3) (priority 100, available: unknown)
output:hdmi-surround71-extra2: Wyj?cie Digital Surround 7.1 (HDMI 3) (priority 100, available: unknown)
off: Wy??czone (priority 0, available: unknown)
active profile: <output:hdmi-stereo>
sinks:
alsa_output.pci-0000_00_03.0.hdmi-stereo/#0: Wbudowany d?wi?k Digital Stereo (HDMI)
sources:
alsa_output.pci-0000_00_03.0.hdmi-stereo.monitor/#0: Monitor of Wbudowany d?wi?k Digital Stereo (HDMI)
ports:
hdmi-output-0: HDMI / DisplayPort (priority 5900, latency offset 0 usec, available: no)
properties:
device.icon_name = "video-display"
hdmi-output-1: HDMI / DisplayPort 2 (priority 5800, latency offset 0 usec, available: no)
properties:
device.icon_name = "video-display"
hdmi-output-2: HDMI / DisplayPort 3 (priority 5700, latency offset 0 usec, available: no)
properties:
device.icon_name = "video-display"
index: 1
name: <alsa_card.pci-0000_00_1b.0>
driver: <module-alsa-card.c>
owner module: 7
properties:
alsa.card = "1"
alsa.card_name = "HDA Intel PCH"
alsa.long_card_name = "HDA Intel PCH at 0xc0814000 irq 48"
alsa.driver_name = "snd_hda_intel"
device.bus_path = "pci-0000:00:1b.0"
sysfs.path = "/devices/pci0000:00/0000:00:1b.0/sound/card1"
device.bus = "pci"
device.vendor.id = "8086"
device.vendor.name = "Intel Corporation"
device.product.id = "9c20"
device.product.name = "8 Series HD Audio Controller"
device.form_factor = "internal"
device.string = "1"
device.description = "Wbudowany d?wi?k"
module-udev-detect.discovered = "1"
device.icon_name = "audio-card-pci"
profiles:
input:analog-stereo: Wej?cie Analogowe stereo (priority 60, available: unknown)
output:analog-stereo: Wyj?cie Analogowe stereo (priority 6000, available: unknown)
output:analog-stereo+input:analog-stereo: Analogowy dupleks stereo (priority 6060, available: unknown)
off: Wy??czone (priority 0, available: unknown)
active profile: <output:analog-stereo+input:analog-stereo>
sinks:
alsa_output.pci-0000_00_1b.0.analog-stereo/#1: Wbudowany d?wi?k Analogowe stereo
sources:
alsa_output.pci-0000_00_1b.0.analog-stereo.monitor/#1: Monitor of Wbudowany d?wi?k Analogowe stereo
alsa_input.pci-0000_00_1b.0.analog-stereo/#2: Wbudowany d?wi?k Analogowe stereo
ports:
analog-input-internal-mic: Wewn?trzny mikrofon (priority 8900, latency offset 0 usec, available: unknown)
properties:
device.icon_name = "audio-input-microphone"
analog-input-headphone-mic: Mikrofon (priority 8700, latency offset 0 usec, available: no)
properties:
device.icon_name = "audio-input-microphone"
analog-input-headset-mic: Mikrofon na s?uchawkach (priority 8700, latency offset 0 usec, available: no)
properties:
device.icon_name = "audio-input-microphone"
analog-output-speaker: G?o?niki (priority 10000, latency offset 0 usec, available: unknown)
properties:
device.icon_name = "audio-speakers"
analog-output-headphones: S?uchawki (priority 9000, latency offset 0 usec, available: no)
properties:
device.icon_name = "audio-headphones"
Run Code Online (Sandbox Code Playgroud)
我对此的看法是以下利用 PulseAudio。假设当您登录 Ubuntu 时,您始终连接着耳机,那么以下内容将确保当您启动到 Ubuntu 时,它会自动将其设置为默认输入和输出(假设您都想要)。
在 Ubuntu 上,转到终端并键入以下内容,您将仅从中收集索引号:
对于您的输出设备:
pacmd list-sinks
- 会有很多信息,但要查找索引号和将成为新默认输出设备的相应设备。
对于您的输入设备:
pacmd list-sink-inputs
或者pacmd list-samples
- 会有很多信息,但要查找索引号和将成为新默认输入设备的相应设备。使用 list-samples 以防在 list-sink-inputs 中没有显示。
到目前为止,在 Ubuntu 上,连接耳机后,您应该有 2 个索引号。一个用于您的输入和输出。现在我们将编辑您的pulseaudio默认配置:
sudo nano /etc/pulse/default.pa
Run Code Online (Sandbox Code Playgroud)
转到最后一行,只需添加以下内容:
set-default-sink 1
-在查看 的索引后,这对应于输出源pacmd list-sinks
。1 是索引,所以把它改成你得到的那个。
set-default-source 5
-在查看或的索引后,这对应于输入源。数字 5 是索引,因此将其更改为您得到的那个。pacmd list-sink-inputs
pacmd list-samples
保存文件并重新启动计算机以进行测试。测试涉及检查您是否获得了正确的索引值,因为某些设备具有相似的名称(例如 NVIDIA 或 INTEL 音频源)。
如果一切设置正确,每次启动计算机时,您都应该看到 Ubuntu 将默认输入/输出设置为您的耳机。由于您在谈论耳机,因此对于降噪,您可以使用我的其他答案来帮助您:使用 PulseAudio 实时降噪?
注意:您还可以使用pacmd list-sources
查看所有设备,也可以使用指定设备的名称代替索引号,如下所示:
alsa_input.usb-Logitech_Logitech_USB_Headset-00.analog-mono.echo-cancel
让您了解要查找的名称(我知道超长)。名称使用起来更准确,但更难记住,因此您可以在此处选择使用其中一个。使用名称的最终结果将是这样的:
set-default-source alsa_input.usb-Logitech_Logitech_USB_Headset-00.analog-mono.echo-cancel
在 default.pa 文件中,只是为了给您一个想法。
对于 GUI 选项,我推荐pavucontrol
或 PulseAudio Volume Control。它提供了将设备设置为输入和输出设备的默认/回退的选项。使用这两种技术可能会给你你想要的。
以下内容应该可以帮助您解决问题,直到找到问题的解决方案。
以下是几个脚本,它们不执行您想要的操作,但可能包含您需要的所有部分。
第二个包含一堆可以工作的脉冲音频东西,但我不太明白。我提前道歉。;)
这是我用来在启动后重新打开扬声器的脚本。应该很容易修改以根据需要设置音频输出。
#!/bin/bash
## temporary kludge to turn the speakers back on at login
SOUND=1
if [ "${1}" == "-q" ]
then
shift
SOUND=0
fi
amixer set Speaker unmute > /dev/null
amixer set Speaker 100 > /dev/null
(( SOUND )) && mplayer -quiet /usr/lib/libreoffice/basis3.4/share/gallery/sounds/kongas.wav > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
它会根据 HDMI 是否连接来自动在 HDMI 和模拟输出之间切换我的声音输出。这不是您想要的,但它确实可以检测音频输出的去向并知道如何将其切换到其他地方。
#!/bin/bash
## audio_select
## Copyleft 08/11/2014 - JPmicrosystems
## Last modified 05/14/2015
## Added code to detect ramdass vs halo to handle older pactl version
## Added code to tell if the audio was already selected
## If HDMI is connected, audio output is channelled to HDMI
## Otherwise it's channelled to internal audio
## From: https://askubuntu.com/questions/458194/switching-to-hdmi-audio-when-hdmi-is-plugged-into-a-laptop-14-04
## Script needs to be triggered by a udev rule
## Works manually now
## udevadm monitor produces the following output
## Plug in HDMI udev events
##KERNEL[11363.720327] change /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
##UDEV [11363.722979] change /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
## Unplug HDMI udev events
##KERNEL[11392.043367] change /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
##UDEV [11392.046155] change /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
## Make a script name in SCRIPT_NAME
function script_name {
## See if the calling script has a name string defined
if [ -n "${NAME}" ]
then
SCRIPT_NAME="${NAME}"
else
SCRIPT_NAME="$(basename $0)"
fi
}
## Get active audio port type
function get_active_audio_port {
## first very rough cut
local ACTIVE_AUDIO_PORT_NAME
RC=0 ## Success
ACTIVE_AUDIO_PORT_NAME="$(pactl list | grep 'Active Port:' | awk '{print $3}')"
case "${ACTIVE_AUDIO_PORT_NAME}" in
"analog-output-speaker")
ACTIVE_AUDIO_PORT="Speakers"
;;
"analog-output-headphones")
ACTIVE_AUDIO_PORT="Headphones"
;;
"hdmi-output-0")
ACTIVE_AUDIO_PORT="HDMI"
;;
*)
ACTIVE_AUDIO_PORT="Unknown"
RC=1 ## Failure
;;
esac
return $RC
}
##source "$HOME/bin/bash_trace" ## debug
script_name
HOST="$(hostname)"
HDMI_STATUS=$(cat /sys/class/drm/card0/*HDMI*/status)
INPUTS=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
DSPTIME=10 # yad message persistence time
YOPT="--center --on-top --title ${SCRIPT_NAME}" # yad common options
get_active_audio_port ## Find out where audio is going now
if ((RC))
then
yad ${YOPT} --info --button=gtk-ok:0 --text="Failed to detect current audio source" --width 250 --timeout=${DSPTIME}
exit 1
fi
if [ $HDMI_STATUS = "connected" ]
then
if [ "${ACTIVE_AUDIO_PORT}" == "HDMI" ]
then
yad ${YOPT} --info --button=gtk-ok:0 --text="Audio already set to HDMI" --width 250 --timeout=${DSPTIME}
exit 1
fi
pactl set-card-profile 0 output:hdmi-stereo
if [ "$HOST" == "ramdass" ] ## Using newer version of pactl
then
pactl set-default-sink alsa_output.pci-0000_00_1b.0.hdmi-stereo
else
pactl set-sink-port alsa_output.pci-0000_00_1b.0.hdmi-stereo hdmi-output-0
fi
for i in ${INPUTS[*]}
do
pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.hdmi-stereo &> /dev/null
done
yad ${YOPT} --info --button=gtk-ok:0 --text="Audio directed to HDMI" --width 250 --timeout=${DSPTIME}
else
if [ "${ACTIVE_AUDIO_PORT}" == "Speakers" ] || [ "${ACTIVE_AUDIO_PORT}" == "Headphones" ]
then
yad ${YOPT} --info --button=gtk-ok:0 --text="Audio already set to Analog Output" --width 250 --timeout=${DSPTIME}
exit 1
fi
pactl set-card-profile 0 output:analog-stereo
if [ "$HOST" == "ramdass" ] ## Using newer version of pactl
then
pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
else
pactl set-sink-port alsa_output.pci-0000_00_1b.0.analog-stereo analog-output-speaker
fi
for i in ${INPUTS[*]}
do
pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.analog-stereo &> /dev/null
done
yad ${YOPT} --info --button=gtk-ok:0 --text="Audio directed to Analog Output" --width 250 --timeout=${DSPTIME}
fi
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19447 次 |
最近记录: |