Flutter + Mir Kiosk + RasPi + VNC

ここしばらく、Google のFlutterについて調べています。

FlutterはプラットフォームをまたがるGUI開発フレームワークで、iOS/Androidから始まり、WEBアプリケーションへと展開し、現在はDeskTopアプリケーションまで手を広げています。

マルチプラットフォームのGUI開発環境については20年以上前からアプローチがあったと思いますが、それぞれのプラットフォームの機能を使いきれないといった理由でしょうか、どうも普及した感じではありませんでした。

それがここ数年はElectronをはじめとするWEB技術をレンダラーに使ったGUIが大流行りです。流行り過ぎて何から手を付けたらいいのかわかりにくい状況です。WEBの技術を使ったマルチプラットフォーム・フレームワークもやはりネイティブなOSの機能を活かし切れていないはずですが、それはどうやらさほど問題になっていないようです。背景にはスマホをフロントエンドとするビジネス・サービスの圧倒的な拡大があるのではないかと思っています。きっと忙しすぎてOSの違いなんかをいちいち活用していられないのでしょう。

FlutterはGoogle肝いりということで注目を浴びていましたが、根底にあるDart言語がマイナーという点で、一歩引いた視点で見られていたように思えます。何しろjavascriptには分厚いミドルウエアの蓄積があります。IT技術になじみのある人にとってはjavascript以外はそれだけでマイナー言語・マイナープラットフォームになるのかもしれません。組み込み間もミドルウェアがしょぼいと苦労しますしね。

さて、そんなFlutterに注目したのは、上にあげたCanonicalのニュースが目に留まったからです。Ubuntu向けに開発環境が充実していく可能性が強いのです。

Ubuntuについては数年前から組み込み向け用途をちょいちょい調べています。私が想定する組み込み向け用途とはこのようなものです。

  • 組み込み向けシステムのGUIを担う
  • GUI以外の信号処理などはほかにオフロードしていい
  • 全画面で描画したい
  • Ubuntu のデスクトップで試験できるとよい
  • VNCやRDPを使いたい

こういうことを考えた背景となる経験があります。実は機種名を失念しているのですが、数年前にハイエンドのAVレシーバーに触れる機会がありました。AVレシーバーはたいてい設定画面がテレビ・モニタに表示され、それを見ながらリモコンで操作します。ところが、この機械は設定画面をiPadにも表示できました。専用アプリではなくVNCで表示していました。つまり、内部に組み込みのWindowsかLinuxがあり、その画面をVNCで飛ばしていたのですね。

賢い方法です。

専用アプリには開発費がかかりますし、各種のプラットフォーム、解像度を追いかけなければなりません。プラットフォームのアップデートにかかる非互換性が生じることがありますし、解像度にきちんと対応していなければ、みっともない画面表示になるかもしれません。

その点、VNCやRDPを使えば、ユーザーには汎用のクライアント・ソフトをインストールしてもらうだけで、あらゆる端末から操作できるようになります。当然、タッチ対応ですので、ユーザーはソファにもたれかかったままGUI画面を使い慣れたスマホやタブレットで操作できます。

そういう機能を自分の作る装置にも組み込めるといいな、と思って数年前にちょいちょい調べていました。ところが、当時は

  • 組み込み用で
  • 全画面表示が可能で
  • VCNやRDPに対応する

GUI開発環境が非常に限られていました。それがここ数年で一挙に敷居が下がっています。

Canonicalはしばらく開発していた描画システムMirをあきらめ、Waylandプロトコルに合流することに決めました。一方で、ソフトウェアとしてのMirにはいろいろなことが起きて新たな道が開けています。

私が注目したのはMir Kioskです。これはたった一つのアプリケーションを全画面で表示するためのOSです。ディスプレイ・システムのプロトコルとしてはWaylandを使っていますので、普通のLinuxデスクトップで開発したGUIアプリケーションがそのまま全画面アプリとして実行されます。

当然、試験は通常のデスクトップで使えます。また、Linuxのエコシステムを利用できますので、VNCやRDPへの対応も容易だと期待できます。確認はしていませんが。

Mir KioskはWaylandプロトコルに対応しているため、Flutterで開発するアプリも対応できるでしょう。うまくパズルのピースがはまりそうです。

また、ハードウェアに目を向けてみるとRasPiにボルトオンで装着できるタッチパネル付きLCDディスプレイも広く発売されています。RasPi用のUbuntuもありますから、これがそのまま利用できます。

Flutter + Wayland がうまい方法だと思っているのは私だけではないようで、例えばこちらで紹介されているスライドを見るとソニーでも同じことを考えてすでに実行に移しているようです(リンク先のページの最後にスライドへのリンクがあります)。

ソニーがどう使うかの詳細まではわかりませんが、私が作る程度のシステムであれば

  • Mir Kioskシステムに
  • Flutterで記述したGUIアプリを搭載し
  • /dev/tty** 経由でシリアライズしたデータを他のCPUとやりとり

を行えば目的を達成できます。シリアライズにはjsonを使えばよいでしょう。

ということで、Flutterをつつきまわすことにしました。当面はDart言語の勉強ですが、独自のWidgetを作るつもりが無ければ、通り一遍の機能の勉強だけで事足りそうです。DartにはオンラインIDEであるDartPadもあり、学習の障壁は低いです。

Flutterに関してはレイアウトがWEBのそれに似た方式ですので、凝ったことをしなえればサクサク開発できるのではないかと考えています。

「Flutter + Mir Kiosk + RasPi + VNC」への2件のフィードバック

  1. 割とどうでもいい事かもしれませんが、タイトルが VCN になっています。久しぶりにGUIに手を出そうとしたら、百花繚乱で迷子になっています。見てきた中では flutter が面白そうな印象でした。ただなかなか腰が座らなくって。

    返信
    • ありがとうございます。修正しました。ちょっと触った限りですが、Flutterは面白いです。

      返信

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください