将树莓派的HDMI控制台输出定制为仪表盘使用
由于Raspberry Pi 4可以创建Minecraft服务器,我们举办了一个Minecraft比赛。
为了在比赛中使用,我尝试制作了一个简易的电子竞技仪表板。

大会中,我们将使用Zoom共享音频/摄像头一边玩Minecraft。
我正在将四个HDMI输出合成为一个Zoom客户端的摄像头输入。
-
- ローカル会場でのプレイ画面1
-
- ローカル会場でのプレイ画面2
-
- イベントタイトル ( 今回は connpass イベントサイトの表示 )
- Raspberry Pi サーバのコンソール出力
处理HDMI合成和摄像头输入的操作是通过使用外部设备硬件来完成的。
画面合成
合成用に使用するデバイス : HDMI4入力1出力画面分割切替器 (EHD-606Y ELEVIEW)



これを使うことで、Zoom のカメラ入力として使うことができます。Zoom のカメラのピン留めを工夫して、表題のような画面を得ることができます。
畫面解析度
ローカル会場でプレイしているマシンも、配信を行っているマシンもゲーミングPCなどではぜんぜんなく、リースアップ中古PCのX230。
https://www.facebook.com/yoshimasa.kawano.52/posts/2988796321189793
解像度も720p(1366×768)のものを4in1している。画面分割切替器ELEVIEW EHD-606Y は1080p対応しているが、4分割した1画面は960×540になり、更に HDMIビデオキャプチャー ShuOne-323 経由で Zoom カメラとして扱うと解像度は更に半分ぐらいに落ちる感じ。

ゲーム画面やWebブラウザの画面はなんとなくわかるけれども、Raspberry Pi のコンソール出力は工夫する必要があった。
树莓派控制台输出的调整
环境
-
- 2020-02-13-raspbian-buster-lite
- Raspberry Pi 4 Model B/4GB
调整分辨率
最初は Raspberry Pi の config.txt を設定して320×200ぐらいに画面解像度を設定すればいいかなと思ったけれど、そううまくはいかなかった。
画面分割切替器ELEVIEW EHD-606Y は 入力を 720p ないし 1080pに変換しているぽく、ある程度ならスケーリングしてくれるがあまり低い解像度だと額縁表示になってしまう。
在我尝试过的一些中,能够呈现框架显示的最低分辨率为1280×768,刷新率为60 Hz。
要进行这个设置,需要在 config.txt 文件中进行以下配置。
hdmi_group=2
hdmi_mode=23
这个值在https://elinux.org/RPiconfig的「如果hdmi_group=2(DMT)则有效」部分中有提及。请注意,这些值在「如果hdmi_group=1(CEA)则无效」中并不适用。
调整文字大小
由于上面设置的分辨率是720p,所以字体会变得模糊。为了解决这个问题,我们需要更改控制台的字体大小。
编辑/etc/default/console-setup
FONTFACE="Terminus"
FONTSIZE="32x16"
添加
これで 1280×768 において 80×24文字表示となります。
480×288解像度での12ドットフォントを使っての80×24文字表示に相当しますので、Zoomカメラ入力経由してもなんとか雰囲気で読めるようになります。
其他的一些细节设置
我們將始終輸出到HDMI。
オペレーションミスを防ぐため、HDMI出力を常にONにしておきます。
/boot/config.txt 的中文表述:启动配置文件.txt
hdmi_force_hotplug=1
为了以防万一,您也可以将音频输出设置为HDMI。
# Enable audio (loads snd_bcm2835)
dtparam=audio=on
屏幕关闭的抑制
树莓派(Raspberry Pi)的 RASPBIAN LITE,如果不处理,是否会导致显示消失?我记得好像做了一些设置来抑制,但现在忘记了…
自动登录设置
树莓派需要通过 ssh 进行操作,无需连接键盘。然而,为了获得 HDMI 控制台输出,必须先登录。
在raspi-config的启动选项中进行自动登录的设置。
自動启动screen会话
为了通过HDMI控制台输出显示在物理控制台上,我在.bashrc文件中设置了自动启动screen会话来操作通过ssh进行的内容。
螢幕安裝
$ sudo apt install screen
请在 ~/.bashrc 文件的末尾添加以下内容。
TTY=$(tty)
if [ $SHLVL = 1 ];then
if [ "${TTY}" = "/dev/tty1" ]; then
screen -S hogehoge
fi
fi
只是简单地写上”screen”,在登录时会再次调用”screen”,从而导致无限循环,因此我们通过引用”$SHLVL”来确保它仅在第一次启动shell时有效。此外,我们还判断是否正在使用/dev/pts/0来确定仅在控制台自动启动时应用该设置。
另外,以下的脚本是为了在屏幕上显示 IP 地址而写入 /etc/rc.local 的,但由于屏幕启动后显示会消失,所以请将其写在 .bashrc 的末尾。
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi