- 投稿日:2020-07-03T20:05:38+09:00
Androidスマホ・タブレットは何でもできる!Termuxで動かすアレコレまとめ
「使ってないAndroidスマホ,タブレットがある」
「これサーバーにできないかな?」その夢,かなえられます。
少々めんどくさい作業もありますが,やっていけば必ずできます。
どうやって動かすか
Androidには「Termux」というアプリがあります。
これを使うと,Linuxを動かすことができます。
パッケージもAPTで管理されていて,豊富です。https://play.google.com/store/apps/details?id=com.termux&hl=ja
また,GBoardなどのキーボードですと不便を感じるかもしれません。
「Hacker's Keyboard」がおすすめです。https://play.google.com/store/apps/details?id=org.pocketworkstation.pckeyboard&hl=ja
下ごしらえ
Linuxに触れたことのある方は慣れていると思います。
まず,Termuxが端末内のファイルにアクセスできるようにするには権限を与える必要があります。
$ termux-setup-storage
これを実行すると,Android 8以降では権限ダイアログが出ますので許可してください。
Termuxではaptのエイリアスとして「pkg」コマンドが用意されています。
コマンド 説明 pkg update apt updateを実行後apt upgradeを行う pkg install <package...> apt install <package...> pkg remove apt remove <package...> 他にもコマンドがあります。
pkg
だけ実行するとヘルプを見れます。さっそく,パッケージを最新にします。
$ pkg update
アップデートが完了したら,下ごしらえはおしまいです。
Termuxの基本
ディレクトリ
Termuxの中では,ルートディレクトリは /data/data/com.termux/files/usr になっています。
これは,$PREFIX
で表せます。
以下に例を挙げます。
本来のディレクトリパス Termuxでのパス /etc $PREFIX/etc /usr/share $PREFIX/share /bin $PREFIX/bin エディタ
nanoが標準でついています。
$ nano filename
で起動できます。
よく使うキーボード操作を挙げておきます。
キーボード入力 意味 Ctrl + X 終了 Ctrl + O 保存 使用できるポートの制限
Termuxは 1024~65535 の範囲で使用できます。
80や443などは使えませんので,インターネットに公開する場合はポート変換が必要になる場合があります。あれこれ
PCからシェルに入る (telnet)
本来はTelnetはネットに公開しちゃいけないものです。ローカルで使うだけにしておきましょう。
$ pkg install busyboxbusyboxをインストールしたら
$ busybox telnetd -p 5888とします。
-p 数字
はポート番号です。
TeraTermなどで,アクセス可能です。HTTPサーバーを建てる
パッケージのインストール
Termuxにも apache2 (httpd),nginxパッケージがありますので,インストールできます。
PHPも使いたい場合は,apache2の場合はphp
とphp-apache
が必要です。
nginxの場合はphp
とphp-fpm
が必要です。【apache2の場合】
$ pkg install apache2 php php-apache【nginxの場合】
$ pkg install nginx php php-fpm設定を変える (apache2)
設定ファイルは
$PREFIX/etc/apache2/httpd.conf
です。PHPを使う場合,設定の変更が必要です。
$ nano $PREFIX/etc/apache2/httpd.confでエディタを起動します。
まず,先頭に
ServerRoot "..."
という項目があると思います。
その次の行にHostnameLookups Onを記述します。これは,ログにホスト名を表示させるようにするための設定です。
次に,
LoadModule mpm_worker_module xxxxxxxxと書いてある行があるはずです。それはコメントアウトします。
代わりに,その行の一つ上にある#LoadModule mpm_prefork_module xxxxxxxのコメントアウトを解除します (#を外します)
次に,どんどん下へ行くと
DocumentRoot "..."
の行が見えてくると思います。
その周辺にあるOptions Indexes FollowSymLinksの行に,
ExecCGI
を書き足します。書き足すとOptions Indexes FollowSymLinks ExecCGIとなります。
その下のDirectoryIndex indexうんたらも
DirectoryIndex index.php index.html index.htmに変えます。
最後に,ファイルの一番最後の行に
LoadModule php7_module libexec/apache2/libphp7.so AddHandler php7-script .phpを追加しておしまいです。
Ctrl+Oで保存するのを忘れずに!設定を変える (nginx)
httpdより,少し厄介かもしれないですね。
設定ファイルは
$PREFIX/etc/nginx/nginx.conf
です。$ nano $PREFIX/etc/apache2/httpd.confでエディタを起動します。
まず,
location / { ... }という行があると思います。その中の
index index.html index.htm;を
index index.php index.html index.htm;にします。
次に
# pass the PHP script ほにゃららら # location ~ \.php$ { ... }という行があると思います。
コメントアウトされているはずですので,その部分すべて外します。その後,その部分は以下のように置き換えます
location ~ \.php$ { root (任意のディレクトリ); fastcgi_pass unix:/data/data/com.termux/files/usr/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }Ctrl+Xで保存して,エディタを終了します。
次にPHPの設定をします。
$ nano $PREFIX/etc/php-fpm.d/www.confでエディタを起動します。
スクロールしていくと,
listen = ....
という行があります。
そこをlisten = /data/data/com.termux/files/usr/var/run/php-fpm.sockに書き換えます。
Ctrl+Oで保存して,おしまいです。httpdを起動
httpdを起動させるには
$ httpd
だけでいいです。何かログを吐きますが特に気にする必要はありません。
止める時は$ httpd -k stopまたは
$ killall httpd
です。
nginxを起動
nginxは
$ nginx
とするだけです。
なお,PHPを使う場合は
nginx
を実行する前に$ php-fpmを実行する必要があります。
止める時は
$ killall nginx
です。
DiscordBot (Python)を動かす
PythonでBotを作ったのであれば,それもTermuxで動かせます。
Pythonは3.8をインストールできます。
$ pkg install python make automake autoconf clang build-essential gitなお,このインストール作業には約500MBを消費します。ストレージに2GB以上の空きがあるか確かめてください。
その後,
$ pip install wheel requests $ pip install -U "discord.py[voice]"を実行します。
途中PyNaClのビルドが行われます。スマートフォン・タブレットの性能によっては,完了するまで2~5分かかる場合があります。時間に余裕をもって行ってください。さきほどgitもインストールしたので,リポジトリからプログラムを下ろしたりできます。
GitHubからプログラムを下ろす
Gitの使い方に慣れている人は説明はいらないと思います。
ということで,事前に使い方を知っているものとしてコマンドを記載します。$ git config --global user.name "Your Name" $ git config --global user.email "youremail@example.com" $ git config --global crediential.helper "cache" $ git clone https://github.com/xxxx/xxxx.gitbotを起動
起動するプログラムがあるディレクトリにいる状態で
$ python filename.py
とします。
Minecraft (PC版) のサーバーを建てる
なんと,TermuxではJavaを動かせます。
さっそくインストールしましょう。
ここでは有志の方のものを使います。なお,OpenJDK 8となります。$ pkg install wget && wget https://raw.githubusercontent.com/MasterDevX/java/master/installjava && bash installjavaダウンロードが終わるまで時間がかかるかもしれません。気長に待ちます。
その後,java
と打ってヘルプが出てきたら完了です。server.jar をダウンロードする
サーバーは https://mcversions.net/ からダウンロードできます。
使用法については割愛します。
建てたいバージョンにあったサーバープログラムをダウンロードします。上のURLをコピーして,
$ cd ~ $ mkdir mcserver $ cd mcserver $ wget コピーしたURLを実行します。
貼り付けは,画面のどこかを長押しして出る「PASTE」を押すとできます。
ダウンロードできたら$ echo "eula=true" > eula.txt $ java -jar server.jarとします。
いろいろログが出て,ワールドの生成が行われます。
あまりにも性能が低いと,クラッシュする場合がありますので注意してください。また,Android 8以降ではこのままだと
$ java -jar server.jar Bad system call $となってしまいますので,このコマンドを実行する前に
$ proot -0を実行してください。
おわりに
いかがでしたか?結構できること,ありましたね。
ネットにはもっと詳しいことが書いてありますので,ぜひ挑戦してみてください。
それではよいTermuxライフを!
- 投稿日:2020-07-03T18:43:56+09:00
Flutter辞書
Widget
ー部品
Constraint Programming
ー制約プログラミング
「問題を制約の集合として記述してコンピュータに与えると、コンピュータが制約を充たした答を見つけてくれる」
ことを目指すプログラミング・パラダイムのことだと言えます。
Sandbox
コンピュータセキュリティ技術において、サンドボックスは、外部から受け取ったプログラムを保護された領域で動作させることによって、システムが不正に操作されるのを防ぐセキュリティ機構のこと
ただの英和辞典
- anatomy:解剖学
- emulate:模倣する
- deploy:展開する
- configure:構成・機能
- resource hog: A computer function that slows processing time.
その他
- みてから自分でやってみよう
- ノートをとるのはありだよ
- 動画は飛ばさない
- わからないことがあれば自分でググってみて、そのあと少し時間をおいてから見直すといいよ
- The most improtant thing is "Practice"
- 映画に出てくるような天才ハッカーはいない、エンジニアはその時間の90%は、画面を見つめてるだけ→そういうときはGoogleとstack over flowに頼ろう!
- Struggle is Good!
【The Complete 2020 Flutter Development Bootcamp with Dart】
にてわからなかった単語を抽出そん他技術的なこと
- 10.15以降のCatalinaならシェルの変更を
→AppleはmacOS Catalinaにおいてデフォルトのインタラクティブシェルをbashからzshに変更した。macOSとLinuxの双方を普段使いしているのであれば、macOSに合わせてLinuxのデフォルトシェルをzshに変更するのも1つの手と言える
-Piが出てこない問題
リソース
- 投稿日:2020-07-03T02:45:43+09:00
【Kotlin】onClickListenerのパターンとその使い分け方
はじめに
この記事では私がインプットした
onClickListener
の3つの記法と、そのメリットデメリットを記しています。今回記していくのは3パターンですが、私が恣意的にチョイスしただけで、この3つが全てを網羅している事など無いので悪しからず。一つ目:クラス全体に掛かるインターフェースを用いる
MainActivityに実装すると仮定したとき、クラス自体に
View.OnClickListener
のインターフェースを参照します。class MainActivity : AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) button1.setOnClickListener(this) } override fun onClick(v: View) { val b = v as Button textView.text = "${b.text} is pushed" } }この方法のメリットは、インターフェースから実装するのでミスが減るという事と、冗長なボタン処理をonCreate内に書かずに済むという事、複数のボタンに同じ処理を簡単に実装する事などが挙げられます。ボタンごとに異なる処理を書かないといけないときなどは、かえって分かりにくくなる場合もあるので、考えて使う必要があります。
二つ目:個々のボタンにメソッドを実装する
各ボタンに
setOnClickListener
メソッドを実装する方法です。class MainActivity : AppCompatActivity(){ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) button2.setOnClickListener { val b = it as Button textView.text = "${it.text} is pushed" } } }この方法は、複数個のボタンのそれぞれに全く異なる処理を実装させるときに便利です。各ボタンそれぞれに処理を書いていくので、処理が同じ複数のボタンがあるときには向きません。また、各ボタンについて書いていくので、全体としてコードが冗長になりがちです。
三つ目:変数に処理を代入する
ある変数に
View.OnClickListener
を介して処理を実装します。class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val listener = View.OnClickListener { val b = it as Button textView.text = "${b.text} is pushed" } button3.setOnClickListener(listener) }今回は
listener
という変数に処理を記述し、setOnClickListener(listener)
でボタンに適用させています。この方法のメリットは、複数個のボタンに同じ処理を適用させやすい事や、そういったケースが複数種類あるときも簡潔に記述できる事にあります。しかし、処理が複雑になるとonCreate内が冗長になってしまうというデメリットがあります。さいごに
今回は以上三つの方法と、そのメリットデメリットについてまとめました。勿論、細かい記法を変えることでさらにスマートに記述できるかもしれませんが、分かりやすさも兼ねてあの状態で記しておきます。意外とクリック処理を体系的にまとめている記事が無かったので、お役に立てれば幸いです。