私は、カスタム Debian 10 x64 システムを構築するために、preseeding 機能を使用しています。late_command ステップ中に、さまざまなものを構成および展開するためのシェル スクリプトを実行していることと、物理オーディオ インターフェイスにアクセスできるようにしたいことを除いて、すべて順調に進んでいます。
通常、私は を使ってこれを行いますpacmd list-sinks
。そうすると、さまざまなオーディオ カードの名前に簡単にアクセスできます。しかし、この場合、 を使用するとchroot /target/ sudo -u device pacmd list-sinks
、 という名前のダミー インターフェイスだけが表示されますaudio_null
。
また、インストール後にシステムを再起動すると、物理オーディオ インターフェイスに正常にアクセスできるようになることも強調しておきます。
(参考までに、Pulseaudio のデフォルト プロファイル内でデフォルト インターフェイスを構成するには、物理インターフェイス名にアクセスする必要があります。ルート ファイル システムはインストール直後に読み取り専用に設定されるため、これを一度に行うのに最適なタイミングです)。
インストール中にすべてのモジュールが必要なわけではなく、必要なサービスや構成の手順がいくつかスキップされる可能性があるため、これは予想される動作だと思います。
これまで私が試したことは次のとおりです。
- 関連性があると思われるいくつかのモジュールを手動で(再)ロードします:
chroot /target/ sudo modprobe soundcore
- PulseAudio サービスを再読み込みしています (まだ開始されていないようです)
- ターゲットシステムからのリストとターゲットシステム外のリスト(
chroot /target/ pacmd list-sinks
、pacmd list-sinks
)前のコマンドを機能させるには、Pulseを再起動する必要がありましたchroot /target/ sudo -u device pulseaudio --start
が、そうしないとエラーメッセージが表示されました。No PulseAudio daemon running or not running as session daemon
これまでの試みはどれも成功せず、アイデアも尽きています。おそらく明らかな概念を見逃したか誤解していたので、外部の視点が歓迎されます。
late_command
それが私の最終目的ではないとしても、問題をより広い範囲、つまり Debian インストールのステップ中にサウンドを再生する方法にまで戻す方が簡単かもしれません。
PS: ちなみに、私は現在、VmWare を使用して仮想マシンに展開しており、物理的なサウンド カードがそれにブリッジされています。
答え1
このステージはまだ chroot 内で実行されているため、systemd インスタンスは存在せず、バックグラウンドで実行されている systemd に依存するものはすべて壊れています。
また、インストーラー用にビルドされたカーネル イメージも実行されていますが、これはターゲット システムにインストールされたものと同じである可能性がありますが、インストーラーはインストール時に利用可能な最新のカーネルを選択するため、同じではないことがよくあります。そのため、システムにインストールされたモジュールは、現在実行中のカーネルに適合しない可能性があります。
最善の方法は、インストーラー カーネル用のサウンド モジュールを探し (これらはアクセシビリティ用のオプションのインストーラー モジュール内に存在すると思います)、ALSA ツールを使用してサウンドを再生することです。
答え2
これをやるとおそらく最初の起動時に実行されるスクリプトとしてはるかに簡単インストーラー内からではなく。
とはいえ、手動で「インストール メディアからインストーラ コンポーネントをロード」し、「sound-modules-5.10-8-amd64-di: sound support」(Debian 11 の場合ですが、Debian 10 にもおそらくあります) を選択する簡単なテストを行うと、必要なカーネル モジュールが正しく挿入されます。alsa-utils (in-target) のインストールは、VirtualBox ですぐに使用できます。最初にaplay
カードのミュートを解除すれば、実行も機能しますamixer
。
Debian 11 に必要な preseed 行は次のようになります。
d-i preseed/early_command string anna-install sound-modules
(...他にも方法はありますが、これは私にとってはうまくいきました)
次に、ターゲットに alsa-utils があることも確認する必要があります。デスクトップ環境などの「タスク」を使用している場合は何も必要ありません。ただし、ベア システムの場合は、次のものが必要になります。
d-i pkgsel/include string alsa-utils
最後に、ちょっと騒ぎ立ててみます(しゃれです):
d-i preseed/late_command string in-target /bin/sh -c \
"amixer set Master 80% unmute; amixer set PCM 80% unmute; aplay /usr/share/sounds/alsa/Noise.wav"
動作する alsa スタックがあれば、または同様の操作 (ターゲット内) を実行してハードウェア オーディオ デバイスのリストを簡単に取得しaplay -l
、後でその情報をセットアップ スクリプトで使用できます。
これはうまくいくかもしれませんが、異なるハードウェア設定でこれを正しく行うのは非常に難しいだろうと想像できます。サウンドカードによっては、追加のスイッチや出力を選択する必要があります。さらに、modprobe
最終システムのオプションは di 環境とは大幅に異なり、カード インデックスなどに影響する可能性があります。ハッピー ハッキング!