メインコンテンツへスキップ

TermuxのXFCEデスクトップでproot-distro内のX11 GUIアプリを起動する

·
カテゴリー スマートフォン Termuxチュートリアル
タグ Proot-Distro X Window
目次

Allow apps in proot-distro to draw windows on XFCE desktop in Termux. Integrate X11 GUI apps in proot-distro with Termux host desktop environment.

デフォルトでは、TermuxのネイティブパッケージでXFCEデスクトップ環境を動かし、X11のネットワーク透過性を使って、proot-distro内のX11プログラムのウィンドウをXFCEデスクトップ上に表示させます。

この画像はTermuxとproot-distro環境が同時に動作している様子を示しています。XFCEデスクトップはTermuxで直接動作し、LibreOfficeはproot-distro内から起動しています

ここでネイティブのXFCEプログラムを動かす側を、ひとまずTermuxホストと呼ぶことにします。proot-distroは自然にコンテナ側です。この流れは以下のようになります。

この使い方は、LinuxデスクトップのコンテナツールDistroboxに少し似ています。Docker内のX11 GUIプログラムをホストのデスクトップに表示できる、というものです。

proot-distro内から直接XFCEを起動すればいいのでは、なぜTermuxのXFCEパッケージを使うのか、と思うかもしれません。

理由は速度です。proot内のプロセスはptraceでエミュレートされるため、Termux向けにネイティブコンパイルされたプログラムよりもそもそも遅くなります。今ではTermuxのパッケージも増えており、Chromiumブラウザまであります(TUR Repoに収録)。そのため今後は、proot-distroでデスクトップ環境を動かして主客転倒させる必要は徐々に減るでしょう。よく使うプログラムの大半をTermuxネイティブ版で実行できるなら、proot-distroを常用する必要はありません。必要な時だけproot-distroを起動し、Debianリポジトリにしかないプログラムを動かせばよいのです。

1. Termuxにデスクトップ環境をインストールする
#

TermuxにXFCE4デスクトップをインストールするを参照してください。グラフィック表示の方法は、Termux X11でもVNCでも構いません。

ここではさらに、XクライアントがXサーバーへ接続する権限を制御するためのパッケージを追加します。

pkg install xorg-xhost

Termuxのデスクトップ環境を起動できるかテストします。

また、XFCEのファイルマネージャーを開き、storage/sharedディレクトリを開けば、Android内部ストレージのファイルを読み込めます。

2. proot-distroを設定する
#

私はproot Debianをインストールしました。

一般ユーザーを追加し、proot-distro内で日本語化を設定することをおすすめします。

Termuxにはlocalesパッケージがなく、日本語のロケールを設定できません。

proot-distro内には、たとえばLibreOfficeのようなGUIプログラムもインストールしておきます。

sudo apt install libreoffice

3. Termuxデスクトップからproot-distro内のプログラムを起動する
#

  1. まずxhostを実行し、proot-distro内のプログラムがTermuxデスクトップのXサーバーにウィンドウを描画できるよう許可します。prootのプロセスはTermux userによって起動されるため、whoamiコマンドで現在のユーザー名を渡し、このユーザーの接続を許可します。
xhost +SI:localuser:$(whoami)
  1. proot-distroにログインします。Xサーバーリソースを共有するため、必ず--shared-tmpを使います。さらに--termux-homeを付けてTermuxのホームディレクトリもマウントします(proot内のプログラムにファイルを散らかされたくない場合は、マウントしなくても構いません)。
proot-distro login debian --user user --shared-tmp --termux-home
  1. DISPLAY環境変数を指定します。値はTermux Xサーバーのアドレスで、通常は:0です。その後、LibreOfficeなどのプログラムを実行します。
export DISPLAY=:0

libreoffice
  1. するとLibreOfficeのウィンドウが起動します。

  2. Termuxデスクトップ上のファイルは、LibreOfficeのウィンドウへ直接ドラッグして開けます。

ただしLibreOfficeからファイル選択ダイアログを開く場合、デフォルトではproot-distro内のディレクトリしか見えません。上でTermuxのホームディレクトリをマウントしているため、proot-distro内のユーザーのホームディレクトリ/homeはTermuxのホームディレクトリと共有された状態になります。

また、/sdcardからAndroid内部ストレージのディレクトリを読み込むこともできます。

4. TermuxデスクトップにGUIショートカットを追加する
#

Desktop Entryにしておけば、手動でproot-distroにログインしてコマンドを打つ必要がなくなります。

XFCEにはDesktop Entryをすばやく作成する方法があります。デスクトップで右クリック → Create Launcher を選びます。

Command欄に以下のコマンドを入力します。Debian prootへログインし、bashでLibreOfficeを起動します。

proot-distro login debian  --shared-tmp -- bash -c "DISPLAY=:1 libreoffice"

アイコンファイルは任意のディレクトリの画像を選べますが、私は元のものを使います。Iconをクリックし、Image Filesを選び、ファイル選択ダイアログでパスに/data/data/com.termux/files/var/lib/proot-distro/installed-rootfs/debian/usr/share/icons/hicolor/を入力します。するとTermux proot-distro内のアイコンファイルを見つけられます。

保存してダブルクリックすれば、LibreOfficeが直接起動します。他のプログラムも同じ要領で設定できます。

関連記事


最後までお読みいただきありがとうございます。本サイトでは公開コメント欄を設けていません。私はソーシャルな反応やアクセス数を追い求めるためではなく、自分の考えを誠実に探求するために文章を書いています。記事を丁寧にお読みいただいたうえで、ご感想やご意見をお寄せいただければ幸いです。誤字・誤り・技術的な問題などを見つけた場合、またはフィードバックを共有したい場合は、Aboutページに記載しているメールアドレスまでお気軽にご連絡ください。