日別アーカイブ: 2019年1月24日

Android 上の開発環境と UserLAnd

Android 上の開発環境のまとめページを作成しました。

Android の上の開発環境

UserLAnd は root 不要で、アプリとして Linux 環境をそのまま Android 上で走らせることができます。Store から install するだけで済み、Windows 10 の WSL のように手軽に扱えます。

Google Play: UserLAnd

ただの 1アプリとしてユーザーモードで走りますが、proot を使うことでほぼ完全な Linux 環境を作り出しているようです。例えば proot の下でファイルを作成すると、隠しファイル .proot-meta-files.* が作られます。この meta-file の中には独自の file mode (644等) と UID/GID が記録されており、user 管理やファイルパーミッションが再現されています。同じように Hard Link を用いると .proot.l2s.* といった管理ファイルが作られています。これは Symbolic Link で代用するための仕組みです。

反面、meta-file があるためファイルアクセスには追加のコストが発生しているようです。以前行ったコンパイル時間のテストを見ても、termux と比べるとビルド速度が落ちていることがわかります。それでも Android 上でほぼ完全な Linux 環境がそのまま動くのは非常に魅力的です。

ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd

現在 Arch, Debian, Kali, Ubuntu の 4つの Linux Distribution を選択可能で、それぞれ別のストレージ領域が割り当てられます。SSH を使った Console または VNC を使った Desktop を選ぶことができます。SSH or VNC はいつでも切り替え可能です。

以前は外部アプリとして SSH client が必要でしたが、UserLAnd の新しい Version では SSH Terminal が統合されました。Connect Bot の install が不要になっています。

ZenFone AR の UserLAnd (Debian)
null

以下いくつか設定などのメモ

● Install

UserLAnd アプリを Install したあと、任意の Distribution を選択するだけです。最初に外部ストレージへのアクセス許可と、ログインに使う user name や password の設定が必要です。

● SSH / VNC 切り替え

UserLAnd アプリの Distribution 名を長押しで App Info から設定できます。切り替え時は一旦 UserLAnd の再起動が必要です。Distribution 名を長押しして Stop App で止めてから、さらに UserLAnd アプリを終了して再び起動します。

● Desktop の install 方法

最初に SSH, VNC どちらを選んでも構いません。

sudo apt install lxde

その後 VNC に切り替えます。(一旦止めるのを忘れないように)

● VNC の解像度設定

Debian の場合は ~/.vncrc 、Ubuntu の場合は ~/.vnc/tightvncserver.conf に下記の内容を書き込む。

$geometry = "1280x720"

Smartphone の Native 解像度 (2160×1080, 2560×1440 等) をそのまま指定すると文字が小さすぎるので注意。720p 前後がおすすめです。

・ZenFoenAR (2560x1440)            : $geometry = "1280x720"
・Pixel 3 (2160x1080)              : $geometry = "1440x720"
・Essential Phone PH-1 (2560x1312) : $geometry = "1330x720"

● Keyboard / Mouse

Desktop を使う場合は Buletooth Keyboard / Mouse の併用をお勧めします。Gboard や Google 日本語入力なら物理キーボードのレイアウトを選択できます。Ctrl/Caps/ESC 等の配列変更には106/109ハードウェアキーボード配列変更(+親指Ctrl)がお勧めです。

Google Play: 106/109ハードウェアキーボード配列変更(+親指Ctrl)

● SSH 経由のアクセス

PC 等から SSH 経由でアクセスきます。port は 2022。

$ ssh <AndroidIPADDR> -p 2022

SSH (console) モードでは何もせずそのまま接続できます。VNC mode では下記のように予めサーバーを起動しておく必要があります。

$ sudo /support/startSSHServer.sh

● Android 外部 Storage へのアクセス

/sdcard でアクセスできます。例えば Android でダウンロードしたファイル一覧を見るには下記のようになります。

$ ls /sdcard/Download/

● ブラウザ

2019/01 現在 Ubuntu では Firefox の画面が真っ黒で見えなくなっています。Debian では動いています。Android 7 以降なら画面分割できるので、Android のブラウザを併用する方法もあります。

● 自分自身への adb 接続

Android を Developer mode にしたあと一旦 PC に USB 接続して adb で tcpip に切り替えておきます。

PC 上で “adb tcpip 5555” を実行。

これで Android (UserLAnd) 上では adb で自分自身が “emulator-5554” として見えるようになります。

$ sudo apt install android-tools-adb
$ adb devices

● 日本語入力

SSH 等の Console では uim-fep, uim-mozc が使えます。下記手順は Ubuntu の場合。

$ sudo apt isntall language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF-8
$ sudo dpkg-reconfigure tzdata
$ sudo apt install uim-fep uim-mozc

ファイル ~/.uim を作成 (任意)

(define default-im-name 'mozc)
(define-key generic-on-key? '(" " "g"))
(define-key generic-off-key? '(" " "g"))

起動方法

$ export LANG=ja_JP.UTF-8
$ uim-fep

上の設定例では Ctrl + SPACE または Ctrl+G で入力モードを切り替えています。なお Android 9 Pie では Android 側で Ctrl + SPACE が使われており Console への入力ができないようです。使えない場合は代わりに Ctrl + @ を試してみてください。Android 7 では Ctrl + SPACE が使えました。

Desktop の場合。下記手順は Debian の場合。

$ sudo apt install lxde
$ sudo apt install task-japanese
$ sudo apt install task-japanese-desktop
$ sudo apt isntall fonts-takao
$ sudo dpkg-reconfigure tzdata
$ sudo dpkg-reconfigure locales

一旦 UserLAnd 再起動。

Debian streatch には mozc の arm64 が無いのでそのままではインストールできません。下記ページを参考にさせていただきました。
 ・matoken’s meme: Debian, Ubuntu で 上流のパッケージを借りてくる

上のページを参考に buster を追加してから

$ apt install uim-mozc

入力切り替えキーの設定は Desktop Menu から「設定→入力メソッド→全体キー設定」。Terminal は LXTerminal を使用。

日本語設定の参考にしたページ
 ・WSLのUbuntu環境を日本語化する
 ・uim-fepとuim-anthyの使い方と設定方法
 ・WSLのDebian環境を日本語化する
 ・Debian, Ubuntu で 上流のパッケージを借りてくる

● 他の Distribution ファイルへのアクセス

ストレージ領域は /data/data/tech.ula/files/ 以下にあります。Filesystem を作るごとに /data/data/tech.ula/files/1 ~ と番号が割り振られています。例えば Debian の設定を書き換えてうまく起動しなくなった場合、Ubuntu から直接ファイルを修正することが可能です。

ただし他のストレージでは proot meta-file が直接見えてしまうので、meta-file に矛盾しない修正に留めておいた方が良いでしょう。ファイル内容の修正だけなら問題ありません。

● PC の X11 server に直接接続

VNC の場合は事前に UserLAnd 上で SSH Server を起動しておいてください。

Windows の場合は何らかの X11 server を起動しておきます。Microsoft Store にある X410 や VcXsrv 等。PC から (Windows の場合は WSL を想定) 下記のように SSH 接続します。

$ export DISPLAY=localhost:0.0
$ xhost +<AndroidIPAddress>
$ ssh -Y <AndroidIPAddress> -p 2022
$ xterm

関連エントリ
OS の中の Linux (WSL/Chrome OS/Android UserLAnd)
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd
Android/Linux MaruOS その4
Nexus 7 上に開発環境をつくる (4) Ubuntu 13.04