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

UserLAnd とブラウザ

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

Termux で持ち運べるモバイルリポジトリを作る Mercurial/Git

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 上の開発環境と 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

Snapdragon 845 の浮動小数点演算速度

Snapdragon 845 の CPU は Qualcomm の Kryo 385 が使われています。big.LITTLE の 8 core (4+4) 非対称構成なので、ぞれぞれの CPU core 毎に測定してみました。下記はいずれも big.LITTLE 構成の CPU を使った SoC です。

Device Single thread Multi thread
SoC CPU Core big little big little Total
Snapdragon 845 Kryo385 4+4 22.3 13.7 84.4 54.9 139.3 GFLOPS
Exynos 7420 A57+A53 4+4 16.8 11.8 55.5 47.1 102.6 GFLOPS
Rockchip RK3399 A72+A53 2+4 16.1 11.8 32.1 47.2 79.3 GFLOPS
Snapdragon 808 A57+A53 2+4 14.5 11.2 29.1 44.9 74.0 GFLOPS
Snapdragon 821 Kryo 2+2 18.7 12.6 37.4 25.3 62.7 GFLOPS

・big = big core, little = little core
・Total = Multi thread の合計

vfpbench の単精度の結果のみ抜き出しています。単位は GFLOPS 。数値が大きい方が高速です。

表の CPU は Kryo, Kryo 385 (A75), Cortex-A57 いずれも 64bit x2 pipe なので、ピーク性能の差は純粋に core 数と clock 数で決まっています。

同様に little core の Cortex-A53/A55 も 64bit x2 の FP pipe を持っているので、数値上はほぼクロック差だけの違いとなっています。32bit 時代の little core Cortex-A7 と比べると性能は大きく上がっています。

初代 Kryo は Qualcomm 独自 core ですが、Snapdragon 845 の Kyro 385 は ARM Cortex-A75 + A55 がベースになっているようです。そのため Snapdragon 845 Kryo 385 の特性は初代 Kryo は異なっています。

例えば Kyro と Kyo 385 は積和命令のピーク演算はどちらも同一ながら、加算だけなら Snapdragon 821 の Kryo の方が 2倍速く回っています。

下記の表は 1 cycle に実行できる命令数 (IPC)

Device 64bit 128bit
CPU Core mul/fma add mul/fma add
Kryo (Snapdragon 821) 2 4 1 2
Kryo 385 (A75/A55)/A72/A57/A53 2 2 1 1

Kryo 385 のもとになった Cortex-A75 は ARM の新しい命令セットに対応しています。

Kryo 385 (A75/A55) ARMv8.2-A
Cortex-A72/57/53 ARMv8.0-A

以前の fp16 (半精度浮動小数点) 対応は変換命令だけでした。ロードストアは fp16 でも演算は fp32 以上に変換してから行います。v8.2 対応の A75/A55 では Deep Learning 向けに 16bit 命令が強化されています。fp16 のまま直接演算できるようになりました。

ARM FPU (VFP/NEON) の種類

例えば NEON (Advanced SIMD) では 128bit 時に 8並列で演算が行われます。単精度 32bit と比べると 2倍の速度が出るはずなので、余裕があったら試してみたいと思います。

テストに使った機種の詳細

Pixel 3 Snapdragon 845 SDM845 4+4 Kryo 385 (A75/A55) 2.8GHz 1.8GHz
Galaxy S6 Exynos 7420 4+4 Cortex-A57/A53 2.1GHz 1.5GHz
C101PA Rockchip RK3399 2+4 Cortex-A72/A53 2.0GHz 1.5GHz
ZenfoneAR Snapdragon 821 MSM8996 2+2 Kryo 2.3GHz 2.1GHz
Nexus 5X Snapdragon 808 MSM8992 2+4 Cortex-A57/A53 1.8GHz 1.4GHz

関連エントリ
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd
ARM CPU の浮動小数点演算能力まとめ
HTC 10 Snapdragon 820 Kyro の浮動小数点演算能力
HTC 10 Snapdragon 820 Kyro の浮動小数点演算能力
iPhone SE, Apple A9 の浮動小数点演算速度
Raspberry Pi 3 の速度比較, Cortex-A53 の速度
ARM Cortex-A53 の浮動小数点演算速度とコンパイル時間の比較
iPod touch 6 の浮動小数点演算速度は Core 2 Duo ライン超え
iPad Air 2 (Apple A8X) の浮動小数点演算能力

OS の中の Linux (WSL/Chrome OS/Android UserLAnd)

いろんな OS の中で Linux 環境が使えるようになってきました。OS の中に同居し、Native なアプリと同時に Linux のソフトウエアも走らせられるようになっています。ハードウエアまるごとエミュレーションする仮想 PC とは異なります。RAM やストレージに境界はなく、カーネルをそのまま共有しつつシステムに間借りする形で動きます。

Windows WSL (Windows Subsystem for Linux)
Chrome OS Linux Apps, Crouton, Android Apps
Android UserLAnd

● Windows 10 WSL

複数の Distribution が用意されており、Microsoft Store からアプリとしてインストールできます。事前に WSL を有効化しておく必要があります。

(1) 設定→ 「アプリと機能」→「プログラムと機能」→「Windows の機能の有効化または無効化」
(2) 「Windows Subsystem for Linux」にチェックを入れて再起動。

● Chrome OS (Chromebook/Chromebox 等)

ChromeOS は Chrome Browser のための Platform です。普段 PC で Chrome ブラウザを使っているなら、Chrome OS に触ると大半の作業がブラウザで事足りることに気が付きます。利用できる Chrome アプリは限られているものの、必要なら Android や Linux アプリを使うことができます。アプリ選択の自由度は意外に高くなっています。

現在 Chrome OS デバイスで Linux を走らせる方法は複数あります。それぞれ複数の Distribution から選ぶことができます。(Linux Apps を除く)

公式に対応した Linux Apps は対応機種がまだ少ないですが、Developer mode に切り替える必要がないので非常に扱いやすくなりました。

インストール&起動方法で分けると下記の 3種類です。

(1) Native Install

 普通の PC と同じように Linux をゼロから install します。Gallium OS 他。

(2) Dualboot (ChrUbuntu)

 カーネルを流用して Linux を起動します。boot 時に選択します。(ChrUbuntu)

(3) Chrome OS と同居

 コンテナとして Chrome OS 上で動きます。Chrome OS と同時利用が可能。

さらに (3) の方法にも複数の選択肢ができました。

1. Crouton : chroot で Linux を install。古くから存在し多くのデバイスで利用可能。

2. Android Apps : Android アプリとして Linux 環境 (UserLAnd 等) を install

3. Linux Apps (crostini) : ChromeOS 公式の Linux 環境

2. および 3. は比較的新しい機種のみ対応しており、古い機種では使うことができません。

なお Crouton は Chrome OS 内に Linux Desktop を表示できますが、X11 の動作モードが 2種類あります。(sudo startsfce4 -X xiwi 等のオプションで切り替え)

・xiwi : Chrome OS のウィンドウの一つとして表示。ソフトウエア描画。

・xorg : 全画面を乗っ取ってしまうがハードウェアアクセラレーション対応。

下記画面は Crouton の xiwi で Linux Desktop を表示したものです。

{image}

GitHub: Crouton
GitHub: ChrUbuntu
Gallium OS

● Android

(UserLAnd) は Android アプリとして Linux 環境を install します。root 無しに利用可能で、複数の Distribution から選ぶことができます。現在は Arch, Debian, Kali, Ubuntu の 4種類用意されているようです。

アプリからは SSH Terminal, VNC の 2種類の接続方法を選ぶことができます。公式サイトにあるように X Server も使えます。

 1. アプリ install
 2. 任意の Distribution を選択 (Debian, Ubuntu 等)
 3. フォルダへのアクセス許可
 4. ユーザー名とパスワードの入力
 5. 利用方法の選択 (SSH or VNC) あとから変更可能
 6. 初回のみ ConnectBot or bVNC Free の install
 7. 6. で install した場合はアプリに戻ってもう一度選択すると起動

VNC 利用時の desktop install 手順。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install lxde
$ mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
$ cp /usr/bin/startlxde ~/.vnc/xstartup

VNC の解像度変更方法

“~/.vnc/tightvncserver.conf” を作成して下記のように任意の解像度を書き込む。この指定がない場合 1024×768 になっています。

$geometry = "1280x720"

2160×1080 や 1920×1080 等、スマートフォンで実解像度を指定すると小さすぎて文字が読めなくなる可能性があるので注意。↓ は ZenFone AR の画面です。

null

UserLAnd

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