18.04, 16.04 检测到耳机,开机后不自动开机

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)

Lui*_*ado 7

我对此的看法是以下利用 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-inputspacmd 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。它提供了将设备设置为输入和输出设备的默认/回退的选项。使用这两种技术可能会给你你想要的。

  • 好吧,它可以工作,但它也会默认关闭扬声器,即使没有耳机。这是我在 15.10 中遇到的行为。这本身不是修复。 (2认同)

Joe*_*Joe 0

以下内容应该可以帮助您解决问题,直到找到问题的解决方案。

以下是几个脚本,它们不执行您想要的操作,但可能包含您需要的所有部分。

第二个包含一堆可以工作的脉冲音频东西,但我不太明白。我提前道歉。;)

这是我用来在启动后重新打开扬声器的脚本。应该很容易修改以根据需要设置音频输出。

#!/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 次

最近记录:

5 年,5 月 前