Raspberry Pi 3B の画面解像度変更 (Ubuntu 24.04)

部屋の隅で埃をかぶっていた raspberry pi を取り出してきてサブのマシンとして利用しようとしたときのセットアップメモ。
Raspberry Pi に接続したモニタが 10 インチほどの小ささで画面解像度が 1920×1280 の大解像度だったので、Ubuntu Server の CLI をそのまま表示すると文字がコメ粒ほどの大きさにしかならず非常に見づらかったので、設定を変更した。

ブート中の解像度の変更

Ubuntu 24.04 Server (rasberry pi imager 経由でインストール) では、 /boot/firmware/config.txt を修正することで、起動直後の表示に変化があった。

# /boot/firmware/config.txt
# 末尾に追記
# 設定値は接続しているディスプレイ環境に応じて適切に設定すること
# https://elinux.org/RPiconfig#Video_mode_options

[all]
hdmi_group=2
hdmi_mode=16
設定値詳細 (抜粋)
hdmi_group=1   CEA
hdmi_group=2   DMT

These values are valid if hdmi_group=2 (DMT)
Note: according to http://www.raspberrypi.org/phpBB3/viewtopic.php?f=26&t=20155&p=195417&hilit=2560x1600#p195443 
there is a pixel clock limit which means the highest supported mode is 1920x1200 @60 Hz with reduced blanking.
hdmi_mode=1    640x350    85 Hz
hdmi_mode=2    640x400    85 Hz
hdmi_mode=3    720x400    85 Hz
hdmi_mode=4    640x480    60 Hz
hdmi_mode=5    640x480    72 Hz
hdmi_mode=6    640x480    75 Hz
hdmi_mode=7    640x480    85 Hz
hdmi_mode=8    800x600    56 Hz
hdmi_mode=9    800x600    60 Hz
hdmi_mode=10   800x600    72 Hz
hdmi_mode=11   800x600    75 Hz
hdmi_mode=12   800x600    85 Hz
hdmi_mode=13   800x600   120 Hz
hdmi_mode=14   848x480    60 Hz
hdmi_mode=15   1024x768   43 Hz  DO NOT USE
hdmi_mode=16   1024x768   60 Hz
hdmi_mode=17   1024x768   70 Hz
hdmi_mode=18   1024x768   75 Hz
hdmi_mode=19   1024x768   85 Hz
hdmi_mode=20   1024x768  120 Hz
hdmi_mode=21   1152x864   75 Hz
hdmi_mode=22   1280x768          Reduced blanking
hdmi_mode=23   1280x768   60 Hz
hdmi_mode=24   1280x768   75 Hz
hdmi_mode=25   1280x768   85 Hz
hdmi_mode=26   1280x768  120 Hz  Reduced blanking
hdmi_mode=27   1280x800          Reduced blanking
hdmi_mode=28   1280x800   60 Hz  
hdmi_mode=29   1280x800   75 Hz  
hdmi_mode=30   1280x800   85 Hz  
hdmi_mode=31   1280x800  120 Hz  Reduced blanking
hdmi_mode=32   1280x960   60 Hz  
hdmi_mode=33   1280x960   85 Hz  
hdmi_mode=34   1280x960  120 Hz  Reduced blanking
hdmi_mode=35   1280x1024  60 Hz  
hdmi_mode=36   1280x1024  75 Hz  
hdmi_mode=37   1280x1024  85 Hz  
hdmi_mode=38   1280x1024 120 Hz  Reduced blanking
hdmi_mode=39   1360x768   60 Hz  
hdmi_mode=40   1360x768  120 Hz  Reduced blanking
hdmi_mode=41   1400x1050         Reduced blanking
hdmi_mode=42   1400x1050  60 Hz  
hdmi_mode=43   1400x1050  75 Hz  
hdmi_mode=44   1400x1050  85 Hz  
hdmi_mode=45   1400x1050 120 Hz  Reduced blanking
hdmi_mode=46   1440x900          Reduced blanking
hdmi_mode=47   1440x900   60 Hz  
hdmi_mode=48   1440x900   75 Hz  
hdmi_mode=49   1440x900   85 Hz  
hdmi_mode=50   1440x900  120 Hz  Reduced blanking
hdmi_mode=51   1600x1200  60 Hz  
hdmi_mode=52   1600x1200  65 Hz  
hdmi_mode=53   1600x1200  70 Hz  
hdmi_mode=54   1600x1200  75 Hz  
hdmi_mode=55   1600x1200  85 Hz  
hdmi_mode=56   1600x1200 120 Hz  Reduced blanking
hdmi_mode=57   1680x1050         Reduced blanking
hdmi_mode=58   1680x1050  60 Hz  
hdmi_mode=59   1680x1050  75 Hz  
hdmi_mode=60   1680x1050  85 Hz  
hdmi_mode=61   1680x1050 120 Hz  Reduced blanking
hdmi_mode=62   1792x1344  60 Hz  
hdmi_mode=63   1792x1344  75 Hz  
hdmi_mode=64   1792x1344 120 Hz  Reduced blanking
hdmi_mode=65   1856x1392  60 Hz  
hdmi_mode=66   1856x1392  75 Hz  
hdmi_mode=67   1856x1392 120 Hz  Reduced blanking
hdmi_mode=68   1920x1200         Reduced blanking
hdmi_mode=69   1920x1200  60 Hz  
hdmi_mode=70   1920x1200  75 Hz  
hdmi_mode=71   1920x1200  85 Hz  
hdmi_mode=72   1920x1200 120 Hz  Reduced blanking
hdmi_mode=73   1920x1440  60 Hz  
hdmi_mode=74   1920x1440  75 Hz  
hdmi_mode=75   1920x1440 120 Hz  Reduced blanking
hdmi_mode=76   2560x1600         Reduced blanking
hdmi_mode=77   2560x1600  60 Hz  
hdmi_mode=78   2560x1600  75 Hz  
hdmi_mode=79   2560x1600  85 Hz  
hdmi_mode=80   2560x1600 120 Hz  Reduced blanking
hdmi_mode=81   1366x768   60 Hz  
hdmi_mode=82   1080p      60 Hz  
hdmi_mode=83   1600x900          Reduced blanking
hdmi_mode=84   2048x1152         Reduced blanking
hdmi_mode=85   720p       60 Hz  
hdmi_mode=86   1366x768          Reduced blanking

確かに変化はあったのだが、端末の電源を付けた直後しか設定が適用されておらず、起動中に元の設定に戻るような挙動を示してしまい、最終的に効果はなかった。
(電源投入直後から起動シーケンスの途中までは設定が適用されているが、途中で画面が暗転した後にディスプレイの最大解像度に戻ってしまう)

どうやら、電源投入後に HDMI インタフェースを通じて利用できる解像度を raspberry pi とディスプレイがネゴシエーションするようで、コンピュータ側で指定していない場合は利用可能な中で自動的に設定が選ばれる模様。(いったん初期設定で画面出力しつつ、起動中にディスプレイ側に合わせて解像度を再設定する)

この現象は、 /boot/firmware/cmdline.txt に以下の設定を追加で行うことで解消できた。(video=HDMI-A-1:1080x720M@60 を追記した)
https://www.raspberrypi.com/documentation/computers/configuration.html#set-the-kms-display-mode

video=HDMI-A-1:1080x720M@60 console=serial0,115200 multipath=off dwc_otg.lpm_enable=0 console=tty1 root=LABEL=writable rootfstype=ext4 rootwait fixrtc 

ディスプレイ自体の解像度が 1920×1280 (3:2) だったため、目に優しい文字サイズを確保しつつ縦横比を維持した 1080×720 に設定した。(アスペクト比 3:2 は比較的珍しいため、モニタに応じて適切な値を設定する)