18.04, 16.04 Fones de ouvido detectados, mas não ligados automaticamente após a inicialização

26

Editar: o problema também parece afetar o 18.04.

Eu tenho esse problema desde 15.10, mas ele realmente começou a triturar minhas engrenagens depois de fazer um upgrade para o 16.04.

Digamos que tenho fones de ouvido conectados. Reinicializo \ relog on \ boot no ubuntu e toco a música. Ele sai dos alto-falantes embutidos em vez dos fones de ouvido .

Percebo que os fones de ouvido são detectados dentro do menu de configurações de áudio , mas somente depois de trocar o dispositivo ou reconectá-los, eles funcionam.

Isso foi mais fácil de ignorar em 15.10, porque naquela época, depois de uma inicialização, tudo era silenciado. Fones de ouvido e alto-falantes, se houver fones de ouvido antes da referida inicialização.

Eu adicionaria logs à pergunta, mas realmente não sei qual ou como obtê-los (estou aberto a sugestões). O problema ocorre em um laptop Dell Inspiron 3537 , que possui uma placa de som Realtek.

Possui um conector de saída lateral, que atua tanto como entrada quanto como saída.


Saída de 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"
Błażej Michalik
fonte
1
Isso parece errado (no sentido de estragar o PulseAudio) - os fones de ouvido conectados devem ser escolhidos mesmo na primeira tentativa. Faça um rm -rf ~/.pulse ~/.config/pulseantes de tudo. Isso faz com que o PA use as configurações padrão. O problema persiste?
Emk2203 15/05
Sim. Tudo está como estava, fones de ouvido ainda detectados. Eu verifiquei o dobro do funcionamento da rm - nenhum dos diretórios acima estava presente. Fiz uma reinicialização depois.
Błażej Michalik 15/05
Você poderia postar pacmd list-cards?
Emk2203
@ emk2203 Concluído. Algumas palavras-chave estão em polonês, portanto: "wyjście" == "output", "wejście" == "input", "wewnętrzny mikrofon" == "microfone interno".
Błażej Michalik
Qual music player você está usando?
userDepth

Respostas:

7

Minha opinião sobre isso seria a seguinte, aproveitando o PulseAudio. Assumindo que quando você faz login no Ubuntu, você sempre tem seus fones de ouvido conectados, o seguinte garante que, quando você inicializar no Ubuntu, o definirá automaticamente como a Entrada e Saída padrão (Supondo que você queira ambos).

No Ubuntu, vá para o terminal e digite o seguinte, do qual você apenas coletará o número do índice:

Para seus DISPOSITIVOS DE SAÍDA :

pacmd list-sinks - Haverá muitas informações, mas procure os números de índice e o dispositivo correspondente que será seu novo dispositivo de saída padrão.

Para seus DISPOSITIVOS DE ENTRADA :

pacmd list-sink-inputsOU pacmd list-samples- Haverá muitas informações, mas procure os números de índice e o dispositivo correspondente que será seu novo dispositivo de entrada padrão. Use as amostras de lista, caso as entradas de coletor de lista não sejam exibidas.

Até o momento, no Ubuntu, com os fones de ouvido conectados, você deve ter 2 números de índice. Um para sua entrada e saída. Agora iremos editar sua configuração padrão do pulseaudio:

sudo nano /etc/pulse/default.pa

Vá para a última linha e basta adicionar o seguinte:

set-default-sink 1 - Isso corresponde à fonte de saída depois de analisar o índice de pacmd list-sinks. O 1 é o índice, então mude para o que você obteve.

set-default-source 5- Isso corresponde às fontes de entrada depois de examinar o índice de pacmd list-sink-inputsou pacmd list-samples. O número 5 é o índice, então mude para o que você obteve.

Salve o arquivo e reinicie o computador para testar. O teste envolve a verificação se você obteve o valor de índice correto, pois alguns dispositivos têm nomes semelhantes (como fontes de áudio NVIDIA OU INTEL).

Se tudo estiver configurado corretamente, toda vez que você inicializar o computador, o Ubuntu definirá a Entrada / Saída padrão para o seu fone de ouvido. Como você está falando sobre fones de ouvido, para reduzir o ruído, use minha outra resposta para ajudá-lo: Remoção de ruído em tempo real com o PulseAudio?

NOTA: Você também pode usar pacmd list-sourcespara ver todos os dispositivos e, em vez de usar o número de índice, pode usar o nome do dispositivo atribuído, parecido com este:

alsa_input.usb-Logitech_Logitech_USB_Headset-00.analog-mono.echo-cancelpara ter uma idéia de quais nomes procurar (por muito tempo eu sei). Os nomes são mais precisos de usar, mas mais difíceis de lembrar, portanto você tem uma opção aqui para usar um ou outro. O resultado final usando um nome seria assim:

set-default-source alsa_input.usb-Logitech_Logitech_USB_Headset-00.analog-mono.echo-cancel no arquivo default.pa, apenas para lhe dar uma idéia.

Para uma opção de GUI, recomendo o pavucontrolPulseAudio Volume Control. Ele oferece uma opção para definir um dispositivo como padrão / fallback para dispositivos de entrada e saída. Usar as duas técnicas pode dar o que você deseja.

Luis Alvarado
fonte
Eu não acho que vai funcionar, mas você pode estar interessado em alguma coisa. O problema é que, na minha máquina, tenho dois dispositivos de som: Intel HDMI e analógico Realtek. Os índices são: 0 - HDMI, 1 - analógico. O dispositivo Realtek possui duas portas - alto-falantes e fones de ouvido (com prioridades de 10k e 9k, respectivamente - esses números têm a ver com a mudança de prioridade?). Tanto quanto posso ver, essas portas não podem realmente ser indexadas em default.paarquivo da maneira que você apresentou.
Błażej Michalik 15/05
Oi @ BłażejMichalik, na verdade, isso foi testado no computador da minha esposa e no meu antes de publicá-lo aqui. Para a confusão do índice, você pode usar o nome completo conforme mencionado no final da nota.
Luis Alvarado
2
Bem, ok, funciona, mas também desliga os alto-falantes por padrão, mesmo que fones de ouvido não estejam presentes. Esse é o comportamento que experimentei na 15.10. Não é uma correção em si.
Błażej Michalik
Sim, como mencionei, você precisa ter os fones de ouvido conectados, pois o Ubuntu não assume que, se você conectar os fones de ouvido, eles deverão ser usados ​​por padrão. Para os alto-falantes desligados, não faço a menor ideia, pois isso apenas define os padrões, não desativa os outros. Isso normalmente acontece se você usar um laptop com um conector (entrada / saída ao mesmo tempo). Gostaria de perguntar se o seu laptop possui 2 conexões (uma para microfone e outra para saída) ou se possui uma. Se a sua resposta for uma, então agora você tem uma idéia do motivo pelo qual os problemas estão aparecendo.
Luis Alvarado
Sim, esse é exatamente o caso, não sabia que isso era importante.
Błażej Michalik
3

Se seus dispositivos de som forem 0 - HDMI e 1 - analógico, você poderá alternar para fones de ouvido com

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

Para torná-lo permanente, edite /etc/pulse/default.pae na parte inferior em### Make some devices default coloque:

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

Tudo deve funcionar agora como desejado. Não deixe de comentar isso novamente quando estiver cansado de usar os fones de ouvido.

emk2203
fonte
1
Isso só faz o ubuntu mudar para fones de ouvido no início, não importa o quê. Agora não há som nos alto-falantes no início, mesmo que os fones de ouvido estejam desconectados. Esse é o comportamento que experimentei na 15.10.
Błażej Michalik
Você não ficará melhor que isso, receio. Links: bbs.archlinux.org/viewtopic.php?id=175951 bbs.archlinux.org/viewtopic.php?pid=1250505#p1250505 bbs.archlinux.org/viewtopic.php?id=212010 como o estado da arte atual . Eu realmente espero que alguém possa chegar a uma solução melhor ...
emk2203
Meh ... eu poderia fazer uma solução alternativa. Eu mesmo posso cozinhar um - não há problema. Mas isso simplesmente atrapalha as coisas. A cada 6 meses, eu preciso percorrer os changelogs do Ubuntu e meu personal bodist, para ver onde as coisas aconteceram devido à minha, ou à negligência de outra pessoa, ou simplesmente devido a uma atualização para alguma API ou interface. É por isso que não faço mais isso - faz uma bagunça e não vale o tempo que provavelmente vou perder, depois de encontrar uma inevitável quebra de atualização de alguma coisa.
Błażej Michalik
1
Se você puder executar uma solução alternativa do bash que 1) selecione fones de ouvido apenas se estiverem conectados, os alto-falantes serão o padrão e 2) alternará automaticamente para fones de ouvido e silenciará os alto-falantes quando você conectar os fones de ouvido. Eu ficaria muito interessado nisso.
Emk2203
Isso funcionou para mim no Debian Stretch, embora eu precise usar 0 em vez de 1, que é o índice retornado por pacmd list-sinks.
Rodrigo
0

O seguinte deve ajudá-lo a solucionar o problema até encontrar uma correção para o seu problema.

A seguir, são apresentados alguns scripts que não fazem o que você deseja, mas provavelmente contêm todas as peças necessárias.

O segundo contém um monte de coisas pulseaudio que funcionam, mas que eu realmente não entendo. Peço desculpas, com antecedência. ;)

Aqui está um script que eu costumava usar para ativar meus alto-falantes após a inicialização. Deve ser fácil modificar para definir sua saída de áudio conforme desejado.

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

Este alterna automaticamente minha saída de som entre HDMI e saída analógica, dependendo de o HDMI estar conectado ou não. Não é o que você deseja, mas detecta para onde está indo a saída de áudio e sabe como alterná-la para outro lugar.

#!/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
Joe
fonte
O fato é que nenhum script executado após o lightgm (gerenciador de login) será suficiente. Há efeitos sonoros sendo reproduzidos antes de você efetuar o login. Eles poderiam ser executados após o init?
Błażej Michalik
Se esses sons "iniciais" são importantes para você, não, provavelmente não funcionariam. No momento da inicialização, há muito pouco disponível / no seu PATH - exatamente o que é necessário para fazer as coisas funcionarem. O restante - como esses scripts usam - é adicionado ao PATH mais tarde - quando o usuário faz login. Não sei quando o pulseaudio é iniciado. Se você precisar inicializar sem acordar alguém, etc., não sei como resolver isso.
Joe
Outra solução aleatória seria procurar os arquivos de som que são reproduzidos (provavelmente algo.ogg) e substituí-los por arquivos silenciosos. Ainda não resolve o problema, mas talvez ajude. Também depende se algo mais quiser usar esses arquivos de som posteriormente. Nesse caso, você pode salvar os originais e devolvê-los após a inicialização. Mas então você tem que começar a mexer com o systemd para acertar as coisas toda vez.
Joe
@DavidFoerster - enquanto você estiver tecnicamente correto (qualquer uma das minhas respostas começa com "isso não é uma resposta"), dar a alguém um lugar para começar a procurar ou ferramentas que possam contribuir para uma solução é muito melhor que silenciar o IMHO. Quando postei, não havia outras respostas. Meu conteúdo não caberia em um comentário ou sequência de comentários e o código teria que estar vinculado ou ilegível. Se os comentários do SE suportassem a formatação completa, eu teria colocado a postagem em uma.
21316 Joe
@ DavidFoerster: Olhando para a página de ajuda que você vinculou, isso parece uma resposta parcial à pergunta. Pode não ser uma resposta muito boa , mas mesmo a tentativa de fornecer uma solução parcial faz com que seja uma "resposta" válida pela definição SE do termo.
Ilmari Karonen
0

Tudo bem, acho que tenho algo que você pode tentar.
Se você procurar por sistemas multimídia, selecione no painel. Abra-o e vá para oAudio guia, onde você pode selecionar os dispositivos de entrada e saída de áudio padrão.

Isso deve ser instalado por padrão. Se não for, você sempre pode executar sudo apt-get install gnome-media . Se não for mostrado no Dash, execute:

gksudo gedit /usr/share/applications/gstreamer-properties.desktop. No arquivo de texto resultante, vá para a linha que começa com NoDisplay=.Alterar NoDisplay=truepara a NoDisplay=false esperança que ajuda!

James
fonte
Eu tive que mudar para o Ubuntu Gnome alguns dias atrás e, deste lado, o pacote gnome-media não tem candidato.
Błażej Michalik
Bem. Vou ver o que posso descobrir para você então. Boa sorte!
James