見出し画像

【Python】Termuxでturtleライブラリを使ったグラフィックス

スマホでTermuxを使ってプログラミングしているんだが、turtleライブラリでグラフィックスを描画しようとしてバタバタしたので覚え書き。



CUIであるTermuxでどうやってグラフィックスを描画するのか

CUIとは「Command line User Interface」の略である。

CUI

こんな風に、キーボードでカタカタとコマンドを入力することでコンピュータを制御する。
マウスは使わない。
ウィンドウもない。

はて。こんなものでどうやってグラフィックスを表示するんだ?
そもそも、そこがナゾであった。

手順的には次のようになる。

  • Termuxを立ち上げる

  • VNC Viewerを立ち上げる

  • TermuxVNC Viewerを接続する

  • TermuxからPythonVNC Viewerに描画する

VNC Viewer」はストアで検索するといろいろあるだろうが、私は「RealVNC Viewer」を使用した。

さて。turtleを動かすまでの道のりである。


Termuxを立ち上げる

まずは、Termuxを立ち上げる。立ち上げるだけなので、なんてことはない。

Termux

VNC Viewerを立ち上げる

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

VNC Viewer

TermuxとVNC Viewerを接続する

面倒くさいのはこれからである。

Pythonでturtleを使用するために必要なパッケージ

Pythonturtleライブラリを使用するために、次のパッケージをインストールする必要があった。

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

turtletkinterについてはコチラ。


X11

X11をインストールする。

pkg install x11-repo

X11とは

termux:X11 は、本格的な X サーバーです。」

ということだ。
なんのこっちゃイマイチ分かりにくいんであるが、

Unix系でGUIを実現するためのもの」

というくらいに思っておく。

turtle」はグラフィックスライブラリであるので、これが必要になる。

X11についてはコチラ。


VNC

これもインストールする。

pkg install tigervnc

VNCというのは、Virtual Network Computingの略称である。離れたコンピュータをネットワークを経由して遠隔操作するためのリモートデスクトップソフトである。「リモートデスクトップ」という表現であれば、あるいは最近は知る人も少なくないかもしれない。自宅のPCを、外出先からアクセスできたりもする。その場合、自宅PCVNCサーバを立ち上げておき、外出先ではVNCクライアントを利用して自宅PCにアクセスする。リモートデスクトップであれば、外出先でも自宅のPCデスクトップがそのままのイメージで使用することができる。但し、セキュリティには更なる注意が必要になる。

今回の場合は、Termux側でサーバを立ち上げ、VNC Viewerと接続する。


VNC Serverの起動

ここまででようやくソフトウェアのインストールが終わった。しかし、turtleを利用するためにはまだ続く。インストールしただけではX ServerVNCも使えない。

まず、VNCサーバを立ち上げる。

vncserver -localhost

初回の実行でパスワードの設定を求められるので、なんぞ設定する。正常に終了すれば次のメッセージが出力される。

New 'localhost:1 ()' desktop is localhost:1

これで、VNC Serverが立ち上がったことになる。
ちなみに、
VNC ServerX Server
でもある。

なお、
vncserver -localhost
を実行する毎に、
localhost:2localhost:3、・・・
といくつもサーバが立ち上がっていく。


localhostをexportする

export DISPLAY=":1"

最後に、localhostexportする。
turtleから出力したグラフィックスコードは、この「DISPLAY」のlocalhostを使って出力する。であるからして、立ち上げたlocalhost番号を環境変数「DISPLAY」に指定しておかなければならない。

もし
localhost:3
で立ち上げたのなら、環境変数「DISPLAY」も
export DISPLAY=":3"
としなければならない。

これで、Termux側の設定は終わりである。
残るは、VNCViewerでこの出力を受けとるだけだ。


VNCViewerの設定

先ほど立ち上げた「RVNC Viewer」をTermuxと接続するように設定しなければならない。

まず最初に「Address Book」の右下に緑の+マークがあるので、これをタップする。

「Address Book」の右下にある緑の+マーク

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

New connection

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

Termux VNC との接続設定

「127.0.0.1」はローカルループバックのIPアドレス。ローカルループバックアドレスなのでプライバシーもセキュリティも関係ない。「ローカルループバックアドレス」と言えば、みんなこの番号なんである。いや、正確には先頭が「127」であれば全部ループバックアドレスなんである。

そして、ポート番号は「5901」。
「localhost:1」であればポート番号は「5901」、
「localhost:2」であればポート番号は「5902」、
(以下略)
を設定する。

Nameは何でもよろし。わかりやすい名前をつけてあげる。

そして「CREATE」する。
「CREATE」できたら、こうなる。

VNC ViewerでTermuxをCREATEしたところ

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

すると、「暗号化されていないがいいのか」と聞かれるので「OK」をタップする。今回はTermuxもVNC Viewerも同じCPUで動かす。ローカルループバックアドレスを使って外部とのやり取りはない。なので、暗号化もへったくれもない。

この後、さらにパスワードを求められるので、さっきVNCサーバを立ち上げる時に設定したパスワードを入力する。そうして、ようやくVNC Viewerが立ち上がったのである。

RealVNC 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からのturtle出力結果

なんじゃこりゃ。
と、思うなかれ。
Pythonのプログラムは

  • 前に100進んで。

  • 左に90度曲がって。

これを4回繰り返しただけである。
これで出来上がるのは・・・。
一辺が100の正方形。
それがVNC Viewerに表示されているわけである。

あーー、疲れた(笑)
なんでturtleを使うことになったかということについては、いずれまた。




この記事が気に入ったらサポートをしてみませんか?