前にmicro:bit
の最新版をRaspberry Pi
で動作させましたが、Raspberry Pi
では結構動作が遅く、起動までにかなりの時間がかかっていました。
本当はWindows10でも試してみようかなと思ったのですが、割とインストールした開発アプリの状況が汚いWindows10しかなかったこともあり純粋に手順としてメモをしておく意味はないかなと考え、今回はWSL2
環境でのDocker
をインストールしていることを思い出しました。
参考
ただ、問題があってmicro:bit
のGitHub版最新開発環境導入にはGUI環境(ブラウザが立ち上がる必要があります)そのため、Docker
のコンテナ環境だけではなく、X Window System
のアプリWindows10側でも見えるようにする必要があります。そこで、X Window Systemサーバー
の設定も行っていこうと思います。情報では、今後WSL2(Windows Subsystem for Linux 2)
がWindows上のX Window System
のサーバと連携するようになるという話もありったりしたので、来年以降でWindowsだけで別のアプリを入れることなく動作させることもできるかなと思っています。
そんな中、今回はWindows10のWSL2
上にインストールを行ったDocker
の環境(以後WSL2-Docker
環境ということにします)を使用して、まずは環境整備を行ってみます。
次回はこの環境を使用してmicro:bit
の最新版を動かしていくことにします。micro:bitの最新版の導入に関しては以前のエントリーとほとんど同じなのでそちらを参考にしてください。こちらではコマンドのみを記載するだけにとどめます。
参考
Windows10にX Window System
サーバアプリをインストールする
今回のX Window System
のサーバになるアプリはVcXsrv Windows X Server
というものを使用します。
他にも同じようなアプリはあると思いますが、有料ではないのでこちらを使うことにしました。
以下からアクセスしてダウンロードを行ってください。
ダウンロードしたファイルをクリックしてインストールしていきます。インストーラがついているものなので導入は割と簡単だと思います。ファイルをダウンロードすると以下のファイルが入手できます。これをダブルクリックすればOKです。
インストーラが立ち上がると、オプション選択のダイアログが表示されますが、特別なことがなければそのままで【Next >】ボタンをクリックします。
続いては、インストール先のフォルダ指定ですが、こちらもデフォルトで大丈夫です。【Install】ボタンをクリックします。
するとインストール作業が行われます。細かなアプリケーションの設定はインストール後に行うことができる形となります。
Completeと表示されたら、【Close】ボタンをクリックしてインストーラを終了させます。
インストールが完了するとデスクトップにXLaunch
というアイコンが表示されていると思います。これでVcXsrv Windows X Server
の設定を行っていきます。ここからアプリの常駐化などの設定ができるようになりますが、今回は使用するときのみに使用するスタイルで行きたいと思います。
アプリを起動すると、Windowの表示モードを尋ねられます。1つのデスクトップウインドウを開いて、その中でアプリを起動するパターンも可能ですし、それぞれのアプリをその他のWindowsアプリと同様に開くパターンなどいろいろ設定が可能です。今回はMultiple Windowsというモードを選択しています。あとは【次へ】ボタンをクリックします。
続いては起動のさせ方(常駐)モード選択になります。今回は都度起動とするため、デフォルトのままで大丈夫です。このまま【次へ】ボタンをクリックします。
最後は追加設定になりますが、ここでは最後のチェックボックスにチェックを入れてください。アクセスコントロールのものなので、忘れていると使用できないかもしれません。必ず忘れずにチェックしましょう。 【次へ】ボタンをクリックします。
これで、設定は完了となりますので、【完了】ボタンをクリックしてアプリを起動します。
【完了】ボタンをクリックすると、Windowsのファイアウォールのダイアログが表示されるので、設定を確認して【アクセスを許可する】ボタンをクリックしましょう。これで起動されます。
念の為、起動しているかはタスクバーにアイコンが表示されますので、確認してみてください。
これで、VcXsrv Windows X Server
が動作するようになりました。残るはDocker
で動作するコンテナを準備していくことになります。
Docker
で動作するLinuxコンテナの準備をする
基本的には通常使うLinuxコンテナを準備します。今回はUbuntuを使っていきます。 作業としては以下のようになります。
今回は以前インストールしていた環境があるのでDocker for Windows
を使用して作業をしますが、もちろんWindowsのCMDやPowerShellからでも同様のことはできます。
まずはUbuntuのイメージからコンテナを起動してみます。
Docker for Windows
のウインドウを開いて、左側にあるimagesをクリックして
インストール済みのImageを確認します。Ubuntuがあったのでそれをクリックして、
右側に【RUN】ボタンが表示されます。これをクリックして新しいコンテナを作成していきます。
あとはコンテナ名とコンテナとホストのファイルを共有するパスを設定しておきます。これがあるとUSB接続ができないコンテナ側のOSとファイルの共有がスムーズになります。可能な限りやっておくといいと思います。設定が終わったら【Run】ボタンをクリックします。
コンテナを起動したらコンソールを開いて(bashプロセスにアタッチでもOK)以下を行います。ここでインストールを行っているのはX11の環境とX11のアプリになります。
※今回は素のUbuntuのイメージを利用しているのでルートユーザで作業をしています。そのため、インストールなどの作業にはsudo
を行っていませんのでご注意ください。
# apt update # apt install xserver-xorg x11-apps
Xのインストール時にタイムゾーンとキーマップを尋ねられるので、
タイムゾーンは【6. Asia】を選択し、
リージョンは【79. Tokyo】にしておきます。
キーマップは接続に合わせて設定することになりますが、
私は【55. Japanese】と選択して、
レイアウトは【6. Japanese - Japanese(OADG109A)】を選択しておきました。
インストールが完了するとX Window System
が使用可能になります。テスト用のアプリもインストールされているので早速テストを行います。以下のようにX環境のGUIを持つアプリを起動してみます。
$ xeyes
すると以下のようなエラーが発生します。これはどこの環境でウインドウを開くか設定を行っていないためのエラーメッセージとなります。本来であれば、ローカル環境にウインドウを開くことになるのですが、ディスプレイがない設定のため、別途設定が必要になります。
そのために必要になるのはDISPLAY
という環境設定になります。この環境変数はネットワーク越しの設定も可能になるため、今回は表示させるのをDocker
のホスト側にしたいと思うので、ホスト側のIPアドレスを指定し、設定を行います。
注意となりますが、ホスト側のIPアドレスはWSL
で使用される仮想アダプタで設定されているIPアドレスになります。ipconfigコマンド
で確かめるときには、イーサーネットアダプター vEthernet(WSL)のものを確認して設定を行う点が注意となります。
今回の例では172.19.32.1
となっていました。
この場合の環境変数の設定方法は以下のようになります。合わせてxeye
の実行も行ってみます。
# export DISPLAY=172.19.32.1:0.0 # xeyes &
無事に実行が行われました。
chromiumブラウザ
の導入を試す
Docker
コンテナ上にあるUbuntuにはWebブラウザはインストールされていないので、新規にインストールを行います。micro:bit
のGitHubにある最新版はサービス起動するとChromiumブラウザ
を起動しようとするのでそちらをインストールしていきます。
ブラウザのインストールは以下のように行います。
$ apt -y install chromium-browser-l10n $ apt -y install chromium-browser
インストール後、起動すると以下のようなメッセージが表示されます。
$ chromium-browser Command '/usr/bin/chromium-browser' requires the chromium snap to be installed. Please install it with: snap install chromium
snap
というものでインストールせよという内容です。実は、最近はChromiumブラウザ
はaptパッケージ
ではなくsnap
で配布がされているようです。
そのため、chromium-browser
はaptコマンド
でインストールを行っても、それはダミーインストール状態になっていてsnap
を使用してインストールを行う必要があります。メッセージどおりにインストールを行うことになるのですが…
$ snap install chromium-browser error: cannot communicate with server: Post http://localhost/v2/snaps/chromium: dial unix /run/snapd.socket: connect: no such file or directory
こちらでもエラーが発生します。原因はDocker経由のコンテナではsystemctrl
が使用できないためです。snap
はsnapd
というサービスを経由して実行することになりますが、snapd
サービスそのものが起動できないため、snap
は動作させることができません。
現状はchromium-browser
がsnap
経由でしかインストールできない状態のため、別の手段を考える必要があります。
そこで、純正のChromeブラウザをインストールして試してみたいと思います。(micro:bitの最新版はFirefoxではうまく動作しなかったのでこちらの方法をとっています)
Chromeブラウザのインストール
以下のコマンドでChromeブラウザ
をインストールを行っていきます。デフォルトでapt
を使ったインストールができないので、以下のようにインストールしていきます。
参考
# apt install -y wget gpg # wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - # sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' # apt update # apt install google-chrome-stable -y
ここまでくれば、インストール完了です。あとはブラウザを起動するのですが、実行コマンドはgoogle-chrome
となっているので注意です。ただ、そのまま実行を行うとエラーが表示されます。
# google-chrome [8725:8725:1229/191718.909795:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
起動時のオプションで--no-sandbox
をつけないと起動できないようになっているみたいです。以下の様に実行を行うと
# google-chrome --no-sandbox
デフォルトブラウザにするか、クラッシュレポートをGoogleに送るかなどのダイアログが表示され、【OK】ボタンをクリックすれば
無事にWSL2-Docker環境
でGUI環境のGoogleChrome
ブラウザが起動するようになりました。
おわりに
今回はWindows10上で動作するWSL2-Docker環境
でX Window system
のGUIアプリを動作させてみました。わりと、簡単に実行できるようになるので、テストという位置づけであればかなり使えるかなと思います。
次回は更に、この環境にmicro:bit
のGitHub版最新開発環境をいれて動作できるかを試してみたいと思います。