Raspberry Pi 5 環境の Ubuntu 23.10 にて、リモートデスクトップ環境 xrdp を入れたとき、音声出力ができないという問題にぶち当たりました。
サウンドの設定を見てみると、サウンド出力先に Dummy Output
しかありません。
今回はこれを解決し、リモートデスクトップからでも音声を出力できるようにするまでの過程を記録しておきます。
環境
$ neofetch
.-/+oossssoo+/-. ytani@raspberry-pi-5
`:+ssssssssssssssssss+:` --------------------
-+ssssssssssssssssssyyssss+- OS: Ubuntu 23.10 aarch64
.ossssssssssssssssssdMMMNysssso. Host: Raspberry Pi 5 Model B Rev 1.0
/ssssssssssshdmmNNmmyNMMMMhssssss/ Kernel: 6.5.0-1013-raspi
+ssssssssshmydMMMMMMMNddddyssssssss+ Uptime: 1 hour, 7 mins
/sssssssshNMMMyhhyyyyhmNMMMNhssssssss/ Packages: 2408 (dpkg), 9 (snap)
.ssssssssdMMMNhsssssssssshNMMMdssssssss. Shell: bash 5.2.15
+sssshhhyNMMNyssssssssssssyNMMMysssssss+ Terminal: /dev/pts/1
ossyNMMMNyMMhsssssssssssssshmmmhssssssso CPU: BCM2835 (4) @ 2.400GHz
ossyNMMMNyMMhsssssssssssssshmmmhssssssso Memory: 1246MiB / 7943MiB
+sssshhhyNMMNyssssssssssssyNMMMysssssss+
.ssssssssdMMMNhsssssssssshNMMMdssssssss.
/sssssssshNMMMyhhyyyyhdNMMMNhssssssss/
+sssssssssdmydMMMMMMMMddddyssssssss+
/ssssssssssshdmNNNNmyNMMMMhssssss/
.ossssssssssssssssssdMMMNysssso.
-+sssssssssssssssssyyyssss+-
`:+ssssssssssssssssss+:`
.-/+oossssoo+/-.
注意
近年の Ubuntu(22.04~)では標準でリモートデスクトップ VNC をサポートしており、設定画面からリモートデスクトップを有効化できます。VNC は今回扱う xrdp とは異なる環境ですのでご注意ください。
今回は xrdp を別途インストールし、xrdp のリモートデスクトップ環境を導入しています。その理由として、
- 外部モニターがオフのときでもリモート接続できるようにしたかった
- しかし、Raspberry Pi 5 は HDMI ケーブルを抜くと GUI が自動でオフになるようで、VNC ではモニターに接続しておかないとリモート接続できなかった
- 正確に言うと、接続はできるけど一瞬でセッションが中断してしまう
- 設定を変えてみたが(このあたりを参照)、変化はなかった
- 一方で、xrdp であれば外部モニターに接続しなくともリモート接続できた
といった点が挙げられます。
はじめに
最初に xrdp をインストールしておきます。インストール、サービス有効化からポートの開放まで。
$ sudo apt install xrdp
$ sudo systemctl enable xrdp
$ sudo ufw allow 3389
この状態でプライベート IP アドレスとアカウント名、パスワードを入力すると、とりあえずはリモートデスクトップ接続できました。
しかし、音が出ません。サウンド設定を見ても Dummy Output
という、いかにも音声出力できませんよという出力デバイスしか見当たりませんでした。
1.(やっても変わらず)pulseaudio の導入
ラズパイに音付きでリモート接続して操作する(xrdp+pulseaudio) ofuton.org
こちらを参考にさせていただき、まずは pulseaudio
および pulseaudio-module-xrdp
をインストールします。
1.1 sources.list の編集
pulseaudio のインスールには apt build-dep
を利用するので、/etc/apt/sources.list
にリポジトリを追加しておきます。
$ sudo vi /etc/apt/sources.list
...
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi # <- 追記
その後、sudo apt update
しておきます。
$ sudo apt update
しかし、ここで最初のハマりポイントが発生。
1.1.2 ハマりポイント①:「公開鍵を利用できないため、以下の署名は検証できませんでした」
これに関しては、今 sources.list
に登録した http://raspbian.raspberrypi.org/raspbian/
の公開鍵を登録しておけばよいです。
公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY [公開鍵]
NO_PUBKEY
の後ろに公開鍵が表示されますので、それを apt-key
で登録しておきます。
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys [公開鍵をここに入力]
1.2 pulseaudio のインストール
次に build-dep
および pulseaudio
をインストールします。
まずはダウンロード用ディレクトリの用意。
$ mkdir ~/pulseaudio
$ cd ~/pulseaudio
続いてインストール。
$ sudo apt build-dep pulseaudio
$ sudo apt source pulseaudio
$ cd pulseaudio-12.2
$ sudo ./configure
このとき、1行目の sudo apt build-dep pulseaudio
で2つ目のハマりポイントがありました。
1.2.1 ハマりポイント②:「依存: libgconf2-dev しかし、インストールすることができません」
pulseaudio に必要な libgconf2-dev
が存在しないと言われます。
検索してみると、たしかにリポジトリ上に見つかりません。
$ apt search libgconf
ソート中... 完了
全文検索... 完了
ググってみると、arm64 向けの libgconf2-dev
を配布しているリポジトリを見つけました。
Debian – buster の libgconf2-dev パッケージに関する詳細
このリポジトリを先ほどと同じように sources.list
に追記しておきます。
$ sudo vi /etc/apt/sources.list
...
deb http://ftp.de.debian.org/debian buster main # <- 追記
そして sudo apt update
します。
$ sudo apt update
すると、ここでも前述のハマりポイント①と同じ現象が見られました。同じように対処します。
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys [公開鍵をここに入力]
1.3 pulseaudio-module-xrdp のビルド&インストール
次に、pulseaudio-module-xrdp
を git clone してきてビルドしインストールします。
$ sudo apt install libpulse-dev
$ cd ~/pulseaudio
$ git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git
$ cd pulseaudio-module-xrdp
$ sudo ./bootstrap
$ sudo ./configure PULSE_DIR=/home/[ユーザ名]/pulseaudio/pulseaudio-12.2
$ sudo make
$ sudo make install
1.3.1 ハマりポイント③:configure の実行中にエラー発生
libpulse-dev
がないと言われてしまいました。インストールしたはずなのですが。
一旦 autoremove
してもう一度インストールし直すと直りました。
$ sudo apt autoremove libpulse-dev
$ sudo apt install libpulse-dev
1.4 インストール完了の確認
$ ls $(pkg-config --variable=modlibexecdir libpulse)
を実行し、module-xrdp-sink.la
、module-xrdp-sink.so
、module-xrdp-source.la
、module-xrdp-source.so
があれば完了です。
2. いざ再起動!…あれ?
その後再起動し、サウンド設定を見てみました。すると…あれ?
相変わらず Dummy Output
しか選択できませんでした。
3.(成功)PipeWire 用のモジュールを導入する
どうやら、近年の Ubuntu では PulseAudio ではなく PipeWire がデフォルトになっているようで。
Xrdp - no audio. Dummy Output is only device.
Ubuntu 23.10 では、PipeWire の xrdp モジュールを導入しなければなりませんでした。
3.1 pipewire-module-xrdp をインストールする
$ mkdir ~/pipewire
$ cd ~/pipewire
$ sudo apt install pipewire pipewire-audio pipewire-bin libpipewire-0.3-dev libspa-0.2-dev
$ git clone https://github.com/neutrinolabs/pipewire-module-xrdp.git
$ cd ./pipewire-module-xrdp
$ ./bootstrap
$ ./configure
$ make
$ sudo make install
再起動してみて、サウンド設定を確認。
すると、xrdp-sink
の表示が!ようやくリモートデスクトップ環境でも音声出力ができるようになりました。