ThinkPad P16 Gen 3 Ubuntu 22.04 + Liquorix カーネル 6.18 環境でのドライバー修正まとめ
環境
| 項目 | 詳細 |
|---|---|
| PC | Lenovo ThinkPad P16 Gen 3 (21RQCTO1WW) |
| OS | Ubuntu 22.04.5 LTS (Jammy) |
| カーネル | 6.18.6-1-liquorix-amd64 |
| GPU (dGPU) | NVIDIA RTX PRO 5000 Blackwell (10de:2c38) |
| GPU (iGPU) | Intel Meteor Lake (8086:7d67) |
| オーディオ | Intel Meteor Lake (8086:7f50) / SoundWire / CS42L43 + CS35L56 |
| Bluetooth チップ | Intel AX211 |
問題1: NVIDIA GPU が認識されない (nouveau 失敗)
症状
nouveau 0000:01:00.0: gsp: Failed to load required firmware for device.
nouveau 0000:01:00.0: gsp ctor failed: -2
nouveau 0000:01:00.0: probe with driver nouveau failed with error -2
原因
Blackwell 世代の GPU に nouveau ドライバーが対応しておらず、プロプライエタリドライバーも未インストールだった。
解決策
sudo apt update && sudo apt install -y nvidia-driver-590-open
sudo reboot
nvidia-smi で正常に認識されることを確認:
NVIDIA RTX PRO 5000 Blac... | Driver Version: 590.48.01 | CUDA Version: 13.1
問題2: Intel i915 GSC ファームウェアが古い
症状
i915 0000:00:02.0: [drm] GT1: GSC firmware too old for ARL, got 102.0.0.1655 but need at least 102.0.10.1878
i915 0000:00:02.0: [drm] *ERROR* GT1: GSC firmware i915/mtl_gsc_1.bin: fetch failed -EINVAL
原因
Ubuntu 22.04 の linux-firmware パッケージ (2022年版) が Meteor Lake / Arrow Lake 用の GSC ファームウェアとして古いバージョンを含んでいた。
解決策
kernel.org の linux-firmware リポジトリ から最新の GSC ファームウェアをダウンロード:
sudo wget -O /lib/firmware/i915/mtl_gsc_1.bin \
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/i915/mtl_gsc_1.bin
sudo update-initramfs -u
sudo reboot
問題3: オーディオが出ない (Dummy Output)
これが最も複雑な問題で、複数の原因が絡んでいた。
症状
- GNOME 設定で出力が「Dummy Output」のみ表示
- マイクも認識されない
-
pactl list sinks shortでauto_nullのみ表示
原因1: カーネルパラメータでレガシー HDA ドライバーが強制されていた
/proc/cmdline に snd_intel_dspcfg.dsp_driver=1 が設定されていた。Meteor Lake のスピーカー (CS42L43 + CS35L56) とマイク (DMIC) は SoundWire 接続であり、SOF (Sound Open Firmware) ドライバー (dsp_driver=3) が必要。
# /etc/default/grub に SOF 強制パラメータを追加
# GRUB_CMDLINE_LINUX_DEFAULT に snd_intel_dspcfg.dsp_driver=3 を追加
sudo sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"/GRUB_CMDLINE_LINUX_DEFAULT="quiet splash snd_intel_dspcfg.dsp_driver=3"/' /etc/default/grub
sudo update-grub
注意: EFI grub.cfg のルートパーティション
デュアルブート環境では、EFI パーティション上の /boot/efi/EFI/ubuntu/grub.cfg がどのパーティションの grub.cfg を読み込むかを指定している。
# /boot/efi/EFI/ubuntu/grub.cfg の内容
search.fs_uuid <UUID> root
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
ここの UUID が別のパーティションを指していると、/etc/default/grub を修正して update-grub しても反映されない。UUID が現在のパーティションを指していることを確認:
# 現在の root パーティションの UUID を確認
findmnt -n -o UUID /
# EFI grub.cfg の UUID を現在のパーティションに修正
sudo sed -i "s/<古いUUID>/$(findmnt -n -o UUID /)/" /boot/efi/EFI/ubuntu/grub.cfg
原因2: SOF ファームウェアの不足
Ubuntu 22.04 の firmware-sof-signed パッケージにはファームウェアが含まれていたが、IPC4 用のディレクトリ構成が不足していた。
# sof-ipc4-tplg → sof-ace-tplg シンボリックリンク作成
sudo ln -s sof-ace-tplg /lib/firmware/intel/sof-ipc4-tplg
原因3: UCM Syntax 7 と libasound2 の非互換
SOF ドライバーが正常に動作しても、PipeWire/WirePlumber が**「stereo-fallback」プロファイル**にフォールバックし、スピーカー (hw:1,2) ではなく Jack Out (hw:1,0) に音声がルーティングされていた。
根本原因は UCM (Use Case Manager) 設定ファイルの Syntax バージョン不整合:
$ alsaucm -c sof-soundwire list _verbs
ALSA lib parser.c:2021:(parse_master_file) Incompatible syntax 7 in sof-soundwire.conf
| パッケージ | バージョン | 対応 Syntax |
|---|---|---|
alsa-ucm-conf |
1.2.6.3-1ubuntu1.12 (更新済) | Syntax 7 を含む |
libasound2 |
1.2.6.1-1ubuntu1 | Syntax 6 まで |
Ubuntu 22.04 の alsa-ucm-conf パッケージが Syntax 7 の UCM ファイルに更新されているにもかかわらず、libasound2 は Syntax 7 をパースできない 1.2.6 のまま。libasound2 のアップグレードは glibc 2.38 を要求するため Ubuntu 22.04 では不可能。
最終的な解決策: WirePlumber + autostart スクリプト
UCM が使えない環境でのワークアラウンドとして、pro-audio プロファイルへの切替とデフォルトデバイスの設定を自動化する。
ALSA デバイスの対応表
$ aplay -l (card 1: sofsoundwire のみ抜粋)
device 0: Jack Out → ヘッドホン出力
device 2: Speaker → 内蔵スピーカー
device 5-7: HDMI → HDMI オーディオ出力
1. WirePlumber ルール (~/.config/wireplumber/main.lua.d/51-sof-soundwire.lua)
-- Fix for sof-soundwire on Ubuntu 22.04
-- UCM Syntax 7 is incompatible with libasound2 1.2.6
-- Use pro-audio profile and route to Speaker (device 2) directly
table.insert(alsa_monitor.rules, {
matches = {
{
{ "device.name", "equals", "alsa_card.pci-0000_80_1f.3-platform-sof_sdw" },
},
},
apply_properties = {
["api.alsa.use-ucm"] = false,
["device.profile"] = "pro-audio",
},
})
-- Set Speaker (pro-output-2, hw:1,2) as high priority default sink
table.insert(alsa_monitor.rules, {
matches = {
{
{ "node.name", "equals", "alsa_output.pci-0000_80_1f.3-platform-sof_sdw.pro-output-2" },
},
},
apply_properties = {
["node.description"] = "Speaker",
["node.nick"] = "Speaker",
["priority.driver"] = 2000,
["priority.session"] = 2000,
},
})
-- Set DMIC (pro-input-1) as high priority default source
table.insert(alsa_monitor.rules, {
matches = {
{
{ "node.name", "matches", "alsa_input.pci-0000_80_1f.3-platform-sof_sdw.pro-input-*" },
},
},
apply_properties = {
["node.description"] = "Internal Microphone",
["node.nick"] = "Internal Microphone",
["priority.driver"] = 2000,
["priority.session"] = 2000,
},
})
-- Set Headphone (pro-output-0, hw:1,0) with lower priority
table.insert(alsa_monitor.rules, {
matches = {
{
{ "node.name", "equals", "alsa_output.pci-0000_80_1f.3-platform-sof_sdw.pro-output-0" },
},
},
apply_properties = {
["node.description"] = "Headphones",
["node.nick"] = "Headphones",
["priority.driver"] = 1500,
["priority.session"] = 1500,
},
})
2. 自動起動スクリプト (~/.local/bin/fix-audio.sh)
#!/bin/bash
# Fix sof-soundwire audio on ThinkPad P16 Gen 3 (Ubuntu 22.04)
sleep 3
# Wait for PipeWire to be ready
for i in $(seq 1 30); do
if pactl info > /dev/null 2>&1; then
break
fi
sleep 1
done
# Get sof-soundwire card name
CARD="alsa_card.pci-0000_80_1f.3-platform-sof_sdw"
# Switch to pro-audio profile
pactl set-card-profile "$CARD" pro-audio 2>/dev/null
sleep 1
# Enable cs42l43 speaker digital switch
amixer -c 1 cset numid=39 on,on > /dev/null 2>&1
# Set speaker (pro-output-2) as default sink
SPEAKER_NODE=$(pactl list sinks short 2>/dev/null | grep "pro-output-2" | awk '{print $1}')
if [ -n "$SPEAKER_NODE" ]; then
wpctl set-default "$SPEAKER_NODE" 2>/dev/null
fi
# Set DMIC as default source
MIC_NODE=$(pactl list sources short 2>/dev/null | grep "pro-input" | head -1 | awk '{print $1}')
if [ -n "$MIC_NODE" ]; then
wpctl set-default "$MIC_NODE" 2>/dev/null
fi
chmod +x ~/.local/bin/fix-audio.sh
3. autostart エントリ (~/.config/autostart/fix-audio.desktop)
[Desktop Entry]
Type=Application
Name=Fix Audio Profile
Exec=/home/$USER/.local/bin/fix-audio.sh
X-GNOME-Autostart-enabled=true
X-GNOME-Autostart-Delay=5
Hidden=false
NoDisplay=true
Comment=Switch sof-soundwire to pro-audio profile for speaker output
問題4 Bluetooth が ON にならない
症状
- GNOME の設定や通知バーから Bluetooth をオンにできない
-
bluetoothctl showを実行するとNo default controller availableと表示される - rfkill では soft/hard blocked いずれも
noになっており、ブロックされていない
$ rfkill list all
1: tpacpi_bluetooth_sw: Bluetooth
Soft blocked: no
Hard blocked: no
3: hci0: Bluetooth
Soft blocked: no
Hard blocked: no
原因
カーネルログ(journalctl -k)を確認すると、以下のエラーが見つかる:
Bluetooth: hci0: Found device firmware: intel/ibt-0291-0291.sfi
Bluetooth: hci0: Firmware loaded in 1856513 usecs
Bluetooth: hci0: Device booted in 51745 usecs
Bluetooth: hci0: dsbr: enable: 0x01 value: 0x0f
Bluetooth: hci0: Failed to send dsbr command (-38)
-38 = ENOSYS(Function not implemented)
Ubuntu 22.04 の linux-firmware パッケージ(バージョン 20220329.git681281e4-0ubuntu3.41)に含まれる Intel Bluetooth ファームウェア ibt-0291-0291.sfi が古く、カーネルが要求する dsbr(Dynamic Secure Boot Reset)コマンド に対応していない。
dsbr コマンドが失敗すると、カーネルのドライバ(btusb)が初期化を中断してしまい、hci0 デバイスが DOWN のまま使えない状態になる。
解決策:Intel Bluetooth ファームウェアを最新版に更新する
Ubuntu 22.04 の公式リポジトリには新しいファームウェアが提供されていないため、Linux カーネルの upstream linux-firmware リポジトリから直接取得する。
手順
# 1. linux-firmware リポジトリをクローン(必要なファイルだけ取得)
git clone --depth 1 git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git /tmp/linux-firmware
# 2. 既存のファームウェアをバックアップ
sudo cp /lib/firmware/intel/ibt-0291-0291.sfi /lib/firmware/intel/ibt-0291-0291.sfi.bak
sudo cp /lib/firmware/intel/ibt-0291-0291.ddc /lib/firmware/intel/ibt-0291-0291.ddc.bak
# 3. 新しいファームウェアを配置
sudo cp /tmp/linux-firmware/intel/ibt-0291-0291.sfi /lib/firmware/intel/
sudo cp /tmp/linux-firmware/intel/ibt-0291-0291.ddc /lib/firmware/intel/
# 4. btusb モジュールを再ロード
sudo modprobe -r btusb && sudo modprobe btusb
# 5. Bluetooth サービスを再起動
sudo systemctl restart bluetooth
# 6. 動作確認
sleep 5 && bluetoothctl show
bluetoothctl show でコントローラー情報が表示されれば成功。
補足
-
ibt-0291-0291は Intel AX211 向けのファームウェアファイル名 - この問題は Ubuntu 22.04 LTS + 新しめのカーネル の組み合わせで発生しやすい(linux-firmware が古い)
- Ubuntu 24.04 LTS ではより新しい linux-firmware が標準提供されているため、この問題は起きにくい
- Liquorix 以外の mainline 系カーネル(HWE カーネルなど)でも同様に発生する可能性がある
参考:診断コマンド
# rfkill でブロック状態を確認
rfkill list all
# Bluetooth サービスのログ確認
journalctl -u bluetooth --no-pager | tail -30
# カーネルの Bluetooth ログ確認
journalctl -k --no-pager | grep -i -E "bluetooth|hci0|btusb" | tail -40
# USB デバイスの確認
lsusb | grep -i intel
問題5: ハードウェアアクセラレーションが効かない
症状
- デスクトップ全体がカクカクする / 重い
- GNOME が「ハードウェアアクセラレーションなし」で動作
- Chrome、Brave 等ブラウザも GPU 非使用
原因
Mesa 23.2.1 が Intel Meteor Lake (device ID: 0x7d67) を未サポート。
- Intel Meteor Lake GPU は 2023年12月リリース
- Mesa 23.2.1 は 2023年10月リリース → MTL のデバイス ID が間に合っていない
- Ubuntu 22.04 公式リポジトリの Mesa は 23.2.1 で止まっており、更新 PPA も全滅
カーネル・NVIDIA ドライバ自体は正常。問題はユーザースペースの Mesa のみ。
Xorg ログ(~/.local/share/xorg/Xorg.1.log)に以下が出る:
MESA: warning: Driver does not support the 0x7d67 PCI ID. ← 核心
(II) modeset(0): Refusing to try glamor on llvmpipe
(II) modeset(0): glamor initialization failed
(II) GLX: Initialized DRISWRAST GL provider for screen 0
journalctl でも全アプリ(Chrome、Brave 等)から同じ警告が出る:
gnome-session-check-accelerated: GL Helper exited with code 512
libEGL warning: DRI3: Screen seems not DRI3 capable
確認コマンド:
# Mesa が llvmpipe(ソフトウェア)で動いているか確認
DISPLAY=:1 DRI_PRIME=pci-0000_00_02_0 glxinfo -B 2>&1 | head -10
# → Device: llvmpipe / Accelerated: no なら問題あり
# Mesa 警告をまとめて確認
journalctl -b 0 --no-pager | grep -i "does not support\|llvmpipe\|glamor"
試みた解決策(失敗)
Ubuntu 22.04 (Jammy) 向け Mesa 更新 PPA は 2025〜2026 年時点で両方停止中:
| PPA | 状態 |
|---|---|
ppa:kisak/kisak-mesa |
Jammy 向けパッケージが空(0バイト) |
ppa:oibaf/graphics-drivers |
「2026 UPDATE: ppa is currently suspended」停止中 |
採用した解決策: NVIDIA モードへ切替
sudo prime-select nvidia
sudo reboot
Intel iGPU を描画から切り離し、NVIDIA RTX PRO 5000 が全レンダリングを担当。
確認コマンド(再起動後):
prime-select query # → nvidia
glxinfo -B # → OpenGL renderer: NVIDIA RTX PRO 5000...
デメリット: 消費電力増加(NVIDIA 常時 ON)
根本的な解決策(将来向け)
Mesa 24.x は Intel Meteor Lake (0x7d67) を正式サポート。Ubuntu 24.04 LTS には Mesa 24.x が同梱されているため、アップグレードで完全解決する。
アップグレード後の理想構成:
prime-select on-demand
→ Intel iGPU (iris ドライバ) がデスクトップ描画(省電力)
→ NVIDIA が重い処理のみ offload (DRI_PRIME=1 など)
まとめ
| 問題 | 原因 | 解決策 |
|---|---|---|
| NVIDIA GPU 認識されない | nouveau が Blackwell 世代非対応 |
nvidia-driver-590-open インストール |
| i915 GSC ファームウェアエラー | linux-firmware が古い | kernel.org から最新版をダウンロード |
| オーディオ Dummy Output |
dsp_driver=1 で SOF 無効 |
GRUB で dsp_driver=3 に変更 |
| スピーカーから音が出ない | UCM Syntax 7 / libasound2 非互換 | pro-audio プロファイル + autostart スクリプト |
| ハードウェアアクセラレーション無効 | Mesa 23.2.1 が MTL (0x7d67) 未サポート |
prime-select nvidia で NVIDIA モードに切替 |
今後の改善
Ubuntu 22.04 の libasound2 が 1.2.10 以上にアップデートされれば (または Ubuntu 24.04 以降にアップグレードすれば)、UCM Syntax 7 が正常にパースされ、autostart スクリプトなしで HiFi プロファイルが自動的に適用される。
Ubuntu 24.04 では、上記のような複雑な設定などをせずに、初回起動直後に、スピーカーから音が出たのを確認した。
また、Ubuntu 24.04 への移行で Mesa 24.x が導入されれば、Intel iGPU のハードウェアアクセラレーションも正常動作し、PRIME on-demand による省電力構成が実現できる。