スマホにubuntu環境のセットアップ
android スマートフォン(termux)でubuntuを動かすよ。
方針ざっくり
やりたいこと
PCからsshログイン可能に
ログインしたらすぐにubuntu環境に入るように
デフォルトを非rootユーザーに
proot-distroを使って脱獄なしでubuntu環境を用意する
最初にスマホでsshの最小構成作って、PCからログイン
その後はPCからログインして好きにする
ubuntuに非root権限のユーザー作成して、sudoもできるようにします
検討事項
Cursorの接続が不安定すぎる
VS Codeのときはこんなにひどくなかった印象
VS Code CLIを利用すると、一瞬で快適な作業空間を作れてしまった
vscode.devでよいのだから手元の重たいソフトウェアも特に必要ない
setupをあとで書き換えておく
ssh最短手順
code:.sh
pkg update
pkg upgrade
pkg install openssh
passwd
ifconfig
whoami
sshd
これでPCのターミナルから入れるようになった。
以後はPCから作業する
ただし、この時点ではubuntu環境ではないので、たとえばVS Codeは接続できない
ubuntuのセットアップ
ubuntuのインストール
ユーザーの作成
Android用Cursor Serverの導入
code:.sh
pkg install proot-distro
proot-distro install ubuntu
proot-distro login ubuntu
apt update
apt upgrade
useradd -m (ユーザー名)
passwd (ユーザー名)
# cursor
wget https://raw.githubusercontent.com/MaheshTechnicals/cursor-free-vip-termux/refs/heads/main/cursor.sh
chmod +x cursor.sh
sudo bash cursor.sh -i
rm cursor.sh
ユーザーにsudo権限を与えます
code:.sh
apt install sudo
export EDITOR=$(which nano)
visudo
以下を追記
code:/etc/sudoers
(ユーザー名) ALL=(ALL:ALL) NOPASSWD:ALL
編集が終わったら exitして通常のtermux環境に戻ります
termux側の.bash_profileを以下のように変更
termuxを一度開くとsshdをバックグラウンドで起動する
ログイン時に自動でubuntuに入る
code:~/.bash_profile.sh
# ~/.bash_profile (non-root ユーザー)
# ---- guard: Android(Termux) 以外は何もしない
"$OSTYPE" != "linux-android" && return
# ---- 明示的に自動ログインをバイパスさせたいとき用のフラグ
if -n "$SKIP_PD_AUTOSTART" ; then
return
fi
# ---- 対話シェル/ローカル端末のみで自動起動(SSH 経由では走らせない)
# $- に i が含まれる=インタラクティブ、SSH 経由は SSH_CONNECTION が空でない
if "$-" == *i* && -z "$SSH_CONNECTION" ; then
# 端末用 sshd
pgrep -f "sshd -D -p 8022" >/dev/null || (sshd -D -p 8022 &)
# Ubuntu 側: VS Code 等用の sshd
pgrep -f "sshd -D -p 8023" >/dev/null || \
(proot-distro login ubuntu -- sshd -D -p 8023 &)
fi
# ---- 既定で Ubuntu にログイン
proot-distro login --user (ユーザー名) ubuntu
# exit 0
sshdをubuntu / termux nativeどちらの環境でホストするか?
答え:両方建てとけばいいじゃん
sshdをubuntu環境で実行した場合
sshdをUbuntuで実行すると、remoteからのssh直後の環境がubuntuになります
sshdをubuntu環境で実行することにより、VS CodeやCursorが接続できるようになります
VS Codeは、sshログイン直後の環境でVS Code サーバーのプロセス起動を試みるからです
そのかわり、そのセッションではproot-distro loginが使用されていないため、proot ubuntuのhomeディレクトリなどが正しく設定されていません
login時に通常実行されるディレクトリのバインド処理が行われていないと思われます
proot-distro loginを追加で使用してもfatalエラーになります
sshdをtermuxで実行した場合
まずtermuxからログインして次にproot-distro loginを実行すれば、一貫性のあるファイルシステム内で作業できます
しかしログイン直後の環境がubuntuではないので、VS Code等の実行はできません
さらに、termux homeにある.bashrcを変更します
Cursorの統合ターミナルでログインしたときの挙動をここで調整します
Cursorの統合エディタから$CURSOR somefileと打つことで、そのファイルをCursorで編集できるように設定しています。
そのためには環境変数の持ち込みが必要で、一時ファイルを作成してubuntu側に読み込ませています。
code:.bashrc.sh
# Cursor統合ターミナル用環境変数共有ユーティリティ
change_user() {
local user_home="/home/(ユーザー名)"
local shared_env_file="$user_home/.share-env.tmp"
# 環境変数をファイルに出力
{
-n "$VSCODE_IPC_HOOK_CLI" && echo "export VSCODE_IPC_HOOK_CLI='$VSCODE_IPC_HOOK_CLI'"
if command -v cursor >/dev/null 2>&1; then
echo "export CURSOR='$(command -v cursor)'"
fi
-n "$TERM_PROGRAM" && echo "export TERM_PROGRAM='$TERM_PROGRAM'"
} > "$shared_env_file"
chmod 644 "$shared_env_file"
su - (ユーザー名)
}
if -n "$VSCODE_IPC_HOOK_CLI" || "$TERM_PROGRAM" == "vscode" ; then
change_user
exit 0
fi
ubuntuの~/.zshrcに次を追記しましょう
code:.zshrc.sh
# ---- 環境変数の読み込み (.share-env.tmp)
# ~/.share-env.tmp の内容を読み込み、読み込んだ後に削除
if -f "$HOME/.share-env.tmp" ; then
. "$HOME/.share-env.tmp"
# 読み込み後に削除
rm -f "$HOME/.share-env.tmp"
fi
統合ターミナルは今回に限ってやや複雑な挙動をします
1. 統合ターミナルの開始時にはubuntu環境にroot userでログインした状態から始まります
2. 普段のアカウントにログインしなおす設定を書きたいわけですが、ホームディレクトリは(/rootではなく)termux nativeと同じ場所になっています。
3. そのため、設定ファイル(.bashrc)は(ubuntu環境にすでに入っているのに)termux homeに配置しなければならないのです。
なお、.bashrcは「非ログインシェルだがインタラクティブモードの場合」にのみ読み込まれます。
Cursorの統合ターミナルはcursorコマンドですぐにファイルの編集を開始できるよう環境変数が設定されています
そこでその持ち越しもここで行っています
ファイルに一時保存して、ubuntu側の設定ファイルから読み込んでいます
あとはプロセス監視用にhtopもいれておきます
code:.sh
pkg install htop
手元のPCの.ssh/configに、termuxに対応するconfigを書いておきましょう
./.ssh/termux(.pub) に鍵を作成したとします
code:ssh_config
Host termux
HostName 192.168.??
User ??
Port 8022
IdentityFile ~/.ssh/termux
Host termux:ubuntu
HostName 192.168.??
User ??
Port 8023
IdentityFile ~/.ssh/termux
これで基本的な環境整備は完了ですね
see also
termuxの見た目整える+ 追加設定