この記事では、VNCサーバーを設定して、TermuxのLinuxシステムデスクトップへアクセスする方法を説明します。prootまたはchrootでインストールしたLinuxシステムに適用できます。
TermuxはAndroidスマートフォンでLinuxを動かせます。環境を整えた後は、デスクトップ(グラフィカル環境)への接続方法を考える必要があります。TermuxのLinuxシステムデスクトップへ接続するには、Termux X11、XSDL、VNCの3つの方法があります。
前者2つはスマートフォン上でXサーバーを動かす方法です。後者はリモートデスクトップの考え方で、スマートフォン上でVNCサーバーを動かし、仮想Xvncサーバーを起動してから、VNCクライアントで接続します。このVNCクライアントはローカルでも、別のPC上のクライアントでもかまいません。
グラフィック性能でいえば、XサーバーはVNCより優れており、3Dハードウェアアクセラレーションも実現しやすいです。
昔私がTermuxを学び始めた頃は、多くの人がVNCを使っていました。しかしTermux X11が成熟するにつれて、私はVNCを徐々に使わなくなりました。
3つとも同じスマートフォン上で動かす場合、どれもlocalhostなので遅延の問題はありません。VNCはXサーバーに比べ、実際のところ性能面の利点がほとんどありません。
VNCの強みは、別のPCからリモートアクセスできることです。SSH Xサーバーforwardingの方法と比べ、VNCは画質を下げて帯域幅を減らせますし、headlessで起動することもできます。リモートで表示するときに性能上の利点が出てきます。
そのためVNCは「PCからスマートフォンのTermuxデスクトップへ接続する」場面に向いています。小さな画面を見つめながら必死にコマンドを打つのは嫌ですよね。テキストだけのSSHアクセスに加えて、グラフィカルなVNCはよい選択肢です。
VNCとTermux X11の2つの方法は共存できます。おそらく互いに影響しません。
1. VNCクライアントを選ぶ#
スマートフォンではAVNCまたはRealVNC Viewerをおすすめします。後者は機能が多いですが、プロプライエタリソフトウェアです。
PCではRemminaをおすすめします。
2. VNCサーバーを設定する#
次のどちらかを選びます。
Termuxで直接VNCサーバーを動かす#
実際にはproot-distroは不要です。Termux自体がネイティブのVNCサーバーパッケージを提供しています。ただし、proot-distro内のLinuxディストリビューションのデスクトップを開きたい場合は、この方法を使わないでください。
また、Termuxに収録されているデスクトップ環境パッケージはproot-distroほど豊富ではありません。現時点で最も完成度が高いのはXFCEです。
TermuxにXFCEデスクトップをインストールします。ただしTermux X11はインストールしません。
TigerVNCのパッケージをインストールします。執筆時点のバージョンは1.13.0です。
pkg install tigervnc- VNCサーバーのパスワードを設定します。
vncpasswd- VNCサーバー起動後に実行するプログラムを追加します。
~/.vnc/xstartupを編集します。
mkdir ~/.vnc/
vim ~/.vnc/xstartup- 次の内容を入力します。
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADRESS
# PulseAudio音声サーバーを起動。音声はTermuxから出力される
pulseaudio --start --exit-idle-time=-1
pacmd load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1
# デスクトップ環境を実行。ここではXFCE
exec startxfce4- xstartupに実行権限を付与します。
chmod +x ~/.vnc/xstartup- VNCサーバーの設定ファイルを定義します。
~/.vnc/tigervnc.confを編集します。
vim ~/.vnc/tigervnc.conf- 次の内容を入力します。
# 現在のセッションはXFCE
$session="xfce-session";
# 解像度。高いほど帯域幅を多く使う
$geometry="1920x1080";
# ビット深度。値は8/16/24/32で、数字が大きいほど画質はよいが帯域幅を消費する
$depth="32";
# 外部ネットワークから接続できるようにする
$localhost="no";proot-distro内でVNCサーバーを動かす#
先にDebianなどのTermux proot-distroをインストールしてください。続いてproot-distro内にデスクトップ環境をインストールします。最もリソースを食わないのはXFCEですが、KDE Plasmaを試してもかまいません。
- proot-distroにログインし、現在rootではなく一般ユーザーであることを確認します。
whoami
# rootの場合は su "ユーザー名" と入力して一般ユーザーへ切り替える- TigerVNCのパッケージをインストールします。現在のバージョンは1.13.0です。
sudo apt install tigervnc-standalone-server tigervnc-xorg-extension- VNCサーバーのパスワードを設定します。
vncpasswd- VNCサーバー起動後に実行するプログラムを追加します。
~/.vnc/xstartupを編集します。
mkdir ~/.vnc/
vim ~/.vnc/xstartup- 次の内容を入力します。
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADRESS
# PulseAudio音声サーバーを起動。音声はTermuxから出力される
export PULSE_SERVER=127.0.0.1 && pulseaudio --start --disable-shm=1 --exit-idle-time=-1
# デスクトップ環境を実行。ここではXFCE
exec startxfce4- xstartupに実行権限を付与します。
chmod +x ~/.vnc/xstartup- VNCサーバーの設定ファイルを定義します。
~/.vnc/tigervnc.confを編集します。
vim ~/.vnc/tigervnc.conf- 次の内容を入力します。
# 現在のセッションはXFCE
$session="xfce-session";
# 解像度。高いほど帯域幅を多く使う
$geometry="1920x1080";
# ビット深度。値は8/16/24/32で、数字が大きいほど画質はよいが帯域幅を消費する
$depth="32";
# 外部ネットワークから接続できるようにする
$localhost="no";3. VNCサーバーへ接続する#
Termuxでtigervncserverまたはvncserverコマンドを入力し、VNCサーバーを起動します。画面に出力されるポート番号を確認します。通常は1から始まります。VNCサーバーのポートは5900から数えるため、この場合のポートは5901です。
ローカル接続#
ローカル接続するには、スマートフォンでAVNCアプリを開き、ホスト接続を追加します。アドレスにlocalhost、ポートに5901を入力します。
AVNCの操作では、左側のボタンをタップしてタッチパッドモードに切り替えるのがおすすめです。Linuxデスクトップの文字が小さすぎる場合は、解像度を下げるか、そのデスクトップ環境の設定でDPIを調整してください。
VNCサーバー接続を終了した後は、Termuxに戻ってサーバーを停止してください。そうしないと、次回起動時に新しいポートで動いてしまいます。
vncserver -kill :1PCからリモート接続#
まずスマートフォンとPCを同じWi-Fiネットワークに接続します。
Termuxでsudo apt install net-tools & ifconfigコマンドを実行してスマートフォンのローカルIPを取得し、Wlanの行を確認します。
次にPCのReminnaのアドレス欄をVNCに切り替え、スマートフォンIP:5901を入力して接続します。
Reminnaでは左側のボタンを押して、リモートデスクトップのサイズに合わせられます。入力方式はリモート側のものしか使えませんが、両側のクリップボードは自動で同期されます。
VNCサーバー接続を終了した後は、Termuxに戻ってサーバーを停止してください。そうしないと、次回起動時に新しいポートで動いてしまいます。
vncserver -kill :1

