![見出し画像](https://assets.st-note.com/production/uploads/images/158926664/rectangle_large_type_2_319e027472b09cb0e80627c626cecd71.png?width=1200)
(6)RaspberryPiとタッチディスプレイで自動起動LocalUIFlowサーバーを作る - ディスプレイ廃止とDNS
ディスプレイの廃止
LocalUIFlowはGUIソフトです。したがって、本来は操作が必要なのですが、(3)で、操作を自動化して自動起動するようにしました。
操作自動化によって、電源を入れさえすれば操作なしで、LocalUIFlow起動は完了するようになったので、こうなると、タッチディスプレイ、いらないのでは?となるのですが、残念ながら、Raspberry Piは、OS起動時にディスプレイの有無を検出して、ないと起動しません。
ただ、これも、設定でディスプレイの自動検出をしないようにすることができるので、そうすればディスプレイ無しでGUIでも起動できるようになり、ディスプレイは不要となります。
タッチディスプレイなしだと現在の状態を把握したり、終了処理をするのが困難になりますが、現在の状態の把握はともかく、終了処理は不正終了(電源ブッチ)するので、問題ありません(本当は駄目です)。
参考にしたのは、以下のサイトです。
![](https://assets.st-note.com/img/1729523694-nrjLx4lD3zUPu70MohQSiIOa.png?width=1200)
参考にしたサイトで触れられている「/boot/firmware/cmdline.txt」は、Raspberry Pi OS がbookwormでないとファイル自体が存在しないようなので、私のbusterではだめでした。(なぜbusterなのかというと、タッチディスプレイのメーカーが提供しているイメージがそれだからです。こんなところで引っかかってくるとは…)
bookwormとかbusterとかは、Raspberry Pi OSのバージョンです。Raspberry Pi OSはDebianベースなので、Debianのバージョン履歴に従います。
改めて調べたところ、busterではこのようにするらしいです。
![](https://assets.st-note.com/img/1729523829-PwLmYN8xEvRyjct2HKA5ZUM6.png?width=1200)
ということで、やった内容はこちら。
まず、
sudo nano /boot/config.txt
で、config.txtを開き
#hdmi_force_hotplug=1
のコメントを外して
hdmi_force_hotplug=1
「CTRL + o」で設定を保存し、「CTRL + x」でnanoを終了。
その後、上書きし再起動。
これで、ディスプレイが不要となりました。
…となると、そもそもタッチディスプレイのメーカーの用意したOSイメージにRaspberryPi OSのバージョンも引っ張られてたので、どうせ最後にディスプレイを外すように設定するなら、最初からディスプレイなしでセットアップすればよいかもしれません。そうすると、buster(2019)ベースからbookworm(2023)ベースにできるかな…。まぁ、ローカルでの運用なので、バージョンが最新でなくてもそれほど問題はないですが。
(5)までの課題
運用していく上で気になった部分がもう一つ。
LocalUIFlowを使うにあたっては、Serverの項目についてはM5Burnerを使用してLocalUIFlowのIPアドレスを直接設定する必要があります。
![](https://assets.st-note.com/img/1729599540-4KyVwhR6n0xkflt1dILWuHap.png?width=1200)
これにより、LocalUIFlowサーバーに実機は接続しに行くことになります。
![](https://assets.st-note.com/img/1729599991-WbjJSRgACty5XeYa1vofQ0ZO.png?width=1200)
この接続サーバーは、SetupのServerSelectで変更することができますが、M5Burnerで設定したアドレスについては記録されていません。
![](https://assets.st-note.com/img/1729600162-9Ez7mC5oakAqwM0BThXW8eOS.png?width=1200)
例えば、Wi-Fi設定などは保存されるので、実機においてもSetupから後で選ぶことができます。
![](https://assets.st-note.com/img/1729600318-eJnDdY95jkZKEgPy6HApSIml.png?width=1200)
ただ、サーバー選択が、LocalUIFlowのサーバーになっている状態で、インターネット上のUIFlowに接続したいような場合には、いくら、Wi-Fiをインターネットに接続できるものに変更したとしても、サーバーはローカルサーバーにつなぎにいこうとします。
したがって、インターネット上のUIFlowを利用したい場合は、ServerSelectからインターネット上のUIFlowサーバーである「flow.m5stack.com」を選ぶのですが…
![](https://assets.st-note.com/img/1729604008-4htMYoIlSfsNnwLvkAK1mOFH.png?width=1200)
そうすると、実機からでは、LocalUIFlowのサーバーのIPアドレスに戻すことはできないので、再び母艦PCと接続してM5Burnerで設定するしかありません。
できれば、「flow.m5stack.com」を、LocalUIFlowのときにはLocalUIFlowのサーバーのIPアドレスに接続し、インターネットに接続できるWi-Fiでは、そのままアクセスできるようにしたいわけです。
「そんなことできるわけ…」と思われるかもしれませんが、それが、できます。
DNSサーバーの導入
ということで、Raspberry PiにDNSサーバーを導入して、本体の設定(Setup)のServerがflow.m5stack.comのままでも192.168.0.253と認識するようにしました。
DNSサーバーを導入することの良い点は、LocalUIFlowのときにはflow.m5stack.comを192.168.0.253と認識し、他のWi-Fiに繋いだときはしっかりflow.m5stack.comに繋がるというところ。
これで、本体設定をflow.m5stack.comに固定できます。
Dnsmasqを設定
参考サイトは以下。
まずはDnsmasq をインストールします。
sudo apt install dnsmasq -y
設定ファイル(/etc/dnsmasq.conf)を開きます。
sudo nano /etc/dnsmasq.conf
ホスト名の検索時は、FQDN(「Fully Qualified Domain Name」「完全修飾ドメイン名」)にドメイン名を含まない問い合わせは上位のDNSサーバに転送しない設定を有効にします。
#domain-needed
の#を外し、
domain-needed
にします。同様に、
#bogus-priv
の#も外します。これによりプライベートIPアドレスを上位のDNSサーバに転送しないようになります。
bogus-priv
上位のDNSサーバーを指定します。たとえばGoogleの提供しているDNSサーバなら以下のようにします。
#server=/localnet/192.168.0.1
server=8.8.8.8
server=8.8.4.4
DNSフィルタリングをします
#address=/www.double-click.net/127.0.0.1
の行の下に
address=/flow.m5stack.com/192.168.0.253
を追加します。以上で設定は終了です。
「CTRL + o」で設定を保存して「CTRL + x」でnanoを終了します。
最後に、Dnsmasqを再起動します。
sudo systemctl restart dnsmasq
次に、ルーターの方の設定です。
DNSを有効にするため、設定を変更します。
![](https://assets.st-note.com/img/1729524819-WC3ox7jkSygONe5sQq6uDHXi.png?width=1200)
DHCPサーバーのプライマリDNSの欄をRaspberry Piのアドレスにします。
これで、このWi-FiルーターのDHCPにおいては、Raspberry PiのDNSを参照するようになります。(インターネットに接続された)別のWi-Fiに接続したときは、Raspberry PiのDNSは参照しないので、正しいUIFlowに繋がります。