借助ubuntu电脑,给安卓手机安装整套ubuntu14.04的方法(高度定制,全中文界面)

笔记本/便携移动设备,手机平板等软硬件
头像
ljj_jjl2008
论坛版主
帖子: 14255
注册时间: 2007-09-16 8:29

借助ubuntu电脑,给安卓手机安装整套ubuntu14.04的方法(高度定制,全中文界面)

#1

帖子 ljj_jjl2008 » 2014-06-02 18:13

首先说明:这个方法不是我原创的,仅是网上搜索并东拼西凑出来的,但已经经过实践验证。
主要参照了以下几个帖子:
1、本论坛 felonwan的帖子。他的帖子里面的链接失效了,所以仅借用了他的脚本和思路。而如何生成ubuntu的img文件,则借用了其他帖子。
viewtopic.php?f=177&t=451917
2、以下两个帖子(关于如何生成ubuntu的img文件的,但是没有提供手机启动脚本):
http://www.oschina.net/translate/how-to ... -phone?cmp
http://blog.sina.com.cn/s/blog_5f52c0600100u86x.html
其实第二个帖子是我写的,但是发现论坛内居然被删除了,然后希望搜索到某个镜像,真的搜索到了(稍微有点不全)。

闲话说完,以下正式开始:

原理:
主要原理见felonwan的帖子,我做的和他的有一点差异。具体做法如下:
1、在ubuntu的电脑上,利用chroot、debootstrap和qemu-arm-static三个命令,虚拟出一个手机环境,并安装好软件,做成一个img文件。
2、把这个文件拷贝到安卓手机,用命令启动它,并利用Xerver XSDL输出图形界面。

几个注意点:
1、支持手机arm构架的源很少,至少国内的几个源,都不支持(仅支持intel和amd的构建)
2、这种虚拟的环境,和手机环境总归有点差异,所以移植到手机后,有些软件不能执行。所以如果要调整什么软件,尽可能还是在ubuntu的虚拟环境中进行,然后将img文件复制到手机。
3、手机屏幕太小了,所以实际效果并不好,基本上这就是一个玩具。
4、占用空间比较大,手机没有4G以上空闲空间就不要折腾了。
5、手机必须root。

具体操作
一、生成可用的镜像,并安装你喜欢的软件:
1、为ubuntu设置QEMU和ARM二进制以及asdebootstrap支持:

代码: 全选

sudo apt-get install debootstrap qemu-user-static qemu-system git gcc-arm-linux-gnueabihf binfmt-support
2、创建镜像文件系统(我创建了3GB的),格式化成ext4,并挂载在/mnt目录中。

代码: 全选

dd if=/dev/zero of=ubuntu.img bs=1024 count=3145728
mkfs.ext4 ubuntu.img
sudo mount -o loop ubuntu.img /mnt
注意:4.2以下的安卓,请格式化成ext2。

3、使用debootstrap来部署基础环境,并将qemu-arm-static复制进基本环境中:

代码: 全选

HOSTNAME=ubuntu-armhf sudo debootstrap --variant=minbase --foreign --arch armhf trusty /mnt
sudo cp /usr/bin/qemu-arm-static /mnt/usr/bin/
4、用qemu-arm-static完成剩下的部署工作:

代码: 全选

LANG=zh_CN.UTF-8 sudo chroot mnt /usr/bin/qemu-arm-static -cpu cortex-a15 /bin/bash
./debootstrap/debootstrap --second-stage
注意:自己查一下自己的手机cpu型号,改一下 cortex-a15 这个参数。
我的酷派大神f1其实是cortex-a7,但是也许是太新了,现在还不支持,所以选了较为接近的cortex-a15。

5、一旦上面的工作完成了,我们需要安装apt源,并更新:

代码: 全选

echo "deb http://ports.ubuntu.com trusty main restricted universe multiverse" > /etc/apt/sources.list
echo "deb http://ports.ubuntu.com trusty-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://ports.ubuntu.com trusty-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://ports.ubuntu.com trusty-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://ports.ubuntu.com trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://ports.ubuntu.com trusty main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://ports.ubuntu.com trusty-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://ports.ubuntu.com trusty-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://ports.ubuntu.com trusty-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://ports.ubuntu.com trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 428D7C01
apt-get update
apt-get dist-upgrade
6、配置中文环境,调整时区。

代码: 全选

export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
chmod -R 777 /var/lib/locales/supported.d/
cd /var/lib/locales/supported.d/
touch ja
touch ko
touch zh
chmod -R 777 /var/lib/locales/supported.d/
echo "ja_JP.UTF-8 UTF-8" >>ja
echo "ja_JP.EUC-JP EUC-JP" >>ja
echo "ko_KR.UTF-8 UTF-8" >>ko
echo "ko_KR.EUC-KR EUC-KR" >>ko
echo "zh_CN.UTF-8 UTF-8" >>zh
echo "zh_TW.UTF-8 UTF-8" >>zh
echo "zh_CN.GB2312 GB2312" >>zh
echo "zh_CN.GBK GBK" >>zh
echo "zh_CN.GB18030 GB18030" >>zh
echo "LANGUAGE=zh_CN:zh:en_US:en" >> /etc/environment
echo "LC_CTYPE=zh_CN.UTF-8" >> /etc/environment
echo "LANG=zh_CN.UTF-8" >> /etc/environment
echo "GST_ID3_TAG_ENCODING=GBK" >> /etc/environment
cd /
dpkg-reconfigure locales
dpkg-reconfigure tzdata
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"  #从这句以后,shell内开始显示中文了。
apt-get install xfonts-base xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-wqy fonts-wqy-microhei fonts-wqy-zenhei
apt-get clean
tzdata要先后选择 6:Asia 和 27. Hong_Kong。(不知道为什么,不能选shanghai,选shanghai则时间不对)

7、然后,你就可以安装各种软件(我安装了kubuntu桌面环境):

代码: 全选

apt-get install sudo apt-utils dialog less wget vim net-tools openssh-server \
htop tmux build-essential libevent-dev python-dev python-setuptools \
python-lxml sqlite3 nodejs npm
apt-get install kubuntu-desktop
apt-get clean
apt-get install kubuntu-restricted-extras
apt-get clean
apt-get install language-pack-zh-hans language-pack-zh-hans-base language-pack-kde-zh-hans language-pack-gnome-zh-hans language-pack-gnome-zh-hans-base firefox-locale-zh-hans thunderbird-locale-zh-hans  kde-l10n-zhcn
apt-get clean
由于分配的空间比较紧张,所以每install一个大的程序后,都需要clean一下才行。

8、添加拥有sudo权限的用户(注意:其实在安卓的ubuntu里面用不上,里面是root用户直接进入环境的)

代码: 全选

adduser ubuntu
addgroup --system admin
echo "admin ALL=(ALL:ALL) ALL" >> /etc/sudoers
usermod -G ubuntu,admin,plugdev,audio,video ubuntu
passwd
9、创建一个用于再手机系统内启动kde的文件,然后离开chroot环境。

代码: 全选

echo "export DISPLAY=127.0.0.1:0" > /bin/starkde
echo "export LANGUAGE=zh_CN:zh" > /bin/starkde
echo "export LC_CTYPE=zh_CN.UTF-8" >> /bin/starkde
echo "export LANG=zh_CN.UTF-8" >> /bin/starkde
echo "export LC_ALL="zh_CN.UTF-8" >> /bin/starkde
echo "startkde" >> /bin/starkde
chmod a+x /bin/starkde
exit
10、为了移植安卓机器,建立一些目录(这里不建立,写到启动脚本里面动态建立也行)然后umount。

代码: 全选

sudo mkdir /mnt/sdcard
sudo mkdir /mnt//dev/shm
sudo umount /mnt
二、传递文件给手机,开始在手机内操作
1、压缩img文件,压缩后传给手机,并在手机中建立挂载目录。
压缩后大概有1G,解压后3G,所以手机至少要有4G空间才行。

代码: 全选

adb push ./ubuntu.img.zip /mnt/sdcard
adb shell mkdir /mnt/sdcard/ubuntu
2、建立启动脚本(为了大家看起来方便,我直接把脚本贴出来了):
脚本xfdesktop(借用felonwan的,命令稍作修改,备注还未修改,备注和命令有的地方已经不一致。
[bash]#####################################################################################
# 安卓系统进入及退出Linux桌面脚本 #
# 用法:daemonize sh xfdesktop [镜像名] [挂载路径] 启动桌面的命令 [synergy服务器IP] #
# 注意: 其中“启动桌面的命令”是必须的。 #
# “镜像名”和“挂载路径”不写则默认为“/sdcard/linux.img”和“/data/linux” 。 #
# “synergyc服务器IP”不写则不使用电脑共享的键盘鼠标。 #
# 请和xfinit脚本配合使用。 #
# 作者:felonwan@gmail.com #
#####################################################################################


####################################
# 检查是否具有root权限 #
####################################
#perm=$(id | cut -b 5)
#if [ "$perm" != "0" ];then
# echo "This script requires root! Type: su";
# exit;
#fi


##############
# 缩写 #
##############
bb="busybox"
bm="$bb mount"
bu="$bb umount"
export PATH=$bin:/usr/bin:/usr/local/bin:/usr/sbin:/bin:/usr/local/sbin:/usr/games:$PATH

############################################################
# 设置镜像名、挂载路径、启动桌面命令和synergyc服务器IP #
############################################################
if [ $# -eq 3 ]; then
img=$1
mnt=$2
dsk=$3
elif [ $# -eq 4 ]; then
img=$1
mnt=$2
dsk=$3
syg=$4
elif [ $# -eq 1 ]; then
dsk=$1
img=/sdcard/linux.img
mnt=/data/linux
else
echo "Usage:\t sh xfdesktop [img] [mnt] dsk [syg]"
echo "\t img--image file name"
echo "\t mnt--mount directory"
echo "\t dsk--command to start desktop"
echo "\t syg--synergy server ip"
exit 1
fi

echo " "
echo "Img:\t$img"
echo "Dir:\t$mnt"
echo "Desktop:\t$dsk"
echo " "


###################################
# 挂载镜像、目录 #
###################################
### 挂载镜像
echo "Mounting $img to $mnt ..."
$bm $img $mnt

### 挂载必要的目录
echo "Mounting some directories ..."
$bm -o bind /dev $mnt/dev
$bm -t devpts devpts $mnt/dev/pts
$bm -t proc proc $mnt/proc
$bm -t sysfs sysfs $mnt/sys

### 挂载有用的安卓系统目录
for dir in 'system' 'etc' ; do
adir="$mnt/a$dir"
echo "create directory: $adir ...."
if [ ! -d $adir ]; then mkdir $adir ; fi
echo "bind $dir to $adir"
$bm -o bind /$dir $adir
done

### 挂载sd卡、tf卡
chsd="$mnt/sdcard"
mSD=/mnt/sdcard
if [ ! -d $chsd ]; then mkdir $chsd; fi
$bm -o bind $mSD $chsd
#chtf="$mnt/tfcard"
#mTF=/mnt/extsd
#if [ ! -d $chtf ]; then mkdir $chtf; fi
#$bm -o bind $mTF $chtf


###########################
# 设置网络 #
###########################
$bb sysctl -w net.ipv4.ip_forward=1
echo "nameserver 8.8.8.8" > $mnt/etc/resolv.conf
echo "nameserver 8.8.4.4" >> $mnt/etc/resolv.conf
#echo "127.0.0.1 localhost" > $mnt/etc/hosts
echo "Your Linux pad can be accessed from the IP:"
ifconfig wlan0
echo " "


#########################################
# 停止安卓服务、进入Linux系统 #
#########################################
#echo "stopping android services"
#stop
echo "chroot to $mnt ..."
# $bb chroot $mnt /bin/bash
#$bb chroot $mnt /usr/bin/xfinit $dsk $syg
$bb chroot $mnt /bin/bash

##############################################
# 退出chroot后启动安卓服务、关闭linux桌面 #
##############################################
echo -e "\n\n\n\n\n=============\nBack to host android.\n============\n"
#echo "Starting android services..."
#start
#echo -e "killing dekstop..."
#pkill kde
#pkill lxde
#pkill gnome
#pkill xfce
#echo -e "killing udevd..."
#pkill udevd
echo -e "killing synergyc..."
pkill synergyc
#echo -e "killing Xorg..."
#pkill Xorg


##########################################
# 解除目录绑定、卸载镜像 #
##########################################
echo "Shutting down chroot linux ..."
for pid in `$bb lsof | $bb grep $mnt | $bb sed -e's/ / /g' | $bb cut -d ' ' -f2`; do $bb kill -9 $pid >/dev/null 2>&1; done
sleep 15s
$bu $mnt/sdcard
#$bu $mnt/tfcard
$bu $mnt/asystem
$bu $mnt/aetc
$bu $mnt/dev/pts
$bu $mnt/dev
$bu $mnt/proc
$bu $mnt/sys
$bu $mnt
if [ $? = 0 ]; then
echo 'The chroot directory have been umounted!'
fi[/bash]

通过adb来push到手机sdcard卡。

代码: 全选

adb push ./starkde /mnt/sdcard/
3、手机端设置
(1)手机端先root
(2)安装Xserver XSDL、终端模拟器
(3)打开终端模拟器、Xserver XSDL(要提前打开)
手机的终端模拟器内,依次输入以下命令:

代码: 全选

su
cd /mnt/sdcard/
sh ./xfdesktop ./ubuntu.img ./ubuntu starkde
然后按手机home键(不要关死手机shell,而是转到后台),转到提前打开的Xserver XSDL,发现kde已经在启动了。
进去以后,我这里从kde的systemsettings做配置,有几个地方会崩溃,可能要手动改几个配置文件才行:
/usr/share/kubuntu-default-settings/settings.ini(可以改gtk程序的字号)
~/.kde/share/config/kdeglobals(改系统默认语言)

代码: 全选

[Locale]
Country=cn
Language=zh_CN:en_US
用完后注销kde,退出重新进入,可进入中文界面。
kde开着,也不影响安卓的使用,不影响接打电话。

以上在酷派大神F1中亲测成功

特别注意:实际使用中,不能改成“netbook”风格。若改成这个风格,则启动时黑屏。
(另外吐槽:酷派大神F1其实无法root,仅能临时root,一重启就回复非root状态)
头像
ljj_jjl2008
论坛版主
帖子: 14255
注册时间: 2007-09-16 8:29

Re: 借助ubuntu电脑,给安卓手机安装整套ubuntu14.04的方法

#2

帖子 ljj_jjl2008 » 2014-06-04 13:47

几个注意点:
1、支持手机arm构架的源很少,至少国内的几个源,都不支持(仅支持intel和amd的构建)
2、这种虚拟的环境,和手机环境总归有点差异,所以移植到手机后,有些软件不能执行。并且手机里面如果apt-get更新、升级和安装软件时有时报错,且有可能造成依赖关系损坏。所以如果要调整什么软件,尽可能还是在ubuntu的虚拟环境中进行,然后将img文件复制到手机。
3、手机屏幕太小了,所以实际效果并不好,基本上这就是一个玩具。
4、占用空间比较大,手机没有4G以上空闲空间就不要折腾了。
5、手机必须root。
6、4.2以下的安卓,请格式化成ext2。
7、以下命令要注意

代码: 全选

LANG=C sudo chroot mnt /usr/bin/qemu-arm-static -cpu cortex-a15 /bin/bash
./debootstrap/debootstrap --second-stage
自己查一下自己的手机cpu型号,改一下 cortex-a15 这个参数。
8、是root用户直接进入ubuntu环境。
9、手机端设置
(1)手机端先root
(2)安装Xserver XSDL、终端模拟器
(3)打开终端模拟器、Xserver XSDL(要提前打开)
11、特别注意:实际使用中,不能改成“netbook”风格,否则启动时黑屏。
头像
ljj_jjl2008
论坛版主
帖子: 14255
注册时间: 2007-09-16 8:29

Re: 借助ubuntu电脑,给安卓手机安装整套ubuntu14.04的方法(高度定制,全中文界面)

#3

帖子 ljj_jjl2008 » 2014-06-05 19:01

反复安装了4次,终于基本完美了:
第一次:选择的CPU型号不对,而且只安装了基本系统(没有更新),到手机后可一更新就“包依赖关系损坏”,报废了。
第二次:选择的CPU型号还是不对,只安装了基本系统(这次在电脑更新了),到手机后花了3个小时安装kubuntu,结果“包依赖关系损坏”,报废了。
第三次:选择的CPU型号对了,安装了基本系统,在电脑更新了,在电脑安装kubuntu,到手机后发现界面是英文的。
第四次:选择的CPU型号对了,安装了基本系统,在电脑更新了,在电脑安装kubuntu,在电脑安装语言包,改了启动脚本,到手机后手工改了几个配置文件。成了中文界面,基本完美了。
头像
youzhiyili
帖子: 2422
注册时间: 2012-03-22 20:42
系统: ubuntu22.04

Re: 借助ubuntu电脑,给安卓手机安装整套ubuntu14.04的方法(高度定制,全中文界面)

#4

帖子 youzhiyili » 2014-06-05 19:23

:em11
@自由建客 @qy117121 @枫叶饭团 @cikekid @YeLee @jtshs256 @eexpress @ljj_jjl2008 @zhw2101024 @TeliuTe @月下叹逍遥 @leeaman @懒蜗牛Gentoo @灰色小狼 @photor @adagio @JiangHui @phoenixlzx @oneleaf
funerqq
帖子: 5
注册时间: 2014-05-02 12:08
系统: windows XP

Re: 借助ubuntu电脑,给安卓手机安装整套ubuntu14.04的方法(高度定制,全中文界面)

#5

帖子 funerqq » 2014-06-06 11:32

楼主能不能发几张照片来看看效果? 声音等其它功能正常不?
haotianbeidou
帖子: 4
注册时间: 2014-05-31 16:42
系统: win7

Re: 借助ubuntu电脑,给安卓手机安装整套ubuntu14.04的方法(高度定制,全中文界面)

#6

帖子 haotianbeidou » 2014-06-10 19:35

请问楼主:我在执行

代码: 全选

LANG=C sudo chroot mnt /usr/bin/qemu-arm-static -cpu cortex-a15 /bin/bash
的时候,结果:chroot: 无法进入目录mnt: 没有那个文件或目录。
是什么问题呢?
haotianbeidou
帖子: 4
注册时间: 2014-05-31 16:42
系统: win7

Re: 借助ubuntu电脑,给安卓手机安装整套ubuntu14.04的方法(高度定制,全中文界面)

#7

帖子 haotianbeidou » 2014-06-11 12:00

haotianbeidou 写了:请问楼主:我在执行

代码: 全选

LANG=C sudo chroot mnt /usr/bin/qemu-arm-static -cpu cortex-a15 /bin/bash
的时候,结果:chroot: 无法进入目录mnt: 没有那个文件或目录。
是什么问题呢?
上面的已经解决,是chroot的mnt目录应该是在根目录中/mnt。
但是执行后,显示:

代码: 全选

/usr/bin/groups: cannot find name for group ID 0
这又是什么问题呢?
haotianbeidou
帖子: 4
注册时间: 2014-05-31 16:42
系统: win7

Re: 借助ubuntu电脑,给安卓手机安装整套ubuntu14.04的方法(高度定制,全中文界面)

#8

帖子 haotianbeidou » 2014-06-11 16:36

haotianbeidou 写了:
haotianbeidou 写了:请问楼主:我在执行

代码: 全选

LANG=C sudo chroot mnt /usr/bin/qemu-arm-static -cpu cortex-a15 /bin/bash
的时候,结果:chroot: 无法进入目录mnt: 没有那个文件或目录。
是什么问题呢?
上面的已经解决,是chroot的mnt目录应该是在根目录中/mnt。
但是执行后,显示:

代码: 全选

/usr/bin/groups: cannot find name for group ID 0
这又是什么问题呢?
通过添加root解决了。
又有新问题:
执行启动后没有进入Xserver,终端显示:

代码: 全选

GConf Error: No D-BUS daemon running
怎么办呢。。。 :em20
头像
ljj_jjl2008
论坛版主
帖子: 14255
注册时间: 2007-09-16 8:29

Re: 借助ubuntu电脑,给安卓手机安装整套ubuntu14.04的方法(高度定制,全中文界面)

#9

帖子 ljj_jjl2008 » 2014-06-11 17:03

楼上:
没有进xserver有两种可能:
1、Xserver XSDL没有启动。或者启动了,但是DISPLAY成了127.0.0.1:1。这是需要杀死Xserver XSDL,再启动一次。
2、有一些de环境就是不行,比如听说unity就不行。
haotianbeidou
帖子: 4
注册时间: 2014-05-31 16:42
系统: win7

Re: 借助ubuntu电脑,给安卓手机安装整套ubuntu14.04的方法(高度定制,全中文界面)

#10

帖子 haotianbeidou » 2014-06-11 19:19

ljj_jjl2008 写了:楼上:
没有进xserver有两种可能:
1、Xserver XSDL没有启动。或者启动了,但是DISPLAY成了127.0.0.1:1。这是需要杀死Xserver XSDL,再启动一次。
2、有一些de环境就是不行,比如听说unity就不行。
额。。。。正是ubuntu12.04的unity。 :em20 :em20
郁闷。。。
有什么办法吗?
头像
oneleaf
论坛管理员
帖子: 10454
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

Re: 借助ubuntu电脑,给安卓手机安装整套ubuntu14.04的方法(高度定制,全中文界面)

#12

帖子 oneleaf » 2014-06-11 19:45

不错,支持个,顺便测试下回复。
头像
oneleaf
论坛管理员
帖子: 10454
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

Re: 借助ubuntu电脑,给安卓手机安装整套ubuntu14.04的方法(高度定制,全中文界面)

#13

帖子 oneleaf » 2014-06-11 20:11

再测试下回复,看看是否还有问题。
ke忘忧草
帖子: 1
注册时间: 2014-06-21 20:56
系统: windows

Re: 借助ubuntu电脑,给安卓手机安装整套ubuntu14.04的方法(高度定制,全中文界面)

#14

帖子 ke忘忧草 » 2014-06-21 20:58

专门注册一个账号来顶这个帖子
头像
zzzhiv
帖子: 194
注册时间: 2008-08-31 21:23

Re: 借助ubuntu电脑,给安卓手机安装整套ubuntu14.04的方法(高度定制,全中文界面)

#15

帖子 zzzhiv » 2014-07-07 20:15

真能折腾的。。。
回复