检测到18.04、16.04耳机,但启动后未自动开启


26

编辑:问题似乎也影响18.04。

从15.10开始,我就遇到了这个问题,但是升级到16.04之后,它开始使我的工作变得更加困难。

假设我已插入耳机。我重新引导\重新登录\引导到 ubuntu,然后播放音乐。它来自内置扬声器而不是耳机

我可以看到在音频设置菜单中检测到耳机,但是只有在更换设备或重新插入耳机后,它们才能工作。

在15.10上更容易忽略它,因为在启动之后,所有内容都被静音了。耳机和扬声器(如果在启动之前存在耳机)。

我会在问题中添加日志,但是我真的不知道是什么日志或如何获取日志(我愿意征求意见)。该问题发生在Dell 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"

1
这似乎是错误的(从PulseAudio搞砸的意义上来说)-即使是第一次尝试,也应该选择插入的耳机。rm -rf ~/.pulse ~/.config/pulse先做一个。这使PA使用默认设置。问题仍然存在吗?
emk2203 '16

是的,它确实。一切都照原样,仍然可以检测到耳机。我确保两次rm均有效-以上目录均不存在。之后我重新启动。
Błażej米哈利克

你可以发贴pacmd list-cards吗?
emk2203 '16

@ emk2203完成。一些关键字是波兰语,因此:“wyjście” ==“输出”,“wejście” ==“输入”,“wewnętrznymikrofon” ==“内部麦克风”。
Błażej米哈利克

您正在使用哪个音乐播放器?
userDepth

Answers:


7

我对此的看法是以下利用PulseAudio的优势。假设登录Ubuntu时始终连接了耳机,则以下内容将确保当启动Ubuntu时它将自动将其设置为默认的输入和输出(假设同时使用两者)。

在Ubuntu上,转到终端并输入以下内容,从中仅收集索引号:

对于您的输出设备

pacmd list-sinks -将有很多信息,但要查找索引号和将成为新的默认输出设备的相应设备。

对于您的输入设备

pacmd list-sink-inputspacmd list-samples-将有很多信息,但要查找索引号和将成为您新的默认输入设备的相应设备。如果list-sink-input中没有显示,请使用list-samples。

到目前为止,在Ubuntu上,连接耳机后,您应该有2个索引号。一种用于您的输入和输出。现在,我们将编辑您的pulseaudio默认配置:

sudo nano /etc/pulse/default.pa

转到最后一行,只需添加以下内容:

set-default-sink 1 - 在查看索引后对应于输出源pacmd list-sinks。1是索引,因此将其更改为您得到的索引。

set-default-source 5- 在查看或的索引后,它对应于输入源。数字5是索引,因此将其更改为您得到的数字。pacmd list-sink-inputspacmd list-samples

保存文件,然后重新启动计算机以进行测试。测试涉及检查您是否获得了正确的索引值,因为某些设备具有相似的名称(例如NVIDIA或INTEL音频源)。

如果一切设置正确,则每次启动计算机时,您都应该看到Ubuntu将默认的Input / Output设置为耳机。因为您在谈论耳机,所以要降低噪音,您可以使用我的其他答案来帮助您:使用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选项,我建议使用pavucontrolPulseAudio音量控制。它提供了将设备设置为输入和输出设备的默认/备用的选项。使用这两种技术可能会给您您想要的。


我认为这不会起作用,但是您可能会有所收获。事实是,在我的机器上,我有两个声音设备:英特尔HDMI和Realtek模拟设备。索引是:0-HDMI,1-模拟。Realtek设备有两个端口-扬声器和耳机(优先级分别为10k和9k-这些数字是否与切换优先级有关?)。据我所知,这些端口实际上无法default.pa按照您介绍的方式在文件中建立索引。
Błażej米哈利克

@BłażejMichalik大家好,实际上这是在我妻子的计算机和我的计算机上经过测试的,然后再在此处发布。对于索引混乱,您可以使用注释末尾提到的全名。
路易斯·阿尔瓦拉多

2
好的,可以,但是即使没有耳机,它也会默认关闭扬声器。这是我在15.10中遇到的行为。这不是修复本身。
Błażej米哈利克

是的,就像我提到的那样,您需要连接耳机,因为Ubuntu不会假设如果您连接耳机,则默认情况下应该使用它们。对于关闭扬声器,我不知道,因为这只是设置默认扬声器,而不禁用其他扬声器。如果您使用带有一个插孔连接器(同时输入/输出)的笔记本电脑,通常会发生这种情况。请问您的笔记本电脑是否有2个连接(一个用于麦克风,另一个用于输出)或是否具有一个。如果您的答案是一个,那么现在您已经知道为什么出现问题了。
路易斯·阿尔瓦拉多

是的,确实如此,不知道那很重要。
Błażej米哈利克

3

如果您的声音设备是0-HDMI和1-Analog,则可以使用

$ pacmd set-sink-port 1 analog-output-headphones

要使其永久,请编辑/etc/pulse/default.pa并在其底部的下面### Make some devices default

set-default-sink 1
set-sink-port 1 analog-output-headphones

现在一切都应该可以正常工作了。当您厌倦了使用耳机时,请确保再次将其注释掉。


1
无论如何,这只会使ubuntu在启动时切换到耳机。即使拔下了耳机,现在开始时扬声器也没有声音。这是我在15.10中遇到的行为。
Błażej米哈利克

恐怕你不会比这更好。链接:bbs.archlinux.org/viewtopic.php? id = 175951 bbs.archlinux.org/viewtopic.php?pid=1250505#p1250505 bbs.archlinux.org/viewtopic.php?id=212010是最新技术。我真的希望有人能提出更好的解决方案……
emk2203 '16

嗯...我可以做一个bash解决方法。我可以自己煮一个-没问题。但这只是把事情搞砸了。每隔6个月,我必须遍历Ubuntu变更日志和我的个人博文列表,以查看由于我或其他人的疏忽,或者仅仅是由于对某些API或前端的升级而导致事情中断的地方。这就是为什么我不再执行这些操作的原因-它变得一团糟,并且在遇到不可避免的更新中断后,我不值得浪费时间。
Błażej米哈利克

1
如果您可以执行bash解决方法,即1)仅在插入耳机时才选择耳机,否则扬声器是默认设置,并且2)当您插入耳机时会自动切换到耳机并使扬声器静音,我对此会非常感兴趣。
emk2203 '16

这在Debian Stretch上对我有用,尽管我必须使用0而不是1,这是pacmd list-sinks返回的索引。
罗德里戈

0

以下内容将帮助您解决问题,直到找到解决问题的方法。

以下是几个脚本,它们无法满足您的需求,但可能包含您所需的所有内容。

第二个包含一堆可以工作的pulseaudio东西,但是我不太了解。我事先表示歉意。;)

这是我用来在启动后重新打开扬声器的脚本。可以轻松进行修改以根据需要设置音频输出。

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

此功能会根据是否连接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: /ubuntu/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

事实是,仅在lightgm(登录管理器)之后运行的脚本是不够的。登录之前,会播放声音效果。这些声音可以在init之后运行吗?
Błażej米哈利克

如果这些“初始”声音对您来说很重要,那么,不,这些声音可能会失效。在启动时,您的PATH中几乎没有可用的东西-只是使事情进展所需的东西。其余的(就像这些脚本使用的东西一样)稍后在用户登录时添加到PATH。我不知道何时启动pulseaudio。如果您需要引导而不唤醒他人等,我不知道该如何解决。

另一个随机的解决方法是去寻找播放的声音文件(可能是something.ogg),然后将其替换为静音文件。仍然不能解决问题,但也许有帮助。还取决于是否还有其他想要稍后使用的声音文件。如果是这样,您可以保存原件并在启动后放回原处。但是,随后您必须开始与systemd混淆,以使每次操作正确。

@DavidFoerster-在技术上您是正确的(我的回答都以“这不是答案”开头),给某人一个开始看的地方,或者可能对解决方案有所帮助的工具,比静默恕我直言更好。当我发布时,没有其他答案。我的内容不适合注释或注释字符串,并且代码必须已链接或不可读。如果SE评论支持完整格式,我将把帖子合二为一。

@DavidFoerster:在您链接到的帮助页面上,这似乎是对该问题的部分答案。这可能不是一个很好的答案,但是即使尝试提供部分解决方案,也确实会根据该术语的SE定义使其成为有效的“答案”。
Ilmari Karonen

0

好吧,我想我可以尝试一些。
如果您搜索多媒体系统,请在破折号上选择。打开它并转到Audio选项卡,您可以在其中选择默认的音频输入和输出设备。

默认情况下应安装此程序。如果不是,则可以始终运行 sudo apt-get install gnome-media。如果未在Dash中显示,请运行:

gksudo gedit /usr/share/applications/gstreamer-properties.desktop。在生成的文本文件中,转到以NoDisplay=.NoDisplay=trueNoDisplay=false 希望更改为希望” 开头的行!


几天前,我不得不切换到Ubuntu Gnome,在这一方面,gnome-media数据包没有候选者。
Błażej米哈利克

好的。那我看看能为您做些什么。祝好运!
詹姆斯,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.