1.はじめに
20年6月に「ElixirConf EU Virtual」が開催されました。
私は参加していなかったのですが、オンライン参加していたNervesJP勢のみなさんが興味を持っていた話題の一つがこちら。
ElixirでGUIアプリを実装するライブラリです。
丁度わたしも、GUIを使ったアプリを作りかけていたのですが、このライブラリの存在を知らなかったので、最近使い始めたPythonのKivyを、ElixirからgRPC経由で操作しようかと考えていたところでした。
とりあえず、モノは試しと言うところで、チュートリアルにチャレンジしました。
実験環境
ハードウェア | Raspberry Pi |
OS | Raspbian Buster |
Elixir | Version 1.10.3 |
$ uname -a Linux raspi4 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux
2.下準備
必要なライブラリをインストールします。
(1)OpenGLの開発ライブラリ
$ sudo apt install libglfw3 libglfw3-dev libglew-dev
このインストールを忘れると、iexでコンパイルしている際に下記のエラーメッセージが出ます。
・・・ Package glfw3 was not found in the pkg-config search path. Perhaps you should add the directory containing `glfw3.pc' to the PKG_CONFIG_PATH environment variable No package 'glfw3' found Package glfw3 was not found in the pkg-config search path. Perhaps you should add the directory containing `glfw3.pc' to the PKG_CONFIG_PATH environment variable No package 'glfw3' found c_src/main.c:14:10: fatal error: GLFW/glfw3.h: No such file or directory #include <GLFW/glfw3.h> ^~~~~~~~~~~~~~ ・・・
(2) Scenic Archive
次に、Scenic Archiveをmixでインストールします。
$ mix archive.install hex scenic_new
以上で事前準備完了です。
3.チュートリアルチャレンジ
Getting Startedの説明に従って進めます。
Getting Started — Scenic v0.10.2
(1)"Build the Basic App"
一番基本となるサンプルです。 ウィンドウと、ウィンドウが拾ったキーボードやマウスのイベントを、コンソールで確認できます。
$ mix scenic.new my_app01 $ cd my_app0 $ mix do deps.get, scenic.run ([Ctrl-\]で終了)
実行画面
RDP経由でXにログインして、動かしました。
右側がscenicアプリのウィンドウ、左側がコンソールでこちらには、キーボードやマウスのイベントが流れているのが確認できます。
(2)"Build the Example App"
先ほどのサンプルは文字だけでしたが、(C#.NETで言うところの)グラフィカルなコントロールを見る事ができます。
$ mix scenic.new.example my_app02 $ cd my_app02 $ mix do deps.get, scenic.run ([Ctrl-\]で終了)
実行画面
ウィンドウ左上の「Scene」のコンボボックスで、表示内容を切り替えできます。
①Scene: Sensor
②Scene: Primitives
③Scene: Components
④Scene: Transforms
操作してみた印象
RDP経由だと動作が重い印象ですが、RaspberryPiに直結のHDMIディスプレイで操作するとさくさく動きます。
※リモートログイン状態でRaspberryPiに直結のHDMIディスプレイに表示させるとき
Xの表示先を環境変数で指定しておきます。
$ export DISPLAY=:0.0
この設定を忘れると、下記のような「dirty close」エラーが出て停止します。
$ mix do deps.get, scenic.run Resolving Hex dependencies... Dependency resolution completed: Unchanged: elixir_make 0.6.0 font_metrics 0.3.1 msgpax 2.2.4 scenic 0.10.2 scenic_driver_glfw 0.10.1 All dependencies are up to date Compiling 2 files (.ex) Generated scenic_prac app 18:09:36.724 [error] dirty close
4.参考資料
- Scenicを試してみる(Elixir) - Qiita
- Failing to run on RPI 4: DIRTY CLOSE · Issue #13 · boydm/scenic_driver_nerves_rpi · GitHub
- 20年6月時点は、NervesでScenicを動作させる際、Raspberry Pi 4は対応出来ていません。
- Running the Scenic Elixir GUI Framework on Windows 10 (using WSL)
- Windows10 のWSLで動かす方法です。