Raspberry Piで出力解像度を無理やり固定する最短手順
はじめに
Raspberry Pi を HDMI でモニターに接続したのに 1024×768 など低解像度になってしまい、設定にも 1920×1080 が出てこないことがあります。
Raspberry Pi OS Bookworm 以降は表示系が KMS(Kernel Mode Setting)で統一され、/boot/firmware/cmdline.txt の video= 指定が非常に強力に働きます。これを使って EDID が不安定でも 1080p を確実に強制する手順をまとめます。
備考: Bookworm 以降の実体ファイルは
/boot/firmware/config.txt。/boot/config.txtは案内用ダミーです。
TL;DR(最短3ステップ)
-
どの HDMI ポートが接続中か確認
for f in /sys/class/drm/card*-HDMI-A-*; do echo $f; cat $f/status; done...HDMI-A-1がconnected→ HDMI-A-1/...HDMI-A-2がconnected→ HDMI-A-2。 -
/boot/firmware/cmdline.txtの末尾にvideo=...を追記(※1行ファイル)# バックアップ(不安であれば一応) sudo cp /boot/firmware/cmdline.txt /boot/firmware/cmdline.txt.bak # 例: HDMI-A-1 に挿している場合(末尾に 半角スペース+追記) sudo sed -i 's/$/ video=HDMI-A-1:1920x1080@60/' /boot/firmware/cmdline.txt # HDMI-A-2 に挿しているなら A-2 に置換 sudo reboot -
反映確認(GUI不要)
# 利用可能モードに 1920x1080 があるか cat /sys/class/drm/*-HDMI-A-1/modes # A-2 の場合は A-2 # 実効解像度("1920,1080" ならOK) sudo cat /sys/class/graphics/fb0/virtual_size
仕組み(なぜ効く?)
- EDID はモニターの自己申告。壊れていたりケーブル相性が悪いと Pi が低解像度にフォールバック。
-
KMS 環境では カーネル引数
video=が最優先で、EDID を無視して解像度を決め打ちできる。 - 旧来の
config.txt(hdmi_group/hdmi_mode)は KMS では優先度が低い/無視されることがある。
手順詳細
1. 接続ポートの同定
for f in /sys/class/drm/card*-HDMI-A-*; do echo $f; cat $f/status; done
-
...HDMI-A-1がconnected→video=HDMI-A-1:1920x1080@60 -
...HDMI-A-2がconnected→video=HDMI-A-2:1920x1080@60
2. cmdline.txt に video= を追記
**/boot/firmware/cmdline.txt は 1 行のみ。必ず「末尾に半角スペース+追記」**します。
sudo cp /boot/firmware/cmdline.txt /boot/firmware/cmdline.txt.bak
sudo sed -i 's/$/ video=HDMI-A-1:1920x1080@60/' /boot/firmware/cmdline.txt
sudo reboot
よくあるミス
- 改行を入れて複数行にしてしまう
HDMIのスペルミス(HDMlなど)- 実際は A-2 に挿しているのに A-1 を指定
編集例(概念図): 行末に video=... が付く形
console=serial0,115200 ... rootwait quiet splash video=HDMI-A-1:1920x1080@60
3. 反映確認
# 候補モード(EDIDが読めていれば一覧が出る)
cat /sys/class/drm/*-HDMI-A-1/modes
# 実効フレームバッファサイズ("1920,1080" を期待)
sudo cat /sys/class/graphics/fb0/virtual_size
# ついでに EDID サイズ確認(0 バイトなら取得失敗)
sudo cat /sys/class/drm/*-HDMI-A-1/edid | wc -c
GUIでの確認・調整(必要に応じて)
Bookworm の既定は Wayland。X11 前提の xrandr は基本使えません。代わりに wlr-randr を使うと便利(Pi 本体のターミナルで実行推奨)。
sudo apt update
sudo apt install wlr-randr
wlr-randr
X11 セッションなら
xrandrが使えますが、SSH 経由ではDISPLAY=:0などの指定が必要です。
参考:config.txt を使う旧来のやり方(KMSでは非推奨)
KMS 環境では 優先度が低い/無視されることがありますが、念のため PC モニター向け設定を載せます。
# /boot/firmware/config.txt(最下部へ)
hdmi_force_hotplug=1 # EDIDがダメでもHDMIを強制
hdmi_group=2 # DMT(PCモニター向け)
hdmi_mode=82 # 1920x1080 @ 60Hz
テレビ向けは
hdmi_group=1/hdmi_mode=16(1080p60)。
ただし 今回の主役はcmdline.txtのvideo=です。
トラブルシューティング
-
何も映らない/
modesに 1920×1080 が無い- HDMI ケーブルを交換(ハイスピード以上推奨)
- もう一方のポートに挿し替え →
video=HDMI-A-2:1920x1080@60に変更 - モニターの入力を「自動検出/PC向け」に
- カーネルログ:
dmesg | grep -i -e hdmi -e drm
-
EDID が 0 バイト
- 物理層(ケーブル/変換アダプタ/延長アダプタ)問題が濃厚。できるだけ直結で。
-
75Hz など別リフレッシュを使いたい
video=HDMI-A-1:1920x1080@75(モニターが対応していれば可)
-
マルチディスプレイで個別指定
video=HDMI-A-1:1920x1080@60 video=HDMI-A-2:1280x1024@60
元に戻す(自動認識へ)
# バックアップから戻す
sudo cp /boot/firmware/cmdline.txt.bak /boot/firmware/cmdline.txt
# もしくは 1行末尾の " video=HDMI-A-1:1920x1080@60" を削除
sudo nano /boot/firmware/cmdline.txt
sudo reboot
config.txt に hdmi_group/mode を残していた場合は、混乱回避のため削除しておくのが無難です。
まとめ
-
Bookworm/KMS 時代の最短解は
cmdline.txtのvideo=指定。 -
/sys/class/drm/.../statusで接続ポートを確認 →video=ポート:1920x1080@60を追記 → 再起動 → 反映確認。 - これで EDID が不安定でも FHD を確実に固定できます。
Discussion