目录
其实类似教程应该挺多的了, 不过这次打算写的更简单实用一些
更新: 目前已经有更简单好用的 LinuxDeploy 了,
原理和 LinuxOnAndroid 是一样的, 本文分两段分别扯下这俩的注意事项, 有兴趣可以都看看, 当然, 目前推荐用 LinuxDeploy, 因为:
- 源比较新, 更新也方便
- 内置了所需的命令行环境, 不依赖系统终端和 busybox 等玩意儿, 可以省很多事
简介
- 一句话概括就是在 Android 上跑一个完整的 Linux 操作系统, 懂的人自然知道这个的价值和意义
-
只需要一些常用功能, 不想折腾的, 也可以用 Termux 之类的终端模拟, 更简单方便一些, 主要差异:
- Termux 之类的更像 Windows 上的 Cygwin, 只是在 Android 自带终端里面模拟一些命令 (可以直接跑宿主中的命令),
优点是简单方便,
缺点是功能有限, 一些复杂功能反而更难配置 (类似 ssh 服务器之类的东西都比普通 Linux 麻烦) - 本文扯的是完整的 arm 版 Linux, 通过 chroot 完全切换到一个虚拟环境 (跑不了宿主中的命令, 互相独立),
优点是完整的 Linux, 可以和桌面版 Linux 一样的方式来折腾, 甚至可以图形界面远程登录, 镜像文件也方便备份,
缺点是更新相对麻烦
- Termux 之类的更像 Windows 上的 Cygwin, 只是在 Android 自带终端里面模拟一些命令 (可以直接跑宿主中的命令),
可以用来干嘛
- 完整的 Linux 系统, 你懂的, 各种软件都能用, 拿来学习 Linux 也是很不错的选择
- 本人主要用来在 Android 上搭建 SVN 服务器, 带着手机到处跑, 什么云都弱爆啦
- 顺便在里面折腾了 gcc, vim 等开发环境, 随时都可以敲代码啦 (注孤生)
顺便打点小广告:
- 有兴趣可以来看看 本人的 vim 配置,
轻量, 可以在多个平台愉快的使用 - 以及 C++ 跨平台应用程序框架,
目前可以在 Android/iOS/Qt 上使用, 可以说主流平台都支持了
安装使用
LinuxDeploy
必备功能的安装
- 首先, root 是必须的
- 然后, 不想折腾的, 使用默认配置, 装完 app 点 START 即可 (简单到泪流满面)
- 当然, 也有坑, 这货不是直接下载镜像文件, 而是逐个包下载, 并且坑爹的没有重试,
所以如果你发现途中有什么下载失败了, 请 STOP 后直接删除镜像文件然后重新 START 直到成功 囧TZ - 装好后, 可以直接备份镜像文件, 免得下次安装又要下载很久
- 出现任何问题, 可以尝试先重启下 Android
- 启动后, 似乎并没有自动登录到终端环境 (至少在我这, 自带的 Terminal 总是没法用),
所以还需要另外用别的终端软件 ssh 登录到本机,
ssh 的方式参见下文
基本配置
- 设置里大多配置应该都很好懂, 个人推荐使用 Debian armhf 版本
(CPU 类型根据你手机决定, 目前大多都是 armhf),
中文则在 Localization 里面选zh_CN.UTF-8
, 其它保持默认配置
ssh
Allow to use a SSH server
, 默认配置勾选后重启就能用- 默认无法直接用 root 登进去, 只能先用普通用户登录, 然后再
su
- 想直接用 root 登的, 可以参考 这里
- 本机登录, 可以用任意终端软件 ssh 进去, 个人比较喜欢用
JuiceSSH
启动和关闭时执行脚本
- 勾选
Allow to use a initialization system
,Init system
选sysv
(只有这个能方便的定制 "启动+关闭" 时执行脚本) - 启动进入 Linux 后, 进入
/etc/init.d
目录, 照着修改一份自己的脚本, 然后软链接到 /etc/rc0.d 之类的目录里,
注意文件命名, Snnxx 表示启动时执行, Knnxx 表示关闭时执行, nn 表示执行顺序 - 关于 sysv 的详细说明, 可以参考 这里
文件系统
- 勾选
Allow to mount the Android resources
-
Mount points
里面添加的格式为Android目录:Linux目录
, 例如/data:/android/root_data
表示将 Android 的
/data
mount 到 Linux 的/android/root_data
目录(这部分很坑, 没任何文档说明, 折腾了好久才试出来)
vnc
Allow to use a graphical environment
, 默认配置勾选后重启就能用- 建议不要勾选使用, 因为需要额外装桌面环境占空间,
外加手机上用桌面环境不好用+卡, 除了装逼外并没有什么实用意义
(旧版) LinuxOnAndroid
必备功能的安装
-
首先, root 是必须的
推荐使用 SuperSU, 并且在设置中去掉勾选 "分类挂载命名空间" 和 "启用多用户授权"
-
然后, busybox 也是必须的
如果是 Android 6 以上, 最好在 Smart Install 里面勾选
Enable Smart Install
,Replace All (Symlinks all)
,Clean Mode
,
否则会出现各种神奇的无法启动的情况但是 注意, 这样安装相当于用 busybox 完全替换系统的命令行, 所以, 不要去 Uninstall,
也不要重新安装, 否则可能把系统也搞出问题,
比如 root 丢失等等, 安装前请特别注意备份如果不愿冒这些蛋疼的风险, 还是请换用 LinuxDeploy, 那个不需要折腾这些麻烦事
-
然后, 你得有一个在 Android 上跑的 Terminal
这里推荐 Better Terminal Emulator Pro,
更高级的用法可以参照本文后面的 进阶功能 -
然后你得去下载一个合适的 Linux 系统镜像
这里 是目前所有可用的系统镜像
个人推荐使用 Ubuntu 13.10 的 small 版本, 推荐使用 ubuntu-13.10.SMALL.ext2.v1.zip
有兴趣也可以去 项目主页 看看
-
然后你得去下载一个启动脚本
点击这里 去下载 bootscript.sh
-
最后, 只需在第一步里装好的 Android Terminal 中, 运行以下命令即可启动 Linux
sh relative_path/bootscript.sh relative_path/your_linux.img
relative_path 是你放文件的相对路径, 用的是 Android 本身的文件系统路径
your_linux.img 是第二步中你下载的系统镜像中, 解压出来的文件
-
首次运行可能会提示设置一些内容, 没有什么太大关系, 之后可以通过编辑自动生成的 your_linux.img.config 文件进行设置, 例如我的设置是:
resolution=1024x600 run_ssh=yes run_vnc=yes
推荐把后面两个设为 yes, 默认开启 ssh 和 vnc
-
启动后, 只有命令行界面
如需图形界面可以参考下文
如需退出, 必须输入 exit 退出后, 才能关闭 Terminal, 否则下次无法正常启动 Linux, 必须先重启 Android
一键启动
每次都要输入命令行启动实在太 low 了, 如果你用 Better Terminal Emulator Pro 的话可以更方便很多的
-
编辑
/data/data/com.magicandroidapps.bettertermpro/home/local_profile
把你的命令行输入进去这样打开 Better Terminal Emulator Pro 的时候就会自动启动 Linux 了
-
不过上面的方法每次打开软件都会进入 Linux 了, 其实可以配合 Tasker
再搞一些小动作, 例如自动复制和还原那个 local_profile 文件, 这部分太罗嗦还是不表好了, 有兴趣的童鞋请自行研究 Tasker 这个神器
文件系统
-
进入 Linux 后, 相当于进入了另一个完全独立的系统, 在这个系统中默认是访问不到 Android 的文件系统的, 只能通过
mount
访问- 部分 Android 设备的存储卡路径是标准路径 (比如
/sdcard
), 可以自动 mount,
启动后去/android
目录下看看有没有, 如果没有, 接着下文
- 部分 Android 设备的存储卡路径是标准路径 (比如
-
要在 Linux 中访问 Android (例如存储卡), 可以通过以下方式
- 在你的 img 文件的同目录下, 新建一个名为 "your_linux.img.mounts" 的文件
-
文件内容格式是
Android 这里的源目录;mount 到 Linux 的目标目录
例如:/sdcard;my_mount /data;my_mount2
第一行把 Android 的 /sdcard 目录 mount 到 Linux 的 /android/my_mount 目录下, 第二行同理
-
目前似乎无法在 Android 中访问 Linux 的文件目录, 好像也没什么必要, 真需要的话, 再开个终端去
mount
也是可以的
系统更新
- 由于不是常规 Linux, 所以更新肯定是不及时的, 系统的更新源请注意使用旧版本
-
例如我用的是 Ubuntu, 13.10 早已经停止更新了, 所以最好把源设置为旧的:
# vim /etc/apt/sources.list deb http://old-releases.ubuntu.com/ubuntu/ saucy main restricted universe multiverse deb-src http://old-releases.ubuntu.com/ubuntu/ saucy main restricted universe multiverse
上面是 Ubuntu 13.10 的源, 各 Linux 系统不一样, 所以请自行搜索应该使用什么源
vnc
-
默认安装好后是带有一个 VNC server 的, 详细的可以看启动过程中的输出, 可以在 Android 或其它设备通过 VNC 远程登录图形界面
在 Android 本机登录的话, 推荐使用 Jump
在其他设备登录的话有很多选择, 这个就不表了
-
默认同样会开启 ssh 服务, 可以在其他设备通过 ssh 登录, 比如可以在 Windows 下用 Putty 登录, 就不用折腾 Android 那小屏幕了
-
PS: 图形界面只是尝尝鲜, 实际上因为性能问题基本不具备实用性
FAQ
-
中文问题
默认只支持英文, 要支持中文, 根据你所使用的发行版不同, 要用不同的方法
以我用的 Ubuntu 为例:
sudo locale-gen zh_CN.UTF-8
# sudo vim /etc/default/locale LANG="zh_CN.UTF-8" LANGUAGE="zh_CN:zh"
-
Device or resource busy / Unable to mount the loop device
因为这货本质上是 chroot 和 mount, 所以如果上次没有正常 umount 的话, 启动的时候会无法 mount
解决方法很简单, 重启下 Android 就好, 如果每次都要重启才能用, 检查下每次是否正常的退出, 并且是否 umount 了所有你曾经手动 mount 过的东西
-
使用
exit
退出, 但是还是有东西没有 umount可能和你本地 Android 的 shell 环境有关, 首先确认正确安装了 busybox, 然后可以尝试把把 bootscript 里面的
sh
改为bash
-
shell 高度不正确
不知道是不是个例, 总之我这用各种终端模拟器启动, shell 的高度总是不正确
正常使用 shell 时倒是没什么太大影响, 但是用 vim 时会出现各种奇葩问题
目前还没发现什么解决方法, 但是发现用 JuiceSSH 来 ssh 登录, 就不会了, 姑且先这么凑合吧
其它
性能问题
- 在命令行下操作的话, 一般没有太大的性能问题
- 建议文件什么的放在 Android 的内置存储里面, 因为一般 SD 卡读写速度远慢于内置存储, 可能会在文件读写上速度很慢
输入问题
- 不用说也知道在触屏上鼓捣这些有多蛋疼, 输入法建议使用 Hacker’s Keyboard,
可以缓解一些蛋疼情况 - 买一个蓝牙键盘也是不错的选择 (XX手机就是好, 买台手机当电脑 – -b)
- 其实大多数情况下, 都是在电脑上 SSH 远程登录, 毕竟日常生活还是 Windows 用着顺手, 偶尔要测试一下 Linux 的时候在手机上跑跑就好了
转载请注明来自: http://zsaber.com/blog/p/54
既然都来了, 有啥想法顺便留个言呗? (无奈小广告太多, 需审核, 见谅)
prefect
请问:我想在手机上运行paspbian ,应该怎么制作镜像呢
怎么制作不清楚啊, 估计得从源码编译
请问,系统到底该怎么设置中文??我和你一样的ubuntu的,但是 只要有中文就是□□□□□,显示不出来,,,java编译也无法编译中文,您的方法我试过了,或者我没正确 设置?都百度过n回了折磨了半天,都不行,请赐教::>_<::
评论没发出去吗?,,
请问详细设置中文怎么做?不支持中文我java编译中文通不过,,,百度过n回了无法解决,我是和你一样的系统的,请赐教啊::>_<::
终端运行这个
然后编辑这个文件:
然后重启
谢谢!我已经莫名其妙的解决了,得益于您的教程和网上的资源,我可以在手机编写java学习了
对了,另外我的脚本运行却可以访问 安卓整个文件系统,不知道为什么,从官方那下的脚本,安装后根目录下自己就有 sdcard 和external_sd 两个文件夹,进去就是完整的安卓文件系统。最近重装了linux好多次(因为vim配置乱了,,),全部都可以这样
sd 卡路径是标准的话好像会自动 mount, 但是似乎好多手机都不是标准路径
另外, 想用 vim 的话, 有现成好用的 VimTouch 推荐一试, 可以来用我的配置啊:
http://zsaber.com/blog/p/31
我现在默认编辑器就是 VimTouch
su boolscript.sh
显示unknown id 怎么破
是 sh bootscript.sh
另外, 你有正确 root 么
有,现在在玩linux deploy。
求助:出现错误 ERROR: ld.so: object ‘libsigchain.so’ from LD_PRELOAD cannot be preloaded: ignored.
而且输入的东西在终端上看不到 : (
这个不太清楚, 会不会是 SELinux 没关掉?
另外请问这个系统要怎么卸载?直接把img文件删了就行?
文件直接删了就行
请问Linux可以调用android手机的蓝牙设备吗?
这个应该是不行
不错,竟然有这么些同道中人,Linux deploy是比较好用,但是安装软件会遇到一些坑,各种折腾啊
怎么让手机一直保持Linux deploy是可访问,手机本身有省电机制,不像树莓派,>:-<
在你的各种手机管家里面把它加入白名单, 这货耗电量并不大
卡在了如何让这东西自启…有个电视盒子想利用一下,结果死活不自启…容器也无法自动start。
你得看看你的电视盒子是不是有什么管理软件限制了软件自动启动
后来发现文件镜像模式无法自启,改成分区就没问题了。