Hyper-V ⑥ AlmaLinux 8.9 で 拡張機能で音を出す! | MMSCC メディアミックス
PC関係

Hyper-V ⑥ AlmaLinux 8.9 を入れて音を出す

なぜに、8.9?
Linux Mint 21.3AlmaLinux 9.xHyper-Vの拡張機能で音を出そうと、四苦八苦している現状です。
やり方は neutrinolabs / pulseaudio-module-xrdp に書かれている方法。

Debian・Ubuntu・CentOS 7.x・CentOS 8.x・Fedora・Other Distro についての、やり方が記載されているが、Linux Mint 21.3 に入れようと思って地獄を見た!
何が地獄かと言うと、pulseaudio をコンパイルするのに、どのライブラリが必要なのかわからず、足りないライブラリをaptしては、コンパイル、また不足分をaptしては、コンパイル。
10回ぐらいで諦めました、一気に依存性を教えてくれよ!それとも自動でやってくれ!

Linux Mint 21.3 はとりあえず、あきらめて、AlmaLinux 9.4でやってみた!、AlmaLinux というか、RPMパッケージ系では、mock って ソフトがありましてとっても便利、お任せ状態でした。

AlmaLinux 9.4 で、以下の必要ファイルがビルドできました!
module-xrdp-sink.la
module-xrdp-sink.so
module-xrdp-source.la
module-xrdp-source.so

インストールして、音が出るのか?と思いきや…
# rpm -qa | grep pulseaudio
pulseaudio-libs-15.0-2.el9.x86_64
pulseaudio-libs-glib2-15.0-2.el9.x86_64
pipewire-pulseaudio-1.0.1-1.el9.x86_64

AlmaLinux 9.xでは、pulseaudio 本体が入っていない!入れよとすると競合で、色々と削除しようとする。

原点に戻って、説明の通り CentOS 8.x に入れてみよう、と言っても、もうCentOSはまずいでしょ、バイナリレベルのコンパチブルがあった、AlmaLinux 8.9でやってみます。

サクッと仮想マシンを作る

上の図を見れば設定はわかるはず、インストール時には、DVDドライブに「AlmaLinux-8.9-x86_64-dvd.iso」を入れてあった。

まぁサクッとインストールまで済ませた。しかしあれだ、デスクトップ環境ってのは、8.x環境で初めてインストールしたと思う。

拡張機能を有効にする。古い人間なもので、ターミナルを管理者権限で実行している。

〇xrdp をインストールするために、リポジトリを追加する
Fedora プロジェクト発 RHEL 用にビルドされたスペシャルパッケージを提供する EPELを追加して、powertoolsを有効化する。

# dnf -y install epel-release
# vi /etc/yum.repos.d/epel.repo
[epel]
priority=10

# vi /etc/yum.repos.d/almalinux-powertools.repo
[powertools]
enabled=1
priority=10

# dnf install xrdp xorgxrdp

/etc/xrdp/xrdp.ini を編集する
port=vsock://-1:3389
use_vsock=true
security_layer=rdp
crypt_level=none
bitmap_compression=false

/etc/xrdp/sesman.ini を 編集
FuseMountName=shared_drives

/etc/X11/Xwrapper.config ファイルを作る
# echo “allowed_users=anybody” > /etc/X11/Xwrapper.config

/etc/modules-load.d/hv_sock.conf ファイルを作る
# echo “hv_sock” > /etc/modules-load.d/hv_sock.conf

ファイアーウォールを通るようにする
# firewall-cmd –permanent –add-port=3389/tcp
# firewall-cmd –permanent –add-port=3389/udp
# firewall-cmd –reload

selinuxの設定を変更
# vi /etc/selinux/config
SELINUX=permissive

これで、AlmaLinux 8.9側の設定は終わりなので、シャットダウンする

Windows(親)側の設定をする。
仮想マシンを終了して 管理者権限でPowerShell を起動して、以下のコマンドを実行
Set-VM -VMName AlmaLinux8.9DT -EnhancedSessionTransportType HvSocket

赤アンダーラインの部分は各自の仮想マシン名に合わせてください。

これで、仮想マシン AlmaLinux 8.9 が拡張機能付きで起動するはず。

pulseaudio 周りの確認
# rpm -qa | grep pulse
pulseaudio-utils-14.0-4.el8.x86_64
pulseaudio-14.0-4.el8.x86_64
pulseaudio-libs-glib2-14.0-4.el8.x86_64
alsa-plugins-pulseaudio-1.1.9-1.el8.x86_64
pulseaudio-module-bluetooth-14.0-4.el8.x86_64
pulseaudio-libs-14.0-4.el8.x86_64
pulseaudio-module-x11-14.0-4.el8.x86_64

AlmaLinux 8.9 には、 pulseaudio-14.0-4.el8.x86_64 がインストールされていた!

このページへ戻り、 neutrinolabs / pulseaudio-module-xrdp にCentOS 8.x用のやり方で設定!
説明は、以下に書かれている。
https://github.com/neutrinolabs/pulseaudio-module-xrdp/wiki/README

注意、ここから下は、 ユーザーモード(プロンプトが $ )で作業をしている。mock 自体が chroot 環境マネージャーですから、当然ですね。

① mock の インストール
epel-release は xrdp のところでインストール済なので、スキップ
sudo dnf install epel-release
sudo dnf install mock
sudo usermod -a -G mock $USER

ここで、一度ログアウトする(終了)、ログアウトしないとダメだった。
$ id -Gn
mediamix wheel mock

mockが表示されていればOK

②テンポラリーフォルダを作り、pulseaudioをビルド
mkdir xrdp-tmp
cd xrdp-tmp

dnf download –source pulseaudio sbc libatomic_ops webrtc-audio-processing

Extra Packages for Enterprise Linux 8 – x86_64 2.7 MB/s | 2.5 MB 00:00
(1/4): sbc-1.3-9.el8.src.rpm 279 kB/s | 356 kB 00:01
(2/4): webrtc-audio-processing-0.3-10.el8.src.r 483 kB/s | 704 kB 00:01
(3/4): libatomic_ops-7.6.2-3.el8.src.rpm 346 kB/s | 506 kB 00:01
(4/4): pulseaudio-14.0-4.el8.src.rpm 2.6 MB/s | 1.9 MB 00:00
上手く行っている!

mock –chain ./sbc-*.src.rpm ./libatomic_ops-*.src.rpm ./webrtc-audio-processing-*.src.rpm ./pulseaudio-*.src.rpm

INFO: Done(./pulseaudio-14.0-4.el8.src.rpm) Config(default) 2 minutes 17 seconds
INFO: Results and/or logs in: /var/tmp/mock-chain-root-3282-mhd98rlc/results/default/pulseaudio-14.0-4.el8
INFO: End chain build: ./pulseaudio-14.0-4.el8.src.rpm
INFO: Success building pulseaudio-14.0-4.el8.src.rpm
INFO: Results out to: /var/tmp/mock-chain-root-3282-mhd98rlc/results/default
INFO: Packages built: 4
INFO: Packages successfully built in this order:
INFO: ./sbc-1.3-9.el8.src.rpm
INFO: ./libatomic_ops-7.6.2-3.el8.src.rpm
INFO: ./webrtc-audio-processing-0.3-10.el8.src.rpm
INFO: ./pulseaudio-14.0-4.el8.src.rpm

これで、ビルドできているようだ!、まるで夢の様だ! Linux Mintで本当に苦労したから、mockのありがたみが解かる。

③出来上がった場所を探して、環境変数に割り当てる
$ find /var/lib/mock -type d -name pulseaudio-* 2>/dev/null

いろいろと吐き出されたが、以下にあるようだ
/var/lib/mock/alma+epel-8-x86_64/root/builddir/build/BUILD/pulseaudio-14.0

PULSE_DIR=/var/lib/mock/alma+epel-8-x86_64/root/builddir/build/BUILD/pulseaudio-14.0

④必要なモジュールを作る
sudo dnf install autoconf automake make libtool libtool-ltdl-devel pulseaudio-libs-devel git
メッセージが流れて、最後に 「完了しました!」と表示された
git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git
cd pulseaudio-module-xrdp
./bootstrap && ./configure PULSE_DIR=$PULSE_DIR
make
sudo make install
エラーが出てない、涙が出そうなほど感動!

④最終確認
ls $(pkg-config –variable=modlibexecdir libpulse) | grep xrdp
module-xrdp-sink.la
module-xrdp-sink.so
module-xrdp-source.la
module-xrdp-source.so

module-xrdp-sink.so と module-xrdp-source.so があればうまく行っているらしい

仮想マシンをシャットダウンして、再度起動!

あぁ、FireFoxでYouTubeを見ても音が出る!
ディストップ環境を、使うか?と問われれば、たぶん使わないが、動いたこと、出来たことが嬉しい。
ただ、書いてある通りに設定しただけだが、Linux Mint や AlmaLinux 9.X でダメだったので、原点を辿れただけでもうれしい、AlmaLinux 9.Xでも 音を出せそうな気がする…

この爽快感は500ピースのジグソーパズルを完成したぐらいの感動かも?
(300ピースまでしか作ったことないけど…それ以上の感動って事で!)