WSL の Ubuntu 18.04 で Delphi FMXLinux を走らせる

# FMXLinux

2019/06/28 14:01 追記
**普通の Ubuntu Desktop では下記の記事を参考にしてください！**
また WSL で環境を構築する場合も、この記事の前に一読した方が良いです。
(この記事で紹介しているライブラリのインストールよりも良い可能性が高いです(GTK, mesa 関係など))

FMX Linux ファーストステップ
https://community.idera.com/developer-tools/b/blog/posts/first-steps-with-fmxlinux-ja

# はじめに

[KSDev](https://www.ksdev.com/) が開発していた FireMonkey アプリケーションを Linux 上で実行出来るようにする [FMXLinux](https://www.fmxlinux.com/) が Delphi / RAD Studio Enterprise Edition 以上でバンドルされるようになりました。

> [エンバカデロ、FMX Linuxとの提携により Linux向けGUIアプリケーション開発をサポート](https://www.atpress.ne.jp/news/187211)

実際に動作しているところ
![nativestyle.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/436754f1-1dec-7b18-1b00-72778dce4404.png)

[動作している動画はこちら](https://youtu.be/Mvu2NxxqxGw)。
[スクリーンショットはこちら](https://www.fmxlinux.com/shots.html)に大量にあります。

# FMX Linux の使い方

ということで、Delphi Enterprise 以上であれば FMXLinux が使えるようになります。
FMXLinux は [GetIt](http://docwiki.embarcadero.com/RADStudio/Rio/ja/GetIt_%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8_%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3) から取得可能です。
右上の検索窓に「FMXLinux」と入れて検索すると出てきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/51eb67e8-5c28-806c-aefb-b90efdf0d00a.png)

インストール後 FMXLinux で Linux 開発をする場合は[プロジェクトマネージャ](http://docwiki.embarcadero.com/RADStudio/Rio/ja/%EF%BC%BB%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88_%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3%EF%BC%BD)で**プロジェクト名**を右クリック→[Add Linux Platform] をクリックします。
**[ターゲットプラットフォーム](http://docwiki.embarcadero.com/RADStudio/Rio/ja/%EF%BC%BB%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88_%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3%EF%BC%BD#.EF.BC.BB.E3.82.BF.E3.83.BC.E3.82.B2.E3.83.83.E3.83.88_.E3.83.97.E3.83.A9.E3.83.83.E3.83.88.E3.83.95.E3.82.A9.E3.83.BC.E3.83.A0.EF.BC.BD.E3.81.AE.E3.82.B3.E3.83.B3.E3.83.86.E3.82.AD.E3.82.B9.E3.83.88_.E3.83.A1.E3.83.8B.E3.83.A5.E3.83.BC)部分ではありません！**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/e7d7fb97-86af-1f77-d510-30b4e784a22e.png)

これで[ターゲットプラットフォーム]に Linux 64 ビットが出現し、これまでは[コンソールアプリケーション](http://docwiki.embarcadero.com/RADStudio/Rio/ja/%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB_%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3)だけだった Linux 64 ビットが GUI でも使えるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/cfcc6254-3444-2774-190e-8c05a67923ec.png)

ちなみに、ターゲットプラットフォームに Linux 64 ビットを選ぶと、コンポーネントがグレーアウトして置けなくなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/ce24f1e2-2fc0-0de6-fe58-efb7614fefae.png)

IDE が Linux を GUI プラットフォームだと認識できていないからです。
ですので、コンポーネントは Win32 プラットフォームなどで置いて実行時に Linux 64 ビットを選ぶようにします。
また FMXLinux を使った Linux GUI 環境ではデバッグ実行はできないので、やはり同様に Win32 で開発して最後に Linux 64 ビットに吐き出すと良さそうです。

# WSL Ubuntu 18.04 の準備

ここまでで FMXLinux がインストールできたので、実際に試すために Linux 環境を整えたいなあと思うのが必定。
Windows ユーザーとしては WSL の Ubuntu で動くんじゃねーの？と思うわけです。
そこで、ここでは WSL Ubuntu 18.04 LTS で FMXLinux をデプロイ出来るようにする方法を紹介します。

勘違いしないで頂きたいのは **WSL だから手順が多いだけで既に X Window が動いている GUI サポート済みの環境ではちょっとの操作で起動します**。

### Ubuntu 18.04 のインストールとライブラリのインストール

Ubuntu 18.04 は Microsoft Store で検索すれば出てきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/2f3616e7-f297-5b6e-d17f-c6c708804744.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/1ec1b69e-0826-31ec-0272-cb10b016ea8d.png)

見つかった Ubuntu 18.04 LTS をインストールして起動します。
起動したらコンソールに次の通りにコマンドを打ち込んで、必要なライブラリ等をインストールします。

```shell
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install joe wget p7zip-full curl build-essential zlib1g-dev libcurl4-gnutls-dev
sudo apt-get autoremove
sudo apt-get autoclean
```

これらのコマンドの意味はこちらのページに。
[Configure Delphi and RedHat or Ubuntu for Linux development.](https://chapmanworld.com/2016/12/29/configure-delphi-and-redhat-or-ubuntu-for-linux-development/)

### Window Manager のインストール

次に Window Manager を使えるようにします。
WSL ではいくつか Window Manager が使えるようですがメジャーなのは VcXsrv のようです。
次の記事を参考にしてインストールしてみてください。

[WSL上にXサーバをインストールしてGUIを実現する（VcXsrv編）](https://www.atmarkit.co.jp/ait/articles/1812/06/news040.html)

インストールしたら VcXsrv を起動しておきます。

### GUI 関係のライブラリのインストールとリムーブ

次に FMXLinux で使う GTK を使えるようにします。
この状態のまま FMXLinux を動かすと GTK が見つからないとエラーを出すので…

```shell
sudo apt-get install libgtk-3-dev
```

とします。
また、ストア版の Ubuntu には Mesa 3D ライブラリがインストールされていて、これがあって GUI が起動できません。
これを防ぐために Mesa 3D ライブラリをどこか別の場所に移動しておきます。

```shell
mkdir ~/mesa
sudo mv /usr/lib/x86_64-linux-gnu/*mesa* ~/mesa
```

次に Desktop Bus を入れます。
これを入れないとダイアログを開いたりすると大量のワーニングが発生します。

```shell
sudo apt-get install dbus-x11
```

### PAServer のインストール

次に PAServer をインストールします。
PAServer は Delphi / RAD Studio をインストールディレクトリの PAServer フォルダにあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/70008409-67bc-8304-6b5f-f1d84284c8f9.png)

これを例えば C:\Temp\ にコピーして

```shell
cp /mnt/c/temp/LinuxPAServer20.0.tar.gz ~/
tar xvf LinuxPAServer20.0.tar.gz
cd PAServer-20.0/
./paserver
```
を実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/132acd99-7edb-8c6a-7bec-cd04ed837fe3.png)

するといつも通りの PAServer のメッセージが出てきて IDE と通信出来るようになります。

### SDK の取り込み

次に IDE を開いて[ツール]→[オプション]→[配置]→[SDK マネージャ]→[追加]ボタンをおして「新規 SDK の追加」ダイアログを開きます。
そして、[プラットフォームの選択]に[Linux 64 ビット]を選んで[接続するプロファイルの選択]で[新規追加...]を選んでウィザードを起動して、SDK を取り込みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/72bd23d4-ca11-0cb4-0197-2700524ff67e.png)

これでやっと準備完了です。

# FMXLinux でデプロイ

ここからは一瞬です。
プロジェクトマネージャで Linux 64 ビットをアクティブにして

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/edbb8b68-6b2d-3046-59cb-ecea264174a9.png)

実行すれば普通に起動します！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/7e860c7e-6802-5c1a-bf0e-dd99c016255b.png)

さすが Delphi 超簡単だぜ！！
もちろん、様々なコントロールも動作します。
これは Twitter に投稿した画像ですが、このアプリは一括で画像のサイズを変更するアプリです。
色々なコンポーネント、ダイアログ、そしてスタイルもちゃんと動いている事が判ります（ただし、タイトルバーやウィンドウ枠などは Border.Styled プロパティを True にしても Window Manager が用意したものになるようです）。

![neko.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/97c6bd10-1846-17af-57f1-1b21df15c830.png)

# まとめ
Delphi で Linux アプリが作れるようになって、Delphi の世界が更に広がりますね！