Delphi 10.2 では Linux 向けにサーバ用アプリを開発できるようになりました。そして開発には IDE から Linux 上でのリモート実行、リモートデバッグのために PAServer を使用します。PAServer は macOS / iOS アプリ開発でも使用しますが、Linux 向け開発が macOS / iOS アプリ開発と異なるのは「サーバ向けアプリ開発なのでアプリはGUIを持たない」ことです。従って作成したアプリへの入出力には stdin, stdout を使用することになります。
しかし PAServer 経由の操作では PAServer 自体も stdin, stdout を使用していますので、PAServer 経由でリモート実行するアプリと標準入出力を取り合うことになります。
これは少々不便なので、PAServer とは別のターミナルでアプリを実行することで、標準入出力の取り合いを回避する方法を説明します。
Table of Contents
標準入出力が混じることの問題?
標準出力については出力メッセージが混じるだけですし、PAServer 自体は必要最低限のメッセージだけを出力しますので、大きな問題はありません。
しかし標準入力を取り合うのは、少々不都合があります。キーボードからの操作が PAServer に対して行われるのか、それともリモート実行中のアプリに対して行われるのか、その区別が付きづらいからです。
たとえば RAD Server は開発用サーバ経由で起動しますが、この開発用サーバ自体が標準入出力を使用します。あるいは WebBroker をスタンドアローンコンソールアプリで開発する場合も操作UIがコンソール上で標準入出力を使用します。
この場合にIDEから普通に実行すると、以下のスクリーンショットのように PAServer の出力とアプリの出力が混じってしまいます。
では、このような状況をどのようにして回避すればよいでしょうか?
ランチャアプリケーションを設定すれば解決します
プロジェクトの設定でランチャアプリケーションを設定してください。するとPAServer 経由のアプリ実行がランチャ経由で行われます。Linux 向けプロジェクトではデフォルトのランチャとして /usr/bin/xterm が選択されているのですが、ランチャの利用は有効化されていません。Linux 向けの本番機では GUI を意図的にインストールしない場合もありますので、そのような場合にはランチャの利用がデフォルトで無効のほうが都合がよいわけですね。
しかし開発環境においては、GUI をインストールしているケースの方が多いかもしれません。
このような場合はランチャアプリケーションの利用を有効化することで、PAServer とアプリ実行用のターミナルを分離できるようになります。
設定の手順は以下のスクリーンショットをご覧ください。
ランチャ設定後の動作
ランチャを設定しておくと、次のスクリーンショットのように PAServer とは別のターミナルでアプリを実行させることができます。
GUI をインストールしていない場合の対処
フル機能の GUI が欲しい場合は ubuntu-desktop をインストールしてください。apt コマンドで ubuntu-desktop をインストールすれば、GUI 環境が一通りセットアップされます。
インストール後は OS を再起動すると、GUI ログインの状態で OS が起動します。
X-Window System に慣れているなら、Windows 上ですべて操作する方法もあります
X-Window System に慣れている方は Windows PC 側でXサーバを動かして、Linux 上で実行した xterm の描画が Windows PC 側で行われるようにしてもよいでしょう。そうすると以下のスクリーンショットのように、すべての操作を Windows 上で行うこともできます。
ただしこの手順説明は X-Window System の理解が必要となりますので、ここでは説明を省略いたします。