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

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

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

#1

帖子 ljj_jjl2008 » 2017-04-24 8:53

一、说在前面的一些废话
我以前是这个论坛的活跃成员,也是ubuntu铁杆用户。
不过由于工作原因,不得已舍弃了ubuntu改用windows,对于ubuntu的热情逐渐淡了,也就不怎么上这个论坛了。
这篇文章属于“诈尸”之作,发上去估计也就不管了,所以我会写的比较详细,事无巨细的,但无暇顾及回帖和提问,估计也不会纠错和更新,主要给自己留一个工作备份,保留住自己的工作过程。
二、安卓手机安装ubuntu的原理及基本思路
其实,安卓的核心就是linux,所以理论上安卓手机直接可以运行ubuntu的桌面环境。其中主要阻碍有3点:
1,安卓手机没有ubuntu桌面所需的X Server,即没有linux桌面所需的图形服务器。
解决办法:安装XServer XSDL,即安卓版的Xserver。我用的以下版本,这个比较稳定,能满足需要。如果手机提示更新,则不要更新,否则反而可能不能用了https://pan.baidu.com/s/1pLue3r1
2,安卓手机的cpu是arm指令集,同pc机的x86指令集区别较大。
解决办法:在ubuntu的电脑上,利用chroot、debootstrap和qemu-arm-static三个命令,虚拟出一个手机环境,并安装好软件,做成一个img文件,拷贝到手机,挂载后用这个img在手机中启动。
3,安卓的linux是简化过的,无法直接运行ubuntu桌面环境。
解决办法:
将手机root,增加权限。
安装busybox,增加所支持的linux命令。
安装终端模拟器(我使用的是:Better Terminal Emulator Pro,自己从应用商店中搜索下载吧),用于输入命令。
在终端模拟器中,用命令行启动ubuntu桌面。
三、给安卓手机安装ubuntu有什么用?
反正我是用来玩游戏的,主要是原来我用kubuntu比较多,里面有一个纸牌游戏kpat,一个逻辑游戏picmi,还有几个其他游戏,别处真的找不到(或者差别还是比较大),有点怀念了,所以就装上了玩一下。其余用途,我还真没发现。(也许还可以用来装逼,呵呵。)
Screenshot_20170424-092443.png
Screenshot_20170424-092830.png
Screenshot_20170424-093622.png
四,XServer XSDL安装及设置。
安装过程略,下载apk正常安装即可。安装后运行时,首先要设置一下,并且此过程要“手快”,很多地方是一闪而过的,没有暂停和等待,要及时操作。
主要是设置鼠标动作,其余的不重要,其余请参照网上的相关文档。比如:http://v.youku.com/v_show/id_XODk5NTI5MTg0.html
安装后运行时,首先看见这个界面
Screenshot_20170424-095218.png
这是及时按一下灰色区域,出现以下界面:
Screenshot_20170424-094520.png
选“mouse ...”那一行,然后鼠标设置以下3项:
Screenshot_20170424-094539.png
鼠标左键:设置成“点击鼠标光标周围”,需要左键点击时,先点击一下鼠标要点击的位置把光标移动过去,看一下位置正确的话,在在光标周围点击一下,完成左键点击。原因是手机屏幕小,定位有时不准,这样用起来方便。不过假如定位不准,则需要在离鼠标光标很远的地方点一下,把鼠标光标移走,再重新移动回来,在光标附近点击则是单击,鼠标光标不会移动的。
Screenshot_20170424-094553.png
鼠标右键:设置成“物理按键”,我设置的是手机的“菜单(menu)”键,即手机下端左边的按键,因为其他键都有用(home、power不能用,音量键不方便,“返回键”则用于调用输入法输入文字)
Screenshot_20170424-094607.png
这里去掉几个勾。


然后点ok,再按手机“返回键”退出这些菜单,出现如下倒数计时界面时,点一下屏幕
Screenshot_20170424-102142.png
设置分辨率(1280*720)
Screenshot_20170424-094654.png
字体大小(0.4倍,即最下面一行的左边那个)
Screenshot_20170424-094704.png
最后出现如下界面
Screenshot_20170424-094635.png
五、制作img文件
主要参考了以下两个帖子(关于如何生成ubuntu的img文件的,但是没有提供手机启动脚本):
http://www.oschina.net/translate/how-to ... -phone?cmp
http://blog.sina.com.cn/s/blog_5f52c0600100u86x.html
其实第二个帖子是我写的,但是发现论坛内居然被删除了,然后希望搜索到某个镜像,真的搜索到了(稍微有点不全)。

下面详细罗列一下过程和命令:

首先要有一个可联网的ubuntu环境,是ubuntu就行,不在乎当前版本,但必须能上Internet网,虚拟机ubuntu环境也可以。我们主要是利用chroot、debootstrap和qemu-arm-static三个命令,虚拟出一个手机环境,并安装好软件,做成一个img文件。

1、为ubuntu设置QEMU和ARM二进制以及asdebootstrap支持:

代码: 全选

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

代码: 全选

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

3、使用debootstrap来部署基础环境(其中xenial 代表的是16.04版本,此过程必须联网),并将qemu-arm-static复制进基本环境中:

代码: 全选

HOSTNAME=ubuntu-armhf sudo debootstrap --variant=minbase --foreign --arch armhf xenial /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 这个参数。
我的手机其实是cortex-a72,现在还不支持,所以选了较为接近的cortex-a15。

5、一旦上面的工作完成了,我们需要安装apt源(里面的 xenial 是16.04的版本代号),并更新(这里注意:国内的源大多数不支持arm框架,所以不要用国内的这些源)

代码: 全选

echo "deb http://ports.ubuntu.com xenial main restricted universe multiverse" > /etc/apt/sources.list
echo "deb http://ports.ubuntu.com xenial-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://ports.ubuntu.com xenial-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://ports.ubuntu.com xenial-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://ports.ubuntu.com xenial-backports main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://ports.ubuntu.com xenial main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://ports.ubuntu.com xenial-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://ports.ubuntu.com xenial-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://ports.ubuntu.com xenial-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://ports.ubuntu.com xenial-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 和 31. Hong_Kong。(不知道为什么,不能选shanghai,选shanghai则时间不对)

7、然后,你就可以安装各种软件(我安装了kubuntu桌面环境。由于使用的是XServer XSDL,所以这里不用安装xorg):

代码: 全选

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 bovo kpat ksquares ksudoku picmi kdiamond kollision
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、传文件给手机,并在手机中建立挂载目录。
如果ubuntu安装了adb,手机开放了adb,则可以连线后在电脑端用adb推送文件和建目录,否则就直接拷贝文件、在手机端建目录。

代码: 全选

adb push ./ubuntu.img.zip /mnt/sdcard
adb shell mkdir /mnt/sdcard/ubuntu
2、建立启动脚本(我的脚本写的比较简单,仅能用于启动自己的这个img):
(脚本名:startkde,放在手机内存sd卡根目录,添加可执行权限)

代码: 全选

##############
# 缩写 #
##############

bm="mount"
bu="umount"
export PATH=$bin:/usr/bin:/usr/local/bin:/usr/sbin:/bin:/usr/local/sbin:/usr/games:$PATH


img="/mnt/sdcard/ubuntu.img"
mnt="/mnt/sdcard/ubuntu"
dsk="/bin/starkde"


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 ..."
DISPLAY=localhost:0 chroot $mnt /bin/sh $dsk

##############################################
# 退出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
3、先设置好XServer XSDL并启动,然后打开终端模拟器,在保证获得root权限前提下,依次执行如下命令:

代码: 全选

su
cd /mnt/sdcard
sh ./startkde
然后按手机home键(不要关死手机shell,而是转到后台),转到提前打开的Xserver XSDL,发现kde已经在启动了。
kde开着,也不影响安卓的使用,不影响接打电话。

七、关于中文输入
经实际测试,这个ubuntu没必要安装输入法,而且安装了也无法启用,因为:这个ubuntu使用安卓自带的输入法来输入!
不过,经实际测试:
谷歌输入法:无法切换到中文,不能使用。
搜狗输入法:输入中文时,候选字部分不能显示,无法使用。

QQ输入法:可以正常使用。
其他:未做测试。

八、整体评价
1、支持手机arm构架的源很少,至少国内的几个源,都不支持(仅支持intel和amd的)
2、这种虚拟的环境,和手机环境总归有点差异,所以移植到手机后,有些软件不能执行。如果要安装、调整什么软件,尽可能还是在ubuntu的虚拟环境中进行,然后将img文件重新复制到手机。
3、现在的手机屏幕并不很小,cpu、内存也不小,所以实际效果还可以,运行很流畅并不卡顿,即使一直开着,也不会明显拖慢手机,而且很稳定。只是没有物理鼠标和键盘,稍有不方便,暂时不能用于日常办公,仅限娱乐。不过如果手机支持otc,是可以外接鼠标键盘的。
4、占用空间比较大,我的这个占用6G以上空闲空间,但是放在现在动辄64G\128G的手机上,占用空间问题并不大。
5、理论上本办法可以安装所有版本的ubuntu,只要修改debootstrap命令和软件源里面的版本代号即可。各版本代号如下:

代码: 全选

版本号		代号			发布时间
17.04		Zesty Zapus		2017/04
16.10 		Yakkety Yak		2016/10/20
16.04LTS	Xenial Xerus		2016/04/21
15.10		Wily Werewolf		2015/10/23
15.04		Vivid Vervet		2015/4/22
14.10		Utopic Unicorn		2014/10/23
14.04 LTS	Trusty Tahr		2014/04/18
13.10		Saucy Salamander	2013/10/17
13.04		Raring Ringtail		2013/04/25
12.10		Quantal Quetzal		2012/10/18
12.04 LTS	Precise Pangolin	2012/04/26
头像
百草谷居士
帖子: 3909
注册时间: 2006-02-10 16:36
系统: Mint21.1/Deepin20.8

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

#2

帖子 百草谷居士 » 2017-04-24 9:14

确实好长时间不见 ljj_jjl2008了,没有看帖,先回个帖
debian 12 / 深度系统 20.9 / Mint 21.3

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
头像
ywmy210
帖子: 256
注册时间: 2010-10-14 12:54

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

#3

帖子 ywmy210 » 2017-11-09 20:34

:em11 也看看。回去把自己不用的平板试试!
头像
daf3707
论坛版主
帖子: 12730
注册时间: 2007-06-13 15:57
来自: 在他乡

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

#5

帖子 daf3707 » 2017-11-10 11:20

老人诈尸
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

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

#6

帖子 科学之子 » 2017-11-10 17:52

主要给自己留一个工作备份,保留住自己的工作过程。
要小心被版主手抖误删.
记得以前我搜资料当时没时间看,过几天再搜就搜不到了,论坛上一问结果是被版主误删了.
头像
daf3707
论坛版主
帖子: 12730
注册时间: 2007-06-13 15:57
来自: 在他乡

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

#7

帖子 daf3707 » 2017-11-10 21:30

科学之子 写了:
主要给自己留一个工作备份,保留住自己的工作过程。
要小心被版主手抖误删.
记得以前我搜资料当时没时间看,过几天再搜就搜不到了,论坛上一问结果是被版主误删了.
现在没人那么闲了
alonesky
帖子: 1
注册时间: 2017-12-30 10:53
系统: win+ubuntu

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

#8

帖子 alonesky » 2017-12-30 10:55

我的一个安卓平板开不了机了, :Cry
回复