Archives

January 2019 の記事

Firefox だけでなく Chromium-browser も使えるらしいので使ってみました。ただし --no-sandbox オプションが必要です。(参考にしたページ)

UserLAnd Ubuntu で動く Chromium (Essential Phone PH-1)
null


● Install と起動方法

Debian の場合

$ sudo apt install chromium
$ chromium --no-sandbox

Ubuntu の場合

$ sudo apt install chromium-browser
$ chromium-browser --no-sandbox

2018/01/31 現在、Ubuntu では Firefox が正しく動いておらず起動しても黒い画面のまま固まってしまいます。Chromium が代わりに使えそうです。

Debian では Firefox も問題なく動いています。


● 画面分割

Android 7 以降なら画面分割が可能なので Android のブラウザを併用する方法もあります。

画面分割で Ubuntu と Android の Chrome と併用↓
null

UserLAnd の desktop は VNC でも XServer XSDL (X11) でも Software Rendering なので、速度と安定度を重視するなら画面分割もお勧めです。

Android 9 Pie だと XServer XSDL が restart を繰り返してしまい起動できないようです。Essential Phone と Pixel 3 の両方で確認。VNC は動きます。


関連エントリ
Android 上の開発環境と UserLAnd
OS の中の Linux (WSL/Chrome OS/Android UserLAnd)
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd


Linux だと同期できるオンラインストレージの選択肢があまりありません。ARM だとなおさらで、ARM 向けの公式クライアントが用意されていなかったりします。今まで設定ファイルの共有に Dropbox を使い Mercurial で履歴管理をしていたのですが、arm 機種の Termux/UserLand では代わりの手段が必要になりました。

最近のスマートフォンは内部ストレージも増えているので、手持ちの Android スマートフォンを持ち運べるリポジトリにしてみます。

UserLAnd なら GitBucket もそのまま動きます。簡単に高機能なリポジトリサーバーを実現できますが UserLAnd はファイルアクセスがあまり速くありません。固定のリポジトリなら ssh で十分なので、今回は Termux を使用しました。

termux の ssh については こちら(Termux wiki) を参考にしました。

以降のコマンド表記でプロンプト '$' はすべてスマートフォンの Termux 上の操作になります。プロンプト '>' は PC (Windows/macOS/Linux) 等、他のデバイスからの操作を意味しています。


● Termux に SSH で接続する

$ pkg upgrade
$ pkg install openssh

termux はデフォルトで ssh の Password 認証が有効になっています。

まず termux に password を設定します。

$ passwd

sshd を起動します。

$ sshd

これで ssh で接続できるようになります。ポート番号は 8022 です。

最近の Windows 10 には最初から OpenSSH が含まれているので、PC のコマンドラインから下記のように実行するだけで接続することができます。

> ssh <AndroidIPAddress> -p 8022

もちろん Putty 等の client も使えます。Putty の場合 user name はダミーで何でも OK です。


● Termux に git / mercurial を install する

termux 上で git を install しておきます。

$ pkg install git

Mercurial の場合 termux に pakcage が用意されていませんが、pip を使って install することができます。

$ pkg install python2 python2-dev clang
$ pip2 install mercurial



● Termux 上に repository を作る

リポジトリを termux 上で作るか、または既存のリポジトリを Termux にコピーします。

新規に作る場合任意のフォルダで init。

$ mkdir ~/repository_git
$ cd ~/repository_git
$ git init

$ mkdir ~/repository_hg
$ cd ~/repository_hg
$ hg init


既存のリポジトリをコピーする場合は scp (WinSCP 等) を使うことができます。Git の場合は .git フォルダ、Mercurial の場合は .hg フォルダを Termux にコピーするだけです。他にサーバーがあるなら Termux 上で clone しても構いません。

> scp -r -P 8022 .hg <AndroidIPAddress>:repository_hg/

あとは普通にスマートフォン上のリポジトリにアクセスできます。下記は PC 等他の Device からの操作になります。

> git clone ssh://<AndroidIPAddress>:8022/~/repository_git

> hg clone ssh://<AndroidIPAddress>:8022/repository_hg

git の場合は絶対パスなので HOME 相対には ~ が必要です。mercurial は常に HOME からのパスになるようです。反応が鈍い場合はスマートフォンのロック(スリープ)を解除してみてください。


● Termux に public key 認証でログインする

git / hg の同期時に毎回パスワードを入力するのは手間なので、public key 認証を使ってみます。Windows 10 も Linux 等、他の OS と手順は同じです。

> ssh-keygen

id_rsa.pub をスマートフォンに転送します。このファイルは Windows の場合 C:\Users\<ユーザー名>\.ssh 以下にあります。転送は scp でも良いですし、もっと簡単に USB 接続して直接ファイルコピーしても構いません。

termux 上で共有 storage にアクセスできるようにしておきます。

$ termux-setup-storage

例えば Android の Download フォルダに転送した場合 ~/storage/downloads/id_rsa.pub でアクセスできるようになります。

id_rsa.pub の内容を Termux の authorized_keys に追加します。

$ cd ~/.ssh
$ cat ~/storage/downloads/id_rsa.pub >> authorized_keys
$ chmod 600 authorized_keys

これで git/hg の同期の度に password を毎回打たなくて済むようになりました。


● 使用してみて

バックアップには向かないのであくまで外出時の同期用にしています。設定ファイルだけでなく、個人で使うプロジェクトには十分使えそうです。



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


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 解像度 (2160x1080, 2560x1440 等) をそのまま指定すると文字が小さすぎるので注意。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? '("<Control> " "<Control>g"))
(define-key generic-off-key? '("<Control> " "<Control>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