怎样才能把你闲置的手机利用起来呢?不妨试着给它安装一个 Linux 系统来玩玩。本文将教大家如何使用 Linux Deploy 在 Android 手机上部署 Linux 系统。
我的博客原文:使用 Linux Deploy 在手机上部署 Linux 系统
此文的微信公众号文章版(精简版):点击前往
这篇文章主要内容的更新时间是2019年9月7日,其中的一些内容可能已经过时。如果遇到问题,可以发邮件联系我一起探讨。
首先来看一下 Linux Deploy 的官方介绍(翻译):
此应用程序是开源软件,用于快速轻松地将 GNU/Linux 操作系统(OS)安装在你的 Android 设备上。
Linux Deploy 通过以下四种方式来安装 Linux 系统的发行版:镜像文件安装或目录安装或分区安装或 RAM 安装。新安装的系统的应用程序在 chroot 环境中运行,并与 Android 平台共同工作。在设备上进行的所有更改都是可逆的,即应用程序和组件都可以被完全删除。发行版的安装时通过互联网从官方镜像在线下载文件来完成的。使用超级用户权限(root)可以更好地运行这个程序。
程序支持多语言界面。你可以管理安装操作系统的过程,安装完成后,你可以通过用户界面来启动和停止新系统服务(并且支持运行脚本)。安装过程以文本方式实时显示在主程序的界面上。程序将会在安装系统的过程中调整环境,包括基本系统、SSH 服务器、VNC 服务器和桌面环境。程序还可以管理 SSH 和 VNC 设置。
安装新的操作系统大约需要 15 分钟。建议的磁盘映像文件最小大小为 1024 MB(使用 LXDE 桌面)或 512 MB (不安装桌面环境)。当你在使用 FAT32 文件系统的闪存卡上安装 Linux 时,镜像大小不应超过 4095 MB!初始设置后 SSH 和 VNC 的密码是自动生成的。可以通过程序设置或标准 OS 工具修改密码。
该应用程序可以在 Google Play 和 GitHub 中下载。
准备
在开始安装之前,需要准备以下的东西:
- 一台已拥有 root 权限的 ARM 架构 Andriod 设备
- Linux Deploy
- Busy Box
- SSH 工具
- VNC Viewer(非必须)
下载 Linux Deploy 并安装至想部署 Linux 的设备中。SSH 工具用作控制 Linux 系统,可以安装在你 想部署 Linux 的设备中 ,也可以安装在其它设备上,Windows 端推荐使用 Xshell,Android 端推荐使用 JuiceSSH,iOS 段推荐 Termius。如果你安装的 Linux 是带桌面环境并且图形子系统是 VNC 的话,则需额外下载 VNC Viewer。
安装必要软件
将 Linux Deploy 和 Busy Box 安装至你想要部署 Linux 的手机中,给予两个软件的超级用户权限,并运行 Busy Box。大部分 Busy Box 的界面如下图所示:
为了避免奇奇怪怪的错误,建议在安装之前将 Busy Box 的安装位置修改为 /system/xbin,然后点击 Install,等待几秒钟后 Busy Box 将会安装至手机当中。安装成功时界面如下图所示:
安装完 Busy Box 之后,就可以配置 Linux Deploy 的属性了。
配置 Linux Deploy
打开 Linux Deploy,可以看到如下界面:
首先点击左上角的菜单图标,进入设置页面,修改环境的 PATH 变量为 Busy Box 的安装目录(/system/xbin)。
接着返回至上一层的主界面,点击右下角位于“停止”右边的配置属性图标,进入配置属性界面。在这个界面有众多选项,每一个选项都有着各自的作用,选项调不好的话很有可能会安装失败。接下来详细地介绍每一个选项并且建议要怎么选择才会比较好。
容器类型
- chroot
- proot
选择 chroot。
发行版 GNU/Linux
- Alpine
- Arch
- CentOS
- Debian
- Fedora
- Kail
- Slackware
- Ubuntu
- Rootfs.tar
随便选择一个,建议 Ubuntu,因为本文的所有选项或命令都是建立在选择了 Ubuntu 的发行版的基础上的。
架构
- armel
- armhf
- arm64
- i386
- amd64
选择合适你设备的 CPU 架构。
选择发行版 GNU/Linux 版本(假如选择了 Ubuntu)
- precise
- trusty
- xenial
- bionic
建议 xenial,软件会比较多
源地址
- http://ports.ubuntu.com/ (官方源)
- https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ (清华大学源)
- http://mirrors.ustc.edu.cn/ubuntu-ports/ (中国科学技术大学源)
从上方三个选项中选择一个粘贴进去,建议选择下面那两个。当然如果有其它源也可以用自己找到的源。
安装类型
- 镜像文件
- 目录
- 分区
- RAM
- 自定义
一般是选择镜像文件或者目录安装。
镜像文件安装是把整个 Linux 系统安装在一个镜像文件里面。镜像文件的大小在安装的时候已经是固定好了的,后期无法修改,由于镜像文件的特性,它会根据设置的镜像大小固定地占用手机储存空间,即使整个 Linux 系统大小并没有到达设置的镜像大小。如果遇到 Linux 储存空间不足的情况需要挂载手机储存。以进行存放文件。访问 Linux 系统里面的文件也需要使用 sftp 访问,有点不方便。但是镜像文件安装的好处在于安装的成功率很高,一般都能安装成功。
如果使用镜像文件安装:
- 安装路径:生成和存放镜像文件的路径,一般默认就好,如有特殊需要更换位置可以自定义路径。
- 镜像大小(单位: MB):决定了镜像文件的大小,相当于决定 Linux 系统的硬盘空间。有条件的话建议设置得越大越好,建议最低 2 GB。
- 文件系统:建议选择 ext4。
目录安装是将 Linux 系统安装至手机储存空间的某一个文件夹中。使用目录安装可以直接使用 Android 系统直接读取 Linux 系统的文件。而且目录安装 Linux 系统的储存空间上限就是手机储存空间的上限。
如果使用目录安装,安装路径可以是默认,也可以是自定义目录。
用户名
根据自己喜好自定义用户名。这是 SSH 登录的时候要用到的用户名。也可以不修改保持默认。
用户密码
根据自己喜好自定义用户密码。这是 SSH 登录的时候要用到的用户密码。也可以不修改保持默认。
特权用户
根据自己喜好自定义特权用户名。一般默认即可。
本地化
安装的 Linux 系统所使用的语言。可以默认。如果需要简体中文,选择 zh_CN.UTF-8。
DNS
默认自动即可
Network trigger
无需修改
初始化
保持默认,不勾选。
挂载
如需 Linux 访问 Android 上的文件,可以打开这个选项。
挂载点列表
点进去后继续点右上角的加号。对话框中 Source 填写你想让 Linux 访问的文件夹的地址。Target 填写挂载至 Linux 的一个目录。
Source 可以填写手机内部储存的目录。Target 可以填写 Linux 的 /mnt 文件夹里面。
将手机的内部储存挂载至 Linux,一般 Source 填写 /storage/emulated/0
,Target 填写 /mnt/adcard
。这样就可以在 Linux 的 /mnt/sdcard
文件夹里访问到手机内部储存了。
SSH
启用。
SSH 设置
保持默认。
声音服务
根据情况自定义是否启用。
音频设置
根据情况自定义设置。
图形界面
根据情况自定义是否启用。
图形子系统
- VNC
- X11
- Framebuffer
如需使用图形界面,建议选择 VNC,配置很方便。
图形界面设置(仅针对使用 VNC 的情况)
- 显示:保持默认。
- 颜色深度(bits):颜色深度越深,色彩越丰富。可根据喜好自定义。
- DPI:每英寸点数。数值越大,用户界面放大倍数越大。
- 宽度:屏幕宽度。根据需求进行设置。
- 高度:屏幕高度。根据需求进行设置。
- VNC 选项:保持默认即可。
桌面环境
选择一个喜欢的桌面环境。可以在网上搜索,再根据截图选择自己喜欢的风格。不过一般都是精简版的桌面,其实都不怎么好看。
根据以上给出的建议,属性配置就基本完成了。我的手机是小米2,系统为 Android 6.0,配置情况如下:
- 容器类型: chroot
- 发行版 GNU/Linux: Ubuntu
- 架构: armhf
- 发行版 GNU/Linux 版本: xenial
- 源地址: https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/
- 安装类型: 目录
- 安装路径: /data/linux
- 用户名: ymefg
- 用户密码: 123456
- 特权用户: andriod
- 本地化: zh_CN.UTF-8
- DNS: 自动
- 初始化: 不启用
- 挂载: 不启用
- SSH: 启用
- SSH 设置: 默认不修改
- 声音服务: 不启用
- 图形界面: 不启用
当然我的配置并不是最适合你的配置,比如说如需挂载 Android 系统上的资源时就可以根据上面所给出的建议来启用挂载,同样的需要图形界面的话也可以根据上面给出的建议来配置桌面环境。
部署 Linux
在经过繁琐的前期准备之后,终于可以部署 Linux 系统了。返回 Linux Deploy 的主界面,点击右上角的三个点小菜单图标,再选择“安装”选项,这时主界面中间的文本显示框就会不断地有消息弹出来,Linux 系统的安装就已经开始了。
在安装的过程中手机会联网从之前设置的源地址中下载各种文件,安装速度受手机性能和网速的影响,但是一般会在半个小时之内安装完毕。如果安装过程中出现了错误,请根据下文的错误列表中寻找你出现的错误并根据所提供的解决办法来操作。
当文本提示框不再有新消息弹出且最后一行显示 >>>deploy
时,则说明安装完成。(不论成功或失败,都会显示这个字样)
如果安装过程不出现失败的话,就可以启动新安装的 Linux 系统了。只需要在主界面点击左下角的启动按钮就能启动新安装的 Linux 系统。如果一切正常,点击启动后将会出现以下类似的文本:
其中如果没有“fail”字样并且有显示 :: Starting extra/ssh ... done
</code>` 的话就说明 Linux 系统安装成功并且 SSH 服务成功启动了。
如果显示带有“fail”字样或者全部信息都是“skip”的话,很有可能是安装失败了,这时需根据文末的安装失败情况解决办法来操作。
至此,Linux 系统已部署完成。
使用
使用新安装的 Linux 系统很简单,它不是虚拟机,是独立于安卓系统之外运行的。操作它就跟操作正常的 Linux 系统一模一样。
局域网的 SSH 连接
以 Windows 端 SSH 客户端 Xshell 通过局域网 SSH 连接至新安装的 Linux 系统为例。
前提:
- Windows 端已安装 Xshell 软件
- Windows 端和运行 Linux 的设备处在同一个局域网下(例如连接同一个 Wi-Fi)
首先打开 Xshell,将会弹出一个对话框,在对话框中点击“新建”按钮。如果没有弹出,在上方的菜单中点击“文件”选项,再点击“新建”。
在新建会话的属性设置中,找到“主机”这一栏,将运行 Linux 设备的局域网 IP 地址填写上去。IP 地址有很多查看方法,最简单的就是直接在 Linux Deploy 上查看 IP 地址。Linux Deploy 的标题栏中显示的就是该设备的局域网 IP 地址,照着它来填进去就可以了。
然后在新建会话属性设置左边的列表中,选择“用户身份验证”选项,在“用户名”和“密码”选项中填写在 Linux Deploy 中设置的用户名和密码。
设置完用户名和密码后点击“确定”按钮,然后在会话选择窗口中选中刚刚新建的会话,点击“连接”按钮。
这时可以看到,已经成功地连接到了新安装的 Linux 系统。
本机运行 JuiceSSH 的本地连接
以 Android 端 SSH 客户端 JuiceSSH 通过本地 SSH 连接至新安装的 Linux 系统为例。
前提:
- Android 端已安装 JuiceSSH 软件
- 运行 Linux 系统和运行 JuiceSSH 的是同一个设备
首先打开 JuiceSSH,在主界面中点击“连接”选项,再在新界面中点击右下角的“+”浮动按钮。在弹出来的新建连接的设置界面中,地址栏填写“127.0.0.1”,认证选择“新建”
在新建认证的界面,根据 Linux Deploy 的设置填写之前所设置的用户名和密码。填写完毕后点击右上角的完成按钮完成新建认证的设置,再点击一下右上角的完成按钮完成新建连接的设置。
这时可以看到,刚刚新建的连接已经出现在连接列表当中了,点击一下即可连接。
连接成功后将如下图所示:
当然,以上所示例的连接方式并不是说一定要按照上面所说的那样只有根据以上方法才会连接成功。并不是说 JuiceSSH 只能本地连接,处在同一个局域网下的其它 Android 设备也是可以安装 JuiceSSH 通过局域网来连接至 Linux 系统中;也不是说 Windows 系统只能用 Xshell 来连接 Linux 系统,Windows 系统上还有着许多各有特点的 SSH 客户端。这里的 JuiceSSH 和 Xshell 只是为了照顾到每一个读者,举个两个例子而已。
VNC 连接
如果你的 Linux 系统安装了桌面环境并且启动了 VNC 服务的话,也可以通过 VNC 连接至 Linux,相当于远程桌面连接了。这里以 Windows 的 VNC Viewer 为例,通过 VNC 连接至 Linux 系统,Android 和 iOS 端的连接大同小异。
前提:
- 安装 VNC Viewer
- 运行 VNC Viewer 的设备和运行 Linux 系统的设备处在同一个局域网下或是同一个设备。
首先打开 VNC Viewer,点击菜单上的“File”,再选择“New connection...”。
在弹出来的 Properties 窗口中,VNC Server 框填写运行 Linux 的设备在局域网中的 IP 地址(如果你用同样的设备来运行 Linux 和 VNC Viewer 的话,VNC Server 填写 127.0.0.1)。设置完成之后再点击“OK”按钮
这时可以看到,新建的主机就已经显示在 VNC Viewer 的主界面中了,双击它连接将会弹出认证界面,在“Password”框中填写之前所设置的用户密码,再点击“OK”按钮,即可连接成功。
为了连接的效果更好,可以在 Linux Deploy 的 VNC 设置界面中更改参数,如分辨率和 DPI。
访问以镜像文件安装的 Linux 上的文件资源
如果在部署 Linux 的时候使用镜像文件的安装方式安装的话,Linux 系统所有的文件都整合为一个镜像文件储存在设备的存储空间里,文件管理器无法直接访问 Linux 上的文件资源。
这时可以通过一些文件管理器的云连接功能来管理 Linux 上的文件。这里以 Android 端的 Solid Explorer 为例。(Windows 端有着众多 FTP 软件,随便找找都有了)
首先打开 Solid Explorer,点击右下角的浮动按钮,选择“新建云连接”
点击“新建云连接”后,将会弹出云连接的设置界面,可根据以下提示进行设置。
连接类型
选择“SFTP”。
服务器详细信息
- 远程主机名:填写运行 Linux 系统的设备的局域网 IP(本机填写 127.0.0.1)。
- 端口:22
- 路径:(留空)
- 显示名称:(自定义)
验证
选择“用户名和密码”。
登录
填写在 Linux Deploy 里所设置的用户名和密码。
设置高级选项?
选择“否”。
随后一直点击下一步最后点击连接即可大功告成。连接成功后,可在 Solid Explorer 的侧栏中查看新建的连接。这样就可以访问以镜像文件安装的 Linux 系统上的文件了。
一些 Linux Deploy 的额外设置
让 Linux 保持运行
为防止连接不稳定出现断开连接的情况,可以在 Linux Deploy 的设置中将屏幕常亮、锁定 Wi-Fi 以及 CPU 唤醒的选项打开。虽说会增加耗电但连接稳定性大大提高。
安装中文字体
第一次安装图形界面可能会出现中文乱码的情况,可以安装中文字体来解决。打开终端运行以下命令等待执行完毕后重启即完成安装中文字体。
apt-get install language-pack-zh-hansttf-wqy-zhenhei
Ubuntu 方向键乱码
输入以下命令来切换到 /bin/bash
,其中 <username>
替换为用户名。重新连接即可解决问题。
sudo chsh -s /bin/bash <username>
常见安装错误
此处列举了一些安装错误的情况以及解决办法,根据解决办法来操作并不一定会成功,但说不定就真的解决问题了呢。
目录安装时显示 Extcracting adduser... 后停止安装
图示:
原因: Linux Deploy 无权限在设定的目录安装 Linux.
- 解决方案1: 在开发者选项里开启“强制将允许将应用写入外部存储设备”选项。
- 解决方案2: 更改安装目录,例如修改为
/data/linux
镜像安装时生成镜像文件时卡住
- 可能的原因1: 镜像文件过大
- 可能的原因2: 设备储存空间不足
- 解决方案1: 属性里修改镜像文件的大小
- 解决方案2: 清理设备的存储空间
显示 W: Couldn't download package... 后停止安装
- 原因1: 设备网络不好
- 原因2: 源服务器网络不好
- 原因3: 要下载的东西被神秘的防火墙挡住了
- 解决方案1: 升级你设备的网络
- 解决方案2: 更换软件源
- 结局方案3: 绕过防火墙
显示 Requires superuser privileges (root)
原因:Linux Deploy 未取得 root 权限。
解决方案:允许 Linux Deploy 访问超级用户权限。
题外话
出于严谨性考虑,本文的许多内容都使用了较为正式的词语,阅读起来可能会有些许不便。例如“Android 设备”明明可以换成更通俗的安卓手机,但考虑到安卓平板也能使用 Linux Deploy,所以这里使用的是“Android 设备”,再例如“Windows”明明可以说成是电脑,同样的,电脑不一定使用的都是 Windows 系统,它可以是 macOS,也可以是 Linux,甚至有可能是 Android。还请大家多多包涵。