18.04, 16.04 Wykryto słuchawki, ale nie włączono się automatycznie po uruchomieniu

26

Edycja: problem dotyczy również 18.04.

Mam ten problem od 15.10, ale naprawdę zaczął szlifować mój sprzęt po aktualizacji do 16.04.

Powiedzmy, że mam podłączone słuchawki. Ponownie uruchamiam \ ponownie loguję \ boot do Ubuntu i odtwarzam muzykę. Wychodzi z wbudowanych głośników zamiast słuchawek .

Widzę, że słuchawki są wykrywane w menu ustawień audio , ale działają one dopiero po zmianie urządzenia lub ponownym podłączeniu słuchawek.

Łatwiej było to zignorować 15.10, ponieważ wtedy, po starcie, wszystko zostało wyciszone. Słuchawki i głośniki, jeśli słuchawki były obecne przed wspomnianym uruchomieniem.

Do pytania dodawałbym dzienniki, ale tak naprawdę nie wiem, które lub jak je zdobyć (jestem otwarty na sugestie). Problem występuje w laptopie Dell Inspiron 3537 , ma on kartę dźwiękową Realtek.

Z boku ma jedno gniazdo wyjściowe, które działa zarówno jako wejście, jak i wyjście.


Wyjście z 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
źródło
1
To wydaje się niewłaściwe (w sensie zepsucia PulseAudio) - podłączonych słuchawek należy wybrać już przy pierwszej próbie. Zrób rm -rf ~/.pulse ~/.config/pulsewszystko inne. To sprawia, że ​​PA używa ustawień domyślnych. Czy problem utrzymuje się?
emk2203
Tak. Wszystko jest tak, jak było, słuchawki wciąż są wykrywane. Dwukrotnie upewniłem się, że rm działa - żaden z powyższych katalogów nie był obecny. Potem zrestartowałem komputer.
Błażej Michalik
Mógłbyś pisać pacmd list-cards?
emk2203
@ emk2203 Gotowe. Niektóre słowa kluczowe są w języku polskim, więc: „wyjście” == „wyjście”, „wejście” == „wejście”, „wewnętrzny mikrofon” == „mikrofon wewnętrzny”.
Błażej Michalik
Z jakiego odtwarzacza muzyki korzystasz?
userDepth

Odpowiedzi:

7

Podejrzewam, że skorzystam z PulseAudio. Zakładając, że kiedy logujesz się do Ubuntu, zawsze masz podłączone słuchawki, to poniższe upewnią cię, że kiedy uruchomisz system Ubuntu, automatycznie ustawi go jako domyślny Wejściowy i Wyjściowy (Zakładając, że chcesz mieć jedno i drugie).

Na Ubuntu przejdź do terminala i wpisz następujące dane, z których będziesz zbierać tylko numer indeksu:

W przypadku URZĄDZEŃ WYJŚCIOWYCH :

pacmd list-sinks - Będzie dużo informacji, ale poszukaj numerów indeksów i odpowiedniego urządzenia, które będzie Twoim nowym domyślnym urządzeniem wyjściowym.

Dla URZĄDZEŃ WEJŚCIOWYCH :

pacmd list-sink-inputsLUB pacmd list-samples- Będzie dużo informacji, ale poszukaj numerów indeksów i odpowiedniego urządzenia, które będzie Twoim nowym domyślnym urządzeniem wejściowym. Użyj przykładowych list w przypadku, gdy w wejściach listy-ujścia nie wyświetla się.

Do tego momentu, na Ubuntu, z podłączonymi słuchawkami, powinieneś mieć 2 numery indeksowe. Jeden dla twojego wejścia i wyjścia. Teraz przejdziemy do edycji domyślnej konfiguracji pulseaudio:

sudo nano /etc/pulse/default.pa

Przejdź do ostatniego wiersza i po prostu dodaj:

set-default-sink 1 - Odpowiada to wyjściowemu źródłu po obejrzeniu indeksu pacmd list-sinks. 1 to indeks, więc zmień go na ten, który masz.

set-default-source 5- Odpowiada to wejściowym źródłom po przejrzeniu indeksu pacmd list-sink-inputslub pacmd list-samples. Liczba 5 to indeks, więc zmień go na ten, który masz.

Zapisz plik i uruchom ponownie komputer, aby go przetestować. Testowanie polega na sprawdzeniu, czy masz poprawną wartość indeksu, ponieważ niektóre urządzenia mają podobne nazwy (jak źródła NVIDIA LUB INTEL Audio).

Jeśli wszystko jest poprawnie skonfigurowane, przy każdym uruchomieniu komputera powinieneś zobaczyć, jak Ubuntu ustawia domyślne wejście / wyjście w słuchawkach. Skoro mówisz o słuchawkach, w celu zmniejszenia hałasu możesz użyć mojej innej odpowiedzi, aby Ci w tym pomóc: Usuwanie szumów w czasie rzeczywistym za pomocą PulseAudio?

UWAGA: Możesz także użyć pacmd list-sourcesdo wyświetlenia wszystkich urządzeń, a także zamiast numeru indeksu możesz użyć nazwy przypisanego urządzenia, które wygląda mniej więcej tak:

alsa_input.usb-Logitech_Logitech_USB_Headset-00.analog-mono.echo-cancelaby dać ci wyobrażenie, jakich nazw szukać (Super długo wiem). Nazwy są bardziej dokładne w użyciu, ale trudniejsze do zapamiętania, więc masz tutaj opcję użycia jednego lub drugiego. Wynik końcowy przy użyciu nazwy wyglądałby następująco:

set-default-source alsa_input.usb-Logitech_Logitech_USB_Headset-00.analog-mono.echo-cancel w pliku default.pa, aby dać ci pomysł.

W przypadku opcji GUI polecam pavucontrollub PulseAudio Volume Control. Oferuje opcję ustawienia urządzenia jako domyślnego / zastępczego dla urządzeń wejściowych i wyjściowych. Korzystanie z obu technik może dać ci to, czego chcesz.

Luis Alvarado
źródło
Nie sądzę, żeby to zadziałało, ale możesz być na czymś. Chodzi o to, że na moim komputerze mam dwa urządzenia dźwiękowe: Intel HDMI i analog Realtek. Indeksy to: 0 - HDMI, 1 - analogowy. Urządzenie Realtek ma dwa porty - głośniki i słuchawki (z priorytetami odpowiednio 10k i 9k - czy te liczby mają związek z przełączaniem priorytetu?). O ile widzę, tych portów nie można tak naprawdę zindeksować w default.papliku w sposób, który przedstawiłeś.
Błażej Michalik
Cześć @ BłażejMichalik, faktycznie został przetestowany na komputerze mojej żony i mojej przed opublikowaniem go tutaj. W przypadku pomyłki w indeksie można użyć pełnej nazwy wymienionej na końcu z UWAGĄ.
Luis Alvarado,
2
No dobrze, działa, ale domyślnie wyłącza głośniki, nawet jeśli nie ma słuchawek. Takiego zachowania doświadczyłem z 15.10. Nie jest to poprawa sama w sobie.
Błażej Michalik
Tak, jak wspomniałem, musisz mieć podłączone słuchawki, ponieważ Ubuntu nie będzie zakładać, że jeśli podłączysz słuchawki, powinny z nich korzystać domyślnie. Jeśli chodzi o wyłączanie się głośników, nie mam pojęcia, ponieważ to ustawienie tylko tych domyślnych, a nie wyłączanie innych. Zwykle dzieje się tak, jeśli używasz laptopa z jednym złączem jack (wejście / wyjście w tym samym czasie). Chciałbym zapytać, czy twój laptop ma 2 połączenia (jedno dla mikrofonu, drugie dla wyjścia), czy też ma jedno. Jeśli masz jedną odpowiedź, to teraz masz pojęcie, dlaczego pojawiają się problemy.
Luis Alvarado
Tak, dokładnie tak jest, nie wiedziałem, że to ważne.
Błażej Michalik
3

Jeśli Twoje urządzenia dźwiękowe są 0 - HDMI i 1 - analogowe, możesz przełączyć na słuchawki za pomocą

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

Aby było trwałe, edytuj /etc/pulse/default.pai na dole w ### Make some devices defaultzakładce:

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

Wszystko powinno teraz działać zgodnie z oczekiwaniami. Pamiętaj, aby to skomentować ponownie, gdy masz dość korzystania ze słuchawek.

emk2203
źródło
1
To sprawia, że ​​Ubuntu przełącza się na słuchawki na starcie, bez względu na wszystko. Na początku nie ma dźwięku z głośników, nawet jeśli słuchawki są odłączone. Takiego zachowania doświadczyłem z 15.10.
Błażej Michalik
Obawiam się, że nie będziesz lepszy. Linki: bbs.archlinux.org/viewtopic.php?id=175951 bbs.archlinux.org/viewtopic.php?pid=1250505#p1250505 bbs.archlinux.org/viewtopic.php?id=212010 jako aktualny stan wiedzy . Naprawdę mam nadzieję, że ktoś
wymyśli
Meh ... Mógłbym zrobić obejście bash. Mogę sam go ugotować - nie ma problemu. Ale to po prostu coś psuje. Co 6 miesięcy muszę przeglądać dzienniki zmian Ubuntu i moją osobistą listę zadań, aby zobaczyć, gdzie coś się zepsuło z powodu mojego zaniedbania lub zaniedbania kogoś innego, lub po prostu z powodu aktualizacji interfejsu API lub interfejsu użytkownika. Dlatego już tego nie robię - robi bałagan i nie warto tracić czasu, który prawdopodobnie stracę po napotkaniu nieuniknionej przerwy na aktualizację.
Błażej Michalik
1
Jeśli możesz zrobić obejście bash, które 1) wybiera słuchawki tylko wtedy, gdy są podłączone, w przeciwnym razie głośniki są domyślne, a 2) przełącza się automatycznie na słuchawki i wycisza głośniki po podłączeniu słuchawek, byłbym bardzo zainteresowany.
emk2203
Działa to dla mnie na Debian Stretch, chociaż muszę użyć 0 zamiast 1, co jest indeksem zwracanym przez pakiety list pacmd.
Rodrigo
0

Poniższe informacje powinny pomóc w obejściu problemu do momentu znalezienia rozwiązania problemu.

Oto kilka skryptów, które nie robią tego, co chcesz, ale prawdopodobnie zawierają wszystkie elementy do tego, czego potrzebujesz.

Drugi zawiera kilka rzeczy z pulseaudio, które działają, ale których tak naprawdę nie rozumiem. Z góry przepraszam. ;)

Oto skrypt, którego użyłem, aby ponownie włączyć głośniki po uruchomieniu. Powinien być łatwy do modyfikacji, aby ustawić wyjście audio zgodnie z potrzebami.

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

Ten automatycznie przełącza mój dźwięk z HDMI na analogowy w zależności od tego, czy HDMI jest podłączony, czy nie. Nie to, czego chcesz, ale wykrywa, dokąd zmierza wyjście audio i wie, jak je przełączyć w inne miejsce.

#!/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
źródło
Chodzi o to, że żaden skrypt uruchamiający się po lightgm (menedżerze logowania) nie będzie wystarczający. Przed zalogowaniem odtwarzane są efekty dźwiękowe. Czy byłyby one w stanie uruchomić po inicjacji?
Błażej Michalik
Jeśli te „początkowe” dźwięki są dla Ciebie ważne, to nie, prawdopodobnie nie będą działać. W czasie rozruchu jest bardzo mało dostępnych / w twojej ŚCIEŻCE - tylko to, co jest potrzebne, aby wszystko działało. Reszta - podobnie jak te, których używają skrypty, są dodawane do ŚCIEŻKI później - kiedy użytkownik się zaloguje. Nie wiem, kiedy pulseaudio jest nawet uruchomione. Jeśli chcesz uruchomić komputer bez budzenia kogoś itp., Nie wiem, jak to rozwiązać.
Joe
Innym przypadkowym obejściem byłoby poszukiwanie plików dźwiękowych, które są odtwarzane (prawdopodobnie coś.ogg) i zastępowanie ich plikami cichymi. Nadal nie rozwiązuje problemu, ale może to pomaga. Zależy również od tego, czy cokolwiek innego chce później użyć tych plików dźwiękowych. Jeśli tak, możesz zapisać oryginały i włożyć je z powrotem po uruchomieniu. Ale potem musisz zacząć działać z systemd, aby za każdym razem wszystko działało poprawnie.
Joe
@DavidFoerster - gdy jesteś technicznie poprawny (każda moja odpowiedź zaczyna się od „to nie jest odpowiedź”), dawanie komuś miejsca do rozpoczęcia poszukiwań lub narzędzia, które mogą przyczynić się do rozwiązania, jest o wiele lepsze niż cisza IMHO. Kiedy pisałem, nie było innych odpowiedzi. Moja treść nie zmieściłaby się w komentarzu lub ciągu komentarzy, a kod musiałby być połączony lub nieczytelny. Gdyby komentarze SE wspierały pełne formatowanie, umieściłbym post w jednym.
Joe
@DavidFoerster: Patrząc na stronę pomocy, do której linkujesz, wydaje się to częściową odpowiedzią na pytanie. Może nie być to bardzo dobra odpowiedź, ale nawet próba dostarczenia częściowego rozwiązania sprawia, że ​​jest to poprawna „odpowiedź” według definicji terminu SE.
Ilmari Karonen
0

Dobra, myślę, że mam coś, czego możesz spróbować.
Jeśli szukasz systemów multimedialnych, wybierz w desce rozdzielczej. Otwórz i przejdź do Audiozakładki, w której możesz wybrać domyślne urządzenia wejściowe i wyjściowe audio.

To powinno być zainstalowane domyślnie. Jeśli tak nie jest, zawsze możesz uruchomić sudo apt-get install gnome-media. Jeśli nie jest pokazany w Dash, uruchom:

gksudo gedit /usr/share/applications/gstreamer-properties.desktop. W wynikowym pliku tekstowym, przejdź do startów z linii NoDisplay=.zmienić NoDisplay=truena NoDisplay=false nadzieję, że pomoże!

James
źródło
Kilka dni temu musiałem przejść na Ubuntu Gnome i po tej stronie pakiet gnome-media nie ma kandydata.
Błażej Michalik,
W porządku. Zobaczę, co mogę dla ciebie wykopać. Powodzenia!
James