
【Python】Termuxでturtleライブラリを使ったグラフィックス
スマホでTermuxを使ってプログラミングしているんだが、turtleライブラリでグラフィックスを描画しようとしてバタバタしたので覚え書き。
CUIであるTermuxでどうやってグラフィックスを描画するのか
CUIとは「Command line User Interface」の略である。

こんな風に、キーボードでカタカタとコマンドを入力することでコンピュータを制御する。
マウスは使わない。
ウィンドウもない。
はて。こんなものでどうやってグラフィックスを表示するんだ?
そもそも、そこがナゾであった。
手順的には次のようになる。
Termuxを立ち上げる
VNC Viewerを立ち上げる
TermuxとVNC Viewerを接続する
TermuxからPythonでVNC Viewerに描画する
「VNC Viewer」はストアで検索するといろいろあるだろうが、私は「RealVNC Viewer」を使用した。
さて。turtleを動かすまでの道のりである。
Termuxを立ち上げる
まずは、Termuxを立ち上げる。立ち上げるだけなので、なんてことはない。

VNC Viewerを立ち上げる
こちらも立ち上げるだけである。

TermuxとVNC Viewerを接続する
面倒くさいのはこれからである。
Pythonでturtleを使用するために必要なパッケージ
Pythonでturtleライブラリを使用するために、次のパッケージをインストールする必要があった。
pkg install python-pip
pip install turtl
pkg install python-tkinter
pkg install tcl
「python-pip」は、『Pythonのライブラリ「turtle」をインストールするために必要だった』のでインストールした。「Python」と同時にインストールしていることも多いのではないかも思われるが、私の場合はまだインストールしていなかったので今回インストールすることになったまでである。
「pip install turtle」は文字通り、今回使おうと思っている「turtle」のインストールである。
「python-tkinter」「tcl」は、「Tcl/Tk GUI ツールキットに対する標準の Python インターフェース」なのだそうだ。Pythonのドキュメントの「turtle」説明文でも次のように記載されている。
『「「_tkinter」という名前のモジュールがありません」エラーが発生した場合は、システムに Tk インターフェース パッケージをインストールする必要があります。』
「turtle」を使用するためには必須のようだ。
おそらく、次のように経由してVNCと接続するのではないか。
turtle → tkinter → tcl → vnc
turtle、tkinterについてはコチラ。
X11
X11をインストールする。
pkg install x11-repo
X11とは
「termux:X11 は、本格的な X サーバーです。」
ということだ。
なんのこっちゃイマイチ分かりにくいんであるが、
「Unix系でGUIを実現するためのもの」
というくらいに思っておく。
「turtle」はグラフィックスライブラリであるので、これが必要になる。
X11についてはコチラ。
https://github.com/termux/termux-x11
絵で表示すると何故か表示されないので、URLをテキストで書いておく。
VNC
これもインストールする。
pkg install tigervnc
VNCというのは、Virtual Network Computingの略称である。離れたコンピュータをネットワークを経由して遠隔操作するためのリモートデスクトップソフトである。「リモートデスクトップ」という表現であれば、あるいは最近は知る人も少なくないかもしれない。自宅のPCを、外出先からアクセスできたりもする。その場合、自宅PCにVNCサーバを立ち上げておき、外出先ではVNCクライアントを利用して自宅PCにアクセスする。リモートデスクトップであれば、外出先でも自宅のPCデスクトップがそのままのイメージで使用することができる。但し、セキュリティには更なる注意が必要になる。
今回の場合は、Termux側でサーバを立ち上げ、VNC Viewerと接続する。
VNC Serverの起動
ここまででようやくソフトウェアのインストールが終わった。しかし、turtleを利用するためにはまだ続く。インストールしただけではX ServerもVNCも使えない。
まず、VNCサーバを立ち上げる。
vncserver -localhost
初回の実行でパスワードの設定を求められるので、なんぞ設定する。正常に終了すれば次のメッセージが出力される。
New 'localhost:1 ()' desktop is localhost:1
これで、VNC Serverが立ち上がったことになる。
ちなみに、
VNC Server=X Server
でもある。
なお、
vncserver -localhost
を実行する毎に、
localhost:2、localhost:3、・・・
といくつもサーバが立ち上がっていく。
localhostをexportする
export DISPLAY=":1"
最後に、localhostをexportする。
turtleから出力したグラフィックスコードは、この「DISPLAY」のlocalhostを使って出力する。であるからして、立ち上げたlocalhost番号を環境変数「DISPLAY」に指定しておかなければならない。
もし
localhost:3
で立ち上げたのなら、環境変数「DISPLAY」も
export DISPLAY=":3"
としなければならない。
これで、Termux側の設定は終わりである。
残るは、VNCViewerでこの出力を受けとるだけだ。
VNCViewerの設定
先ほど立ち上げた「RVNC Viewer」をTermuxと接続するように設定しなければならない。
まず最初に「Address Book」の右下に緑の+マークがあるので、これをタップする。

アドレス入力を求めれる。

次のように、新しいアドレスを追加する。

「127.0.0.1」はローカルループバックのIPアドレス。ローカルループバックアドレスなのでプライバシーもセキュリティも関係ない。「ローカルループバックアドレス」と言えば、みんなこの番号なんである。いや、正確には先頭が「127」であれば全部ループバックアドレスなんである。
そして、ポート番号は「5901」。
「localhost:1」であればポート番号は「5901」、
「localhost:2」であればポート番号は「5902」、
(以下略)
を設定する。
Nameは何でもよろし。わかりやすい名前をつけてあげる。
そして「CREATE」する。
「CREATE」できたら、こうなる。

一番下にある「CONNECT」をタップする

すると、「暗号化されていないがいいのか」と聞かれるので「OK」をタップする。今回はTermuxもVNC Viewerも同じCPUで動かす。ローカルループバックアドレスを使って外部とのやり取りはない。なので、暗号化もへったくれもない。
この後、さらにパスワードを求められるので、さっきVNCサーバを立ち上げる時に設定したパスワードを入力する。そうして、ようやくVNC Viewerが立ち上がったのである。

なんだか、真っ黒けなんですけど。
いや、でも、これでいい。
描画してみればわかるんである。
TermuxからPythonでVNC Viewerに描画する
ふぅ~。
やっと描画できるところまでたどり着いた。
で!
TermuxからPythonで次を実行する。
from turtle import *
forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
done()
すると・・・。
VNC Viewerにはこのように表示されるわけで。

なんじゃこりゃ。
と、思うなかれ。
Pythonのプログラムは
前に100進んで。
左に90度曲がって。
これを4回繰り返しただけである。
これで出来上がるのは・・・。
一辺が100の正方形。
それがVNC Viewerに表示されているわけである。
あーー、疲れた(笑)
なんでturtleを使うことになったかということについては、いずれまた。