気がつけば三ヶ月もあいてしまいましたが続きです。
仮想環境の使用方法は作成時とほぼ同じです。
1.作った仮想イメージ(ubuntu.img)をSDカードに入れてZenPadに挿入。
2.ターミナルアプリからubuntu.imgを適当な場所にループバックマウント
3.必要なデバイスファイルをつなぐ
4.root権限でchrootを実行
これでubuntu環境にログインできます。
準備
chrootは標準では入っていないので(Complete Linux Installer(Linux on Android))のbusyboxを使わせてもらいます。
このアプリをストアから入れると
/data/data/com.zpwebsites.linuxonandroid/files/busybox
にbusyboxがインストールされます。
それから毎回コマンドを打つのも面倒なので起動/終了(デバイスのアンマウント)用スクリプトを書いておきます。
ZenPadでは外部SDは”/storage/MicroSD”にマウントされるのでubuntuの仮想イメージ
は”/storage/MicroSD/ubuntu.img”にあることになります。
マウントポイントは”/storage/MicroSD/ubuntu”にすることとします。
root取得後のシェルは “/tmp-mksh/tmp-mksh” のようなので以下のようにしました。
start_ch.sh (起動用)
#ファイル位置指定
BBOX=/data/data/com.zpwebsites.linuxonandroid/files/busybox
SD=/storage/MicroSD
UBUNTU=$SD/ubuntu
USER=ichinomoto
#マウントポイントが無ければ作成
if [ ! -e $UBUNTU ]; then
mkdir $UBUNTU
fi
#マウント
cd $SD
mount -t ext4 -o loop $SD/ubuntu.img $UBUNTU
mount -o bind /dev/ $UBUNTU/dev/
mount -t devpts devpts $UBUNTU/dev/pts
mount -t proc proc $UBUNTU/proc
mount -t sysfs sysfs $UBUNTU/sys
#環境設定を行ってchrootの実行
$BBOX env -i TERM=linux SHELL=/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin DISPLAY=localhost:0 PULSE_SERVER=tcp:localhost:4712 $BBOX chroot $UBUNTU /bin/bash
stop_ch.sh (停止後のunmount用)
SD=/storage/MicroSD
UBUNTU=$SD/ubuntu
umount $UBUNTU/sys
umount $UBUNTU/proc
umount $UBUNTU/dev/pts
umount $UBUNTU/dev
umount $UBUNTU
どちらのスクリプトも実行前にsuでrootになってから実行する必要があります。
このためにその1でrootを取得しています。
start.shを実行すればchroot環境のubuntu内に居ることになるので、あとは普通に使うだけです。
そのままだとCUIしか使えない状態ですが裏でサーバーを動かしたいとかvimを使いたいなどという最小限の要望であればこれでも十分。
ソフトをパッケージ管理できるだけでもかなりの利点かと。
GUIを使えるようにする
CUI環境だけでも良いですが、せっかくなのでXを使えるようにします。
こういう環境でGUIを使う場合はよくxvfb+vncを使いますが、AndroidではGooglePlayにXserver SDLというXサーバーがあるのでこれを使います。
XServer XSDL
前回ユーザーを作ったので、以降はそのユーザーで操作することを前提に記載します。
XSDLに接続するための設定として
$export PULSE_SERVER=tcp:localhost:4712
が必要なのですが、上で書いた起動スクリプトの以下の部分に既に記載済みです。
$BBOX env -i TERM=linux SHELL=/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin DISPLAY=localhost:0 PULSE_SERVER=tcp:localhost:4712 $BBOX chroot $UBUNTU /bin/bash
マシンパワーもストレージサイズもそこそこあるのでxubuntuのデスクトップ環境をまるごと入れるのも有りです。
#unityは重そうなのと、デスクトップでも使っていないのでubuntu-desktopは試していませんが動くとは思います。
$xfce4-session
Xでつながってしまえばあとは大体通常のubuntuと同様です。
ここまでするとマウスとキーボードがほしくなるのでAndroid側でBTマウスやキーボードを接続しておくと良いかと思います。
こんな感じになります。普通のPCとほぼ変わりません。ストレージが遅いのとマウスの動作が怪しいですが…
まあせっかく作ったんですが実はあまり活用されてなかったり。
Android環境で十分なんですよねえ。
以下メモ
wineを入れてみる
せっかくなのでwineを入れてみます。
といっても手順は通常のデスクトップPCでインストールするのと同じ。
準備
archをamd64にした場合、必要なi386パッケージの参照先がsources.listに無くインストールできないのでapt-getの対象アーキテクチャにi386を追加。
参考:How to run 32-bit app in Ubuntu 64-bit?
#apt-get update
#apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
この次でwineのppaリポジトリを追加するのにadd-apt-repositoryコマンドが無いといわれるので先に入れておきます。
wineのリポジトリを追加してインストール
#apt-get install wine1.8
[2016/5/12 修正]
XServerSDLで使用するPULSE_SERVERの接続ポート番号が間違っていたのを修正
誤)PULSE_SERVER=tcp:localhost:4217
正)PULSE_SERVER=tcp:localhost:4712
はじめまして。こちらの情報を参考に(というより真似させていただいて)、私のところでも無事xubuntuが動きました!情報ありがとうございました!
ただ、もしかしてなのですが、Xサーバの番号、4217ではなく4712ではありませんか?私のところではこの番号でサーバに接続できず、サーバ画面を確認したら4712だったのですが、個体差でしょうか?
いずれにせよ、貴重な情報をおしげもなく公開していただいて、本当にありがとうございました!これから日本語化してみたいと思います。(Xubuntuの設定のLanguage設定を押しても起動しないのが??です)
ミスの指摘ありがとうございます。
こちらでも画面を確認したところPULSE_SERVERのポート番号は4712でした… 修正しておきます。
PULSE_SERVERのポートが間違っている場合おそらく音が鳴らないだけで、DISPLAYの方が合っていれば画面は出ていたのではないかと思います。
基本的にここに書いているのは備忘録的な次にやる時のための自分用メモなのですが、お役に立ったのであれば何よりです。
なるほど、私のところで画面が出なかったのはまた別の問題だったかもしれないですね。いずれにせよ感謝感謝です。ありがとうございました:)