Ubuntu20.04 で pulseaudio をシステム起動時に実行する

ALL
スポンサーリンク

サウンド再生には pulseaudio が必要ですが、Ubuntu デフォルトではpulseaudio はユーザーごとに、ログイン/ログアウトのたびに 起動・終了されます。
これを、ログインせずとも自動起動するようにします。
特定のユーザーアカウントで、システム起動時にpulseaudio を起動させます。

システム起動時に pulseaudio を起動させるユーザーアカウントで、次を実行します。

mkdir -p ~/.config/systemd/user/
cp /etc/systemd/user/default.target.wants/pulseaudio.service ~/.config/systemd/user/

下記行のように、コメントアウトしたり、行の内容を変更します。
pulseaudio の代わりに、何もしない /bin/true を起動させることで、ユーザーログイン時に pulseaudio が立ち上がらないようにしています。

~/.config/systemd/user/pulseaudio.service

#Requires=pulseaudio.socket
ExecStart=/bin/true
#Also=pulseaudio.socket

次のように設定をします。
これは、サウンド再生時に時々音が一瞬途切れる件の対処です。

/etc/pulse/daemon.conf

default-sample-rate = 48000

crontab -e で次の行を追加します。
システム起動時にスクリプト start_pulseaudio.sh を実行します。

@reboot /bin/sh /home/`id -n -u`/start_pulseaudio.sh

start_pulseaudio.sh の内容は次のようにします。

~/start_pulseaudio.sh

/bin/sleep 60
mkdir -p /tmp/$(id -u)/pulse
export PULSE_RUNTIME_PATH="/tmp/$(id -u)/pulse"
/usr/bin/pulseaudio -D --exit-idle-time=-1

60秒の待ち時間を入れています。
必要なサービスが起動されるまでの時間稼ぎです。

また、crontab の @reboot による起動時の実行では、pulseaudio は /tmp 下にディレクトリを作りますが、ランダムな文字を含むものです。
pulseaudio の動作を前提とするプログラムの実行では、このディレクトリの場所を環境変数 PULSE_RUNTIME_PATH で指定する必要がありますが、ランダムな文字列なので不都合です。
そのため、/tmp/$(id -u)/pulse として固定ディレクトリを指定しています。
($(id -u)はユーザIDの数字が入ります)

コメント