🐕

TermuxでSambaを利用し、UbuntuからAndroid上のフォルダにアクセスする

2022/12/19に公開

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 のインストール方法はGithubF-Droidから行える。Google Play Storeからもインストール可能だが、サポートが中止されて旧バージョンのみインストール可能。

https://termux.dev/en/

F-Droidのインストール

F-Droidはフリー&オープンソースに特化したアプリをインストール、更新が行えるアプリストア。今回、Termuxをインストールするために使用する。以下のリンクをAndroid端末で開き、APKファイルをダウンロードしてF-Droidをインストールする。

https://f-droid.org/

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