12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-06-28

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 が開発していた FireMonkey アプリケーションを Linux 上で実行出来るようにする FMXLinux が Delphi / RAD Studio Enterprise Edition 以上でバンドルされるようになりました。

エンバカデロ、FMX Linuxとの提携により Linux向けGUIアプリケーション開発をサポート

実際に動作しているところ
nativestyle.png

動作している動画はこちら
スクリーンショットはこちらに大量にあります。

FMX Linux の使い方

ということで、Delphi Enterprise 以上であれば FMXLinux が使えるようになります。
FMXLinux は GetIt から取得可能です。
右上の検索窓に「FMXLinux」と入れて検索すると出てきます。

image.png

インストール後 FMXLinux で Linux 開発をする場合はプロジェクトマネージャプロジェクト名を右クリック→[Add Linux Platform] をクリックします。
ターゲットプラットフォーム部分ではありません!

image.png

これで[ターゲットプラットフォーム]に Linux 64 ビットが出現し、これまではコンソールアプリケーションだけだった Linux 64 ビットが GUI でも使えるようになりました。

image.png

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

image.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

image.png

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

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.

Window Manager のインストール

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

WSL上にXサーバをインストールしてGUIを実現する(VcXsrv編)

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

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

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

sudo apt-get install libgtk-3-dev

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

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

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

sudo apt-get install dbus-x11

PAServer のインストール

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

image.png

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

cp /mnt/c/temp/LinuxPAServer20.0.tar.gz ~/
tar xvf LinuxPAServer20.0.tar.gz
cd PAServer-20.0/
./paserver

を実行します。

image.png

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

SDK の取り込み

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

image.png

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

FMXLinux でデプロイ

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

image.png

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

image.png

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

neko.png

まとめ

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

12
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?