2024年 10月 の投稿一覧

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 は比較的珍しいため、モニタに応じて適切な値を設定する)

Linux: イメージファイルをドライブに焼きこむ

コマンド備忘録

OS イメージなどの .img ファイルが手元にあり、それを SD カードに焼きこむ方法。

デバイスの検出

SD カードをリーダー/ライター等に差し込むと、カーネルがイベントを記録する。 dmesg コマンドでイベントログを見れるので、ログ末尾のほうに記録されているはずのデバイス割り当てログを確認してデバイスを調べる。

$ sudo dmesg
[20466.141180] sd 0:0:0:0: [sda] 62333952 512-byte logical blocks: (31.9 GB/29.7 GiB)
[20466.143163] sda: detected capacity change from 0 to 62333952
[20466.144469]  sda: sda1 sda2

ドライブは、マシンから検出された順に sda, sdb, sdc … のようなアルファベットの順が付与されたドライブ名が割り当てられる。また、そのドライブに複数のパーティションがある場合、 sda1, sda2, … のように数字が振られてパーティションが区別される。

この段階で /dev を確認すると、検出されたドライブが存在することを確認できる。

デバイス詳細の閲覧

fdisk コマンドを利用して、デバイスの詳細について確認できる。

$ sudo fdisk -l /dev/sda
Disk /dev/sda: 8.21 GiB, 8810098688 bytes, 17207224 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x92a5a1c0

Device       Boot   Start      End  Sectors  Size Id Type
/dev/sda1 *       2048  1050623  1048576  512M  c W95 FAT32 (LBA)
/dev/sda2      1050624 17207223 16156600  7.7G 83 Linux

イメージの焼きこみ

dd コマンドを使用して、イメージファイルをデバイスに書き込む。

書き込む際、既存のファイルシステムに対して書き込むわけではない (すでにあるものを破壊してデバイス先頭から書き込む) ので、デバイスをマウントする必要はない。パーティションも無視する。
(書き込み先のデータはすべてロストする)

$ sudo dd if=sd-blob-b01.img of=/dev/sda bs=8M status=progress
8810098688 bytes (8.8 GB, 8.2 GiB) copied, 1694 s, 5.2 MB/s
1050+1 records in
1050+1 records out
8810098688 bytes (8.8 GB, 8.2 GiB) copied, 1693.8 s, 5.2 MB/s