web-dev-qa-db-ja.com

Ubuntu 17.04および17.10 for FirefoxでPulseAudioを自動的に起動するにはどうすればよいですか?

私は、Ubuntu 17.04および17.10でFirefox 56.0を入手して、Facebookのビデオでサウンドを再生しようとしています(Facebookに固有であるかどうかさえもわかりません)。ビデオを再生したときにPulseAudioが開始されない、またはまったく開始されないという問題を特定しました。しかし、コマンドラインからpulseaudioを実行し、その後Facebook内からビデオを再生すると、音が聞こえます。

私を混乱させているのは、このpulseaudio UNIXプロセスがいつ開始されることになっているのかについて正確に何を期待すべきかを理解しようとしていることです。

  1. 起動時に?
  2. ユーザーがログインする前のX11の起動時ですか?
  3. ユーザーのログイン時(「あいさつ」のこと; GDMなど)?
  4. Firefoxによって、いくつかの共有ライブラリでコードを実行し、pulseaudioの起動を要求する場合

https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Running/ は、ユーザーログイン時でなければならないことを意味します。

/ etc/xdg/autostartは、ユーザーのログイン時にグラフィカルセッションマネージャーが自動的に開始するセッションサービスに関する情報を含むディレクトリです。 PulseAudioは独自のファイルをそこに出荷します。 pulseaudio.desktopは、セッションマネージャにstart-pulseaudio-x11を実行するよう指示します。start-pulseaudio-x11は、いくつかのX11関連モジュール(およびKDEでは、KDEのオーディオルーティング構成ツールで必要なmodule-device-manager)をロードするスクリプトです。 start-pulseaudio-x11は通常、実行中のPulseAudioサーバーを必要とする最初の要素であるため、通常、セッションマネージャーがログインセッションの開始時にstart-pulseaudio-x11を実行するとサーバーが起動します。

自動生成が無効になっている場合、start-pulseaudio-x11はサーバーを明示的に起動しないため、start-pulseaudio-x11は効果がありません。 X11モジュールをロードするとき、自動生成に依存します。この意味で、スクリプト名は誤解を招くものです。過去にサーバーを明示的に起動するために使用されたstart-pulseaudio-x11スクリプトは、スクリプト名を説明しています。

http://support.system76.com/articles/audio/ の指示に従って、良いベースラインから開始できるようにするために最近行ったコマンド(さまざまな理由で、私のマシンのオーディオコネクタは機能していませんでした、そしてそれを修正する次のことをしました):

rm -r ~/.config/Pulse
Sudo apt install --reinstall alsa-base alsa-utils pulseaudio linux-sound-base libasound2

現時点では、欠落している~/.config/Pulseディレクトリが原因であるとは思っていませんが、そうですか?

dmesg | grep Pulse

何も表示されないため、適切なスクリプトが適切なタイミングで実行されていないかのように見えます。

これを有効にするには何を変更する必要がありますか?私は、Firefoxを実行するたびに手動でpulseaudioを呼び出したくありません(スクリプトで何かを考え出すことはできますが、やりたくありません)。

コメントアウトされているので自動スポーンが有効になっていると結論付けます(コメントアウトされているとコメントアウトされていることを意味します[〜#〜] is [〜#〜]プログラムのデフォルト):

drunkard@norehab:~$ ps -ef --forest --cols=10000 | grep Pulse
drunkard    3448  2721  0 14:25 pts/0    00:00:00  |               \_ grep Pulse
drunkard@norehab:~$ ls -ld ~/.config/Pulse
ls: cannot access '/home/drunkard/.config/Pulse': No such file or directory
drunkard@norehab:~$ ls -ld /etc/xdg/autostart/pulseaudio-kde.desktop
ls: cannot access '/etc/xdg/autostart/pulseaudio-kde.desktop': No such file or directory
drunkard@norehab:~$ ls -ld /etc/xdg/autostart/pulseaudio*
-rw-r--r-- 1 root root 4836 Mar 29  2017 /etc/xdg/autostart/pulseaudio.desktop
drunkard@norehab:~$ grep auto /etc/Pulse/client.conf
; autospawn = yes
; auto-connect-localhost = no
; auto-connect-display = no
drunkard@norehab:~$ 

アップデート#1

私はこれを試しました:

cp -p /etc/Pulse/client.conf ~/.config/Pulse/client.conf

そして再起動し、それはまだ自動的に起動していません。

アップデート#2

以下は、/usr/bin/start-pulseaudio-x11[〜#〜] [〜#〜]まったく実行されないことを証明します。

/usr/bin/start-pulseaudio-x11を節約しました:

drunkard@norehab:~$ Sudo cp -p /usr/bin/start-pulseaudio-x11 /usr/bin/start-pulseaudio-x11.orig

次に、現在のタイムスタンプを/tmp/start-pulseaudio-x11.logのログファイルに書き込む行を最後に追加しました。

drunkard@norehab:~$ Sudo sh -c 'echo "date >> /tmp/start-pulseaudio-x11.log" >> /usr/bin/start-pulseaudio-x11'
drunkard@norehab:~$ tail /usr/bin/start-pulseaudio-x11

    if [ x"$KDE_FULL_SESSION" = x"true" ]; then
       /usr/bin/pactl load-module module-device-manager "do_routing=1" > /dev/null
    fi

    if [ x"$SESSION_MANAGER" != x ] ; then
      /usr/bin/pactl load-module module-x11-xsmp "display=$DISPLAY session_manager=$SESSION_MANAGER" > /dev/null
    fi
fi
date >> /tmp/start-pulseaudio-x11.log
drunkard@norehab:~$

その後、再起動してログインすると、/tmp/start-pulseaudio-x11.logが存在しないことがわかりました。

そのため、ログインの前または後に/usr/bin/start-pulseaudio-x11を呼び出すはずのものは何もしていません。

アップデート#3

これはUbuntu 17.10ではまだ壊れています。しかし コメント は、私の回避策が直接実行の代わりにsystemctlを使用できるという点で私を助けてくれました。

しかし、デスクトップを使用しているすべてのユーザーに対してサウンドが有効になっていないのはなぜですか?つまり、どのブラウザーから再生されたビデオからの音も聞きたくないと思う状況はありません。デスクトップユーザーの場合、どのサウンドデーモン(この場合はPulseeaudioでも構いません)をデフォルトで「有効」にする必要があります。サーバーのインストールではそうではありませんが、ここではそうではありません。

1
bgoodr

これは、デスクトップユーザーの構成を処理するアップストリームのUbuntuインストールロジックでこれが修正されたことを誰かが確認できるまで、私が回答として扱っている回避策です。

この回答に示されている起動アプリケーションを使用して起動時に実行するスクリプトがあります: https://unix.stackexchange.com/a/32616/21372 なので、そのスクリプトに追加しました:

# Start pulseaudio because something got broken in Ubuntu or Firefox
# or PulseAudio or or
# or... (https://askubuntu.com/questions/962920/how-do-i-get-pulseaudio-to-start-automatically-in-ubuntu-17-04-for-firefox):
if ! pulseaudio --check
then
  # But not via the old way:
  #
  #   Nohup pulseaudio > /dev/null 2>&1 &
  #
  # Use the proper way to enable this at login time per https://askubuntu.com/a/989674/340383
  systemctl --user enable pulseaudio && systemctl --user start pulseaudio
fi

これは、pulseaudioプロセスが--checkオプションで開始されているかどうかを確認し、実行されていない場合は開始します。

アップデート#1:

https://askubuntu.com/a/989674/34038 に示すように、systemctlコマンドを使用するように回避策を少し変更しました

Ubuntuはデスクトップユーザーのデフォルトでこれを有効にする必要があるため、これはまだ回避策です。

残念ながら、私はこの回避策を引き続き用意する必要があると考えています。次回から最初からアップグレードまたはインストールし、初めて新しいアカウントを実行するとき、起動スクリプトに上記がない場合は、音が機能しなくなった理由について困惑する。

反論:systemctl呼び出しは〜/ .configファイルを更新するので(これは上記のsystemctl...コマンドラインからのものです):

Created symlink /home/drunkard/.config/systemd/user/default.target.wants/pulseaudio.service → /usr/lib/systemd/user/pulseaudio.service.
Created symlink /home/drunkard/.config/systemd/user/sockets.target.wants/pulseaudio.socket → /usr/lib/systemd/user/pulseaudio.socket.

その後、Ubuntuの次の再インストール時に、それは正常に動作しているはずです。しかし、それは私が〜/ .configファイルを保持している場合に限られます。これは適切な仮定ではありません。私は、このまさに理由により、「ユーザー構成」ファイルのすべて(〜/ .configの深いところを除く)をGitリポジトリの下に保持します。これと同じように、最終的にはユーザビリティの問題を回避する必要があり、根本的な原因までデバッグするのに多くの時間を浪費します。

0
bgoodr