編集:この問題は18.04にも影響するようです
15.10以降この問題がありますが、16.04へのアップグレードを行った後、本当に歯車を磨き始めました。
ヘッドフォンが接続されているとしましょう。I reboot\relog on\boot to ubuntuで、音楽を再生します。 ヘッドフォンの代わりにスピーカーに内蔵されているから出てきます。
ヘッドフォンはオーディオ設定内で検出されますメニューが表示されますが、デバイスを変更するかヘッドフォンを再接続した後にのみ機能します。
これは、15.10では無視するのが簡単でした。なぜなら、当時は起動後にすべてがミュートされていたからです。スタートアップの前にヘッドフォンがあった場合は、ヘッドフォンとスピーカー。
質問にログを追加しますが、どのログを取得するのか、どのように取得するのかはわかりません(提案を受け付けています)。この問題はDell Inspiron 3537ラップトップで発生し、内部にRealtekサウンドカードがあります。
入力と出力の両方として機能する側面に1つの出力ジャックがあります。
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"
これに関する私の考えは、PulseAudioを利用した次のようなものです。 Ubuntuにログインするときにヘッドフォンを常に接続していると仮定すると、次のようにすると、Ubuntuを起動したときに自動的にヘッドフォンがデフォルトの入力および出力に設定されます(両方が必要であると仮定)。
Ubuntuでターミナルに移動し、インデックス番号のみを収集する次のものを入力します。
OUTPUT DEVICESの場合:
pacmd list-sinks
-多くの情報がありますが、インデックス番号と、新しいデフォルトの出力デバイスとなる対応するデバイスを探してください。
INPUT DEVICES:
pacmd list-sink-inputs
OR pacmd list-samples
-多くの情報がありますが、インデックス番号と、新しいデフォルトの入力デバイスとなる対応するデバイスを探します。表示されないlist-sink-inputsの場合は、list-samplesを使用します。
これまでのところ、Ubuntuでは、ヘッドフォンを接続した状態で、2つのインデックス番号が必要です。入出力用に1つ。次に、pulseaudioのデフォルト構成を編集します。
Sudo nano /etc/Pulse/default.pa
最後の行に移動して、次を追加します。
set-default-sink 1
-これは、pacmd list-sinks
のインデックスを見た後のOutput Sourceに対応します。 1はインデックスなので、取得したものに変更します。
set-default-source 5
-これは、pacmd list-sink-inputs
またはpacmd list-samples
のインデックスを見た後のInput Sourcesに対応します。番号5はインデックスなので、取得したものに変更します。
ファイルを保存し、コンピューターを再起動してテストします。一部のデバイスには類似した名前があるため(NVIDIA OR INTELオーディオソースのように)、テストには正しいインデックス値を取得したかどうかの確認が含まれます。
すべてが正しくセットアップされていれば、コンピューターを起動するたびに、Ubuntuがデフォルトの入力/出力をヘッドフォンに設定していることがわかります。あなたがヘッドフォンについて話しているので、ノイズリダクションのためにあなたはそれであなたを助けるために私の他の答えを使うことができます: PulseAudioでのリアルタイムノイズ除去?
注:pacmd list-sources
を使用してすべてのデバイスを表示することもできます。インデックス番号を使用する代わりに、割り当てられた名前を使用することもできます。次のようなデバイスです。
alsa_input.usb-Logitech_Logitech_USB_Headset-00.analog-mono.echo-cancel
を使用して、どの名前を検索するべきかを知ることができます(私は知っています)。名前はより正確に使用できますが、覚えにくいので、ここでどちらかを使用するオプションがあります。名前を使用した最終結果は次のようになります。
default.paファイル内のset-default-source alsa_input.usb-Logitech_Logitech_USB_Headset-00.analog-mono.echo-cancel
は、アイデアを提供するためのものです。
GUIオプションについては、pavucontrol
またはPulseAudioボリュームコントロールをお勧めします。入力および出力デバイスのデフォルト/フォールバックとしてデバイスを設定するオプションを提供します。両方の手法を使用すると、必要なものが得られる場合があります。
サウンドデバイスが0(HDMI)および1(アナログ)の場合、次の方法でヘッドフォンに切り替えることができます。
$ pacmd set-sink-port 1 analog-output-headphones
永続的にするには、/etc/Pulse/default.pa
を編集し、一番下の### Make some devices default
putの下に:
set-default-sink 1
set-sink-port 1 analog-output-headphones
必要に応じてすべてが動作するはずです。ヘッドフォンの使用にうんざりしている場合は、このコメントを再度コメント化してください。
さて、私はあなたが試すことができる何かを持っていると思います。
ダッシュでMultimedia Systems Selectを検索した場合。それを開き、Audio
タブに移動します。ここで、デフォルトのオーディオ入力および出力デバイスを選択できます。
これはデフォルトでインストールする必要があります。そうでない場合は、Sudo apt-get install gnome-media
をいつでも実行できます。ダッシュに表示されない場合は、次を実行します。
gksudo gedit /usr/share/applications/gstreamer-properties.desktop
。結果のテキストファイルで、NoDisplay=.
で始まる行に移動しますNoDisplay=true
をNoDisplay=false
に変更します。
以下は、問題の修正が見つかるまで問題を回避するのに役立ちます。
以下は、必要なことをnotするスクリプトですが、おそらく必要なものすべてが含まれているスクリプトがいくつかあります。
2番目のものには、機能するが実際には理解していないpulseaudioの束が含まれています。事前におaび申し上げます。 ;)
起動後にスピーカーをオンに戻すために使用したスクリプトを次に示します。必要に応じてオーディオ出力を設定するように変更するのは簡単です。
#!/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: 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