TermuxでSambaを利用し、UbuntuからAndroid上のフォルダにアクセスする
1. 概要
USBケーブなどを用いた有線接続を行わずに、無線ランで接続してPCとAndroid間でファイルのやり取りを行うためにTermuxを利用した。Root化などを行わずにAndroid上でLinuxをエミュレートできるTermuxは、Android端末で様々なLinuxのソフトウェアを利用出来る。今回はTermux上でSambaを使用してUbuntuからAndroid上の無線LAN経由でファイルにアクセスする。検証した環境は以下の通り。
- PC: Ubuntu22.04
- Android端末: Google Pixel 6 (Android13)、Xiaomi Pad 5 (MIUI Global 13.0.4, Android11)
2. Termuxのインストール
Termux のインストール方法はGithub、F-Droidから行える。Google Play Storeからもインストール可能だが、サポートが中止されて旧バージョンのみインストール可能。
F-Droidのインストール
F-Droidはフリー&オープンソースに特化したアプリをインストール、更新が行えるアプリストア。今回、Termuxをインストールするために使用する。以下のリンクをAndroid端末で開き、APKファイルをダウンロードしてF-Droidをインストールする。
Termuxのインストール
F-DroidでTermuxと検索し、Termuxをインストールする。他にも以下の拡張機能をインストールすると便利。
- Termux:API : Androidのカメラなどのハードウェアを操作出来る
- Termux:Boot : 起動時に任意のコマンドを実行できる
- Termux:Widget : 任意のShell Scriptを実行可能なWiggetをホーム画面に配置できる
3. Termuxの初期設定
Termuxを起動したらアップデートを行う。インストール途中で色々質問されるが、すべて何も入力せずEnterを押してデフォルトで設定しておいた。
$ pkg update
これから使用するパッケージをインストールする。
$ pkg install -y openssh
$ pkg install -y samba
$ pkg install -y emacs # ファイルを編集する際に使用
$ pkg install -y termux-api # Termux:APIを使用する場合
Android内のストレージを参照したいので、TernuxにAndroidストレージをマウントする。
$ termux-setup-storage
4. SSH接続
Ubuntu PC側で認証鍵を生成していない場合、鍵を生成しておく。
$ ssh-keygen -t rsa -b 4096
Termux側でパスワードを変更し、SSHサーバーを起動する。
$ passwd # パスワードの変更
$ sshd # SSHサーバーの起動
$ ifconfig # ipアドレスの確認
PC側でのPCの公開鍵をTermux側にコピーする。TermuxのSSHポートはデフォルトで8022なのでポート番号に8022を指定する。ユーザー名はrootにしているが何でも良いみたい。
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub -p 8022 root@[AndroidのIPアドレス]
最後にSSHでPCからTermuxに接続できることを確認する。
ssh -p 8022 root@[AndroidのIPアドレス]
5. Sambaの設定
SambaをTermuxにインストールした後、Sambaへユーザーを追加し、smb.confを編集する。
Sambaへユーザーを追加
smb.confをコピー。
$ cp /data/data/com.termux/files/usr/share/doc/samba/smb.conf.example $PREFIX/etc/smb.conf
ユーザーの追加とパスワードの設定。ユーザー名の"hoshi"の部分は適当に決める。
$ smbpasswd -L -c $PREFIX/etc/smb.conf -a hoshi
smb.confを編集
ファイルの末尾の方にある[internal]の項目のPathを編集する。
[internal]
comment = Internal storage
path = /data/data/com.termux/files/home/storage/shared/
vfs objects = aio_pthread
aio_pthread:aio open = yes
read only = no
browseable = no
writable = yes
guest ok = no
編集したらサーバーを起動する。
$ smbd -D -s $PREFIX/etc/smb.conf
ファイルマネージャーからAndroidのフォルダにアクセス
ファイルマネージャーを起動し、「他の場所」を選択し「サーバーへ接続(s)」の欄にsmb://[AndroidのIPアドレス]:4445/internal/
と入力し、「接続」を押す。接続時に設定したユーザー名、パスワードを入力して接続する。
6. 各サーバーを起動するコマンドについて
以下の3つのコマンドはTermuxを起動するたびに実行する必要があるので、シェルスクリプトに書いておくか、Termux:BootやTermux:Widgetを利用すると便利。
termux-wake-lock # TermuxをBackgroundでも実行出来るようにする。
sshd # sshd起動
smbd -D -s $PREFIX/etc/smb.conf # smdb起動
Discussion