iMac 2017 Retina 5K 27インチ(iMac18,3)へ Ubuntu 24.04 HWE を導入した際、内蔵スピーカーを通常利用できる状態まで持っていった記録です。
対象となる音声系は、Cirrus Logic CS8409、CS42L83、TAS576 を含むApple固有の構成です。
以前、Fedora側でiMac18,3の内蔵スピーカーを鳴らすためのCS8409パッチを整理・公開しました。
今回の目的は、Fedora側で整理した知見が Ubuntu 24.04 HWE の新しいカーネルでも通用するかを確認することでした。
結論から言うと、Ubuntu 24.04 HWE の 6.17.0-20-generic に続き、6.17.0-35-generic でも同じ考え方のパッチを適用し、通常のAnalog Stereo再生まで確認できました。
ただし、これはUbuntu標準状態で問題が解決したという報告ではありません。
あくまで、iMac18,3の1台で確認した実験的な再現検証です。
確認した環境
| 項目 | 内容 |
|---|---|
| 機種 | iMac 2017 Retina 5K 27インチ |
| Model Identifier | iMac18,3 |
| OS | Ubuntu 24.04.4 LTS |
| HWE kernel | 6.17.0-35-generic |
| Codec | Cirrus Logic CS8409 |
| Codec subsystem ID | 106b:1000 |
| 音声経路 | CS8409 / CS42L83 / TAS576 |
| 音声サーバー | PipeWire |
Ubuntu HWEの対象ソースは、以下に一致するものを使いました。
Ubuntu HWE source tag:
Ubuntu-hwe-6.17-6.17.0-35.35_24.04.1
Source commit:
bef02c0f8d892814270e9199cafd2c187c3217d4
今回確認できたこと
今回の確認は「一度だけ音が鳴った」ではありません。
Ubuntu 24.04 HWEでは、すでに 6.17.0-20-generic での再生確認がありました。今回、HWE更新後の 6.17.0-35-generic でも、同じ公開パッチの考え方で再現できました。
Ubuntu 24.04 HWE
6.17.0-20
└ 内蔵スピーカー通常再生を確認
6.17.0-35
└ 同じ公開パッチを適用
└ ビルドと実機再生を確認
└ 新しいHWEカーネルでも通常再生を確認
これは、特定の一回限りの組み合わせで偶然鳴ったというよりも、CS8409まわりの初期化と再生経路に関する修正が、Ubuntu側でも一定の移植性を持つ可能性を示す結果になりました。
構成の考え方
Ubuntu側では、HDA全体を置き換える方式にはしませんでした。
差し替えたのは、CS8409用のコーデックモジュールだけです。
snd-hda-codec-cs8409.ko
修正対象は、次の3ファイルです。
sound/hda/codecs/cirrus/cs8409.c
sound/hda/codecs/cirrus/cs8409.h
sound/hda/codecs/cirrus/cs8409-tables.c
iMac18,3向けのquirkも確認しました。
SND_PCI_QUIRK(0x106b, 0x1000, "iMac18,3", CS8409_FIXUP_IMAC_AMP)
この修正では、iMac18,3固有のCS8409初期化、CS42L83とTAS576の初期化、TDM設定、再生開始時の同期、再生停止後に内蔵スピーカーDACを不必要にクリアしない処理などを含みます。
特に、内蔵スピーカー用DAC 0x02 と 0x03 を再生cleanup時にクリアしないことは、安定再生に関わる重要な条件でした。
実機で確認できた再生
iMac18,3の実機で、以下を確認しました。
- 起動後にカスタムCS8409モジュールが自動ロードされる
- CS42L83 / TAS576 / TDM初期化が実行される
-
hw:0,0での44.1kHz・2ch直接ALSA再生 - default ALSA経路でのLeft / Right再生
- PipeWire経由のAnalog Stereo再生
- Firefox / YouTubeでの通常再生
- 44.1kHzおよび48kHzのステレオ再生
- 一度動画を停止したあと、別の動画を再生しても復帰する
- 再起動後も通常再生できる
- 通常の聴感では左右差を感じない
- Analog Stereoでの通常利用時に目立つノイズがない
通常のYouTubeや音楽再生では、PCMはおよそ61%前後で実用的な音量でした。
一方、正弦波テストはエネルギーが集中するため、PCM 5%程度でもかなり大きく聞こえました。正弦波による音量感と、音楽や動画を再生する通常利用時の音量感は、別に考える必要があります。
実際に使われるモジュール
検証時、作成したモジュールは次の場所に配置しました。
/lib/modules/6.17.0-35-generic/updates/snd-hda-codec-cs8409.ko
ここに置いたことで、Ubuntu起動時に標準のCS8409モジュールより優先して読み込まれる構成にしています。
ただし、この .ko は 6.17.0-35-generic 専用です。
6.17.0-35用のモジュール
→ 6.17.0-35でのみ使用可能
新しいHWEカーネル
→ 対象カーネルのソース確認
→ patch適用確認
→ そのカーネル向けに再ビルド
カーネルが更新された場合に、そのまま古い .ko を使い続けることはできません。
プロファイル切替について
通常利用では、次のプロファイルを維持するのが安全でした。
output:analog-stereo+input:analog-stereo
Analog Stereoでは通常再生を確認できています。
一方、4.0など別のマルチチャンネルプロファイルへ切り替えると、再生ストリーム自体は継続していても、出力がザー音化する現象を確認しました。
Analog Stereo
↓
4.0へ切替
└ 再生は継続
└ 出力はザー音化
4.0
↓
Analog Stereoへ戻す
└ 音声は再起動なしで復帰可能
また、Analog Stereoへ戻した直後に、GNOMEの音量スライダーや左右バランスが実音へ一時的に反映されない場合がありました。
この場合でも、pactl や amixer による音量制御は反応していました。
PipeWire / WirePlumberのユーザーサービスを再起動すると、GNOME側の音量・左右バランスも復帰しました。
systemctl --user restart \
pipewire.service \
pipewire-pulse.service \
wireplumber.service
普段の利用では、プロファイルを切り替えず、Analog Stereoのまま使う方針が安全です。
まだ未対応のこと
内蔵スピーカーの通常利用は実用的に安定しましたが、音声機能全体が完成したわけではありません。
現時点で未対応、または十分に検証できていない項目は次の通りです。
- ヘッドフォン切替
- 内蔵マイク
- 外部マイク
- 2.1 / 4.0 / Pro Audioなどの別プロファイル
- 任意の出力・プロファイル切替後の完全な安定性
- 長時間利用での安定性
つまり、この報告は、
iMac18,3の内蔵スピーカーを、Ubuntu 24.04 HWE / kernel 6.17.0-35で、通常のAnalog Stereo再生として使える状態まで確認した
というものです。
ヘッドフォンやマイクまで含めた完全対応を意味するものではありません。
パッチと検証メモ
Ubuntu 24.04 HWE / kernel 6.17.0-35 向けのパッチ、対象ソース情報、SHA-256、検証メモは、Ubuntu専用リポジトリにまとめています。
Fedora版とUbuntu版は、CS8409 / CS42L83 / TAS576を含むiMac18,3の音声経路に関する知見を共有しています。
ただし、対象カーネルのソース、ビルド手順、モジュールの配置先は異なります。
Fedora利用者はFedora版、Ubuntu利用者はUbuntu版を参照してください。
まとめ
今回確認できたことは、次の通りです。
Ubuntu 24.04 HWE / 6.17.0-20
→ 内蔵スピーカー通常再生を確認
Ubuntu 24.04 HWE / 6.17.0-35
→ 同じ考え方のパッチで再現
→ ALSA、PipeWire、Firefox、YouTubeで通常再生を確認
ヘッドフォン・マイク・多チャンネルプロファイル
→ まだ未対応または実験段階
Fedora向けに整理したパッチが、Ubuntu 24.04 HWEの複数カーネルでも再現できたことで、この修正は単一カーネルだけの偶然ではなく、一定の移植性を持つ可能性が見え始めました。
今後は、新しいHWEカーネルごとに対象ソースとの適用確認とモジュールの再ビルドを行いながら、ヘッドフォン切替やマイク入力も含めた残りの経路を観測していく予定です。