之前使用樹莓派Pi 3時,若想不接螢幕就直接從遠端用VNC連線時,首先點選主選單[偏好設定]-[Raspberry Pi設定]後切換至[介面]頁面並勾選[VNC],再切回[系統]頁面強制指定[解析度],關機拔掉HDMI插頭從新開機,等待約一分鐘系統已順利啟動後,便可以VNC以指定螢幕解析度連線。
但到了樹莓派Pi 4時,舊的方法已不管用了,且強制指定解析度功能也從[系統]頁面被移除了。若直接勾選[介面]頁面下的[VNC]後,關機後再拔掉HDMI插頭,開機進入VNC連線後竟然畫面出不來,一片黑,原來是沒設解析度(採用預設解析度)造成。
為解決這個問題只好重新接上螢幕,開機完成後直接進到命令列模式下達 sudo raspi-config,進到[Advanced Options]-[Resolution]設定解析度。本想關機後再拔掉HDMI插頭,重新開機進入VNC連線後就能正常,但奇怪的事發生了。螢幕是以1024x768顯示而不是指定的解析度。
經過一番爬文後得知是因Pi 4為使用GPU加速所在 /boot/config.txt 中設定dtoverlay=vc4-fkms-v3d 造成。有些網友說改 /boot/config.txt 中HDMI相關設定就可以,結果試了很多不同的設定方式都沒成功,VNC連線永遠螢幕解析度都是1024x768。
幾經波折終於找到一個方式可以解決,就是利用cvt查詢指定螢幕解析度的相關設定值,再用xrandr 新增(--newmode, --addmode)一個新的螢幕解析度,再強迫HDMI-1切換(-s)螢幕解析度。為了方便每次開機後能重新設定,於是新增了一個批次檔(set_res.sh)在桌面,執行後便可切換到想要的解析度,以下就是程式內容。
cvt 1280 720 xrandr --newmode "1280x720_60.00" 74.50 1280 1344 1472 1664 720 723 728 748 -hsync +vsync xrandr --addmode HDMI-1 "1280x720_60.00" xrandr -s 1280x720_60.00