linux deploy的作用是什么
linux deploy用于在Android设备上部署Linux环境,其原理大概是在Android的Linux层跑一个chroot或者proot容器,然后再在容器中运行我们准备好的另外一个Linux系统。必须获取手机Root权限后才能使用Linux Deploy。
Linux Deploy是一款可以在Android设备上部署Linux环境的应用,其原理大概是在Android的Linux层跑一个chroot或者proot容器,然后再在容器中运行我们准备好的另外一个Linux系统。值得注意的是,这与我们熟知的虚拟机技术不同,新的Linux系统将和Android系统平行运行(非专业解释不要深究)。
在使用Linux Deploy之前,我们需要获取手机的Root权限(必须),获取Root权限后,由于原机自带的Linux命令集不完整,我们需要安装Busybox来扩充Linux命令集(不安装也可以)。
Linux Deploy需要在谷歌商店安装,其他安卓应用商店没有,以下提到的软件都只能在谷歌商店安装
安装完成后,我们将使用Linux Deploy在Android设备上部署Ubuntu系统:
点击界面最右下方的"下载"图标进入配置文件的设置界面进行如下设置(我也不知道开发者为什么会用这么一个"下载"图标作为配置文件设置界面的图标):
Containerization method:"chroot"
发行版:"Ubuntu"
架构:保持默认值
发行版版本:"yakkety"(即Ubuntu 16.10)
源地址:http://mirror.tuna.tsinghua.edu.cn/ubuntu-ports/(这里我们采用默认方式部署,即在软件源中下载Linux组件和必要的软件包的方式部署,因为默认源速度不佳,为了不下载一天一夜,我们这里使用的是清华大学的开源镜像源,如果你采用Repository方式部署(之后的文章会讲到),这里的"源地址"应该填写Repository文件(后缀为tgz/tar.gz)文件的本地或远程路径)
安装类型:这一选项的话有两种建议,"目录"和"文件",如果对Linux不太熟悉并且/data分区剩余空间≥2g的话,建议使用"目录"的安装方式,如果对Linux比较熟悉或者/data分区剩余空间<2g的话,建议使用"文件"的安装方式。在这里,为了操作方便,使用"目录"的安装方式,但在实际使用中,为了不占用/data分区空间,建议大家采用"文件(镜像)"的安装方式。
安装路径:"安装路径"选择"目录"时,这个选项将定义系统安装在哪个路径中,默认路径为${ENV_DIR}/rootfs/linux
,即安装在/data/user/0/ru.meefik.linuxdeploy/env/rootfs/linux
目录下。"安装类型"选择"文件"时,这个选项将定义Linux系统安装在哪个镜像文件中,默认值为外置存储/linux.img
。
镜像大小(MB)(安装类型"选择"文件"时可用):这个选项将定义系统所在镜像文件的大小。系统安装之前将在安装目录创建一个大小为设置的镜像大小的空文件用来存放系统文件和数据(相当于新Linux系统的总磁盘空间)。建议不要用默认值,填写2048m足够了。
文件系统(安装类型"选择"文件"时可用):选择"自动"。
用户名:这个选项为登录系统时的用户名,默认为"android",可以随意更改。
用户密码:这个选项为Ubuntu系统中用户的密码,可以根据自己的习惯填写。
Privileged Users:保持默认值
DNS服务器:可以保持默认值,也可自定义填写DNS服务器地址(如114.114.114.114等)
本地化:建议保持默认值POSIX,如果有其他需求,比如需要让ssh返回结果为中文或者让图形界面的显示语言为中文时,选择"zh_CN.UTF8"
INIT/MOUNTS项:若有需求时可以设置,无需求可以忽略。
允许SSH服务器启动:打开此选项
SSH设置:保持默认
允许图形界面启动:若有需求可以设置,这里暂时不打开这个选项(之后的文章将会为大家介绍如何部署图形界面)。
设置完成后,按返回键返回到应用主界面,按下菜单键,选择"安装"开始Linux系统的安装,安装过程中需要一直保持网络连接(建议在WIFI下安装,大概需要几百兆流量)。
当看到终端输出">>>deploy"时,代表安装已开始:
当看到终端输出"<< 点击主界面下方的"启动"按钮可以启动新安装的系统,点击"停止"可以停止系统。 至此,系统部署部分描述完毕。 部署完毕后,我们需要用到lJuiceSSH/ConnectBot之类的SSH工具来登录系统(这里以JuiceSSH为例)。 成功启动系统后我们打开JuiceSSH,依次点击 "连接" - 右下角"+"按钮 进入新建连接界面: 昵称:可随意填写,我们以"Localhost - Android"为例 类型:SSH 地址:127.0.0.1 认证:选择"新建"跳转到"新建认证"界面: 昵称:同样可以随意填写,我们同样以"Localhost - Android"为例 用户名:填写"配置文件设置"界面的"用户名",默认为android 密码:填写"配置文件设置"界面的设置的"用户密码" 点击右上角的"√"图标保存并返回到"新建连接"界面,再次点击"√"图标保存,在"连接列表"中点击刚刚新建的这个项目连接到我们刚刚部署好的系统,连接成功后界面如下: 因为我们是通过普通用户android登陆系统的,接下来我们需要设置超级用户(root)的密码并且以超级用户的身份登陆系统: 在终端中键入: 终端将会提示用户输入root用户的密码并且再次输入一次以确认(输入密码时密码将不可见,连*都不会显示),设置完毕后,在终端键入命令su并输入刚刚设置好的root用户密码即可切换到root用户。 文件的管理: 如果你是通过"目录"方式部署的Linux系统,那么你可以直接使用R.E.管理器访问 在Linux Deploy中启动部署好的系统,以android用户登录到SSH,在终端中执行: 当然啦,使用系统自带的vi编辑器也是可以的,如果你对vi编辑器比较熟悉也可以使用vi编辑器编辑文件。vim编辑器安装完成后我们继续在终端执行: 打开文件后,键入i进入编辑模式,点击终端任意空白位置可以弹出特殊键键盘,使用上下光标滚动浏览文件,在文件的#Authentication部分找到PermitRootLogin这一项,将其改为yes,改动完成后点击特殊键键盘中的"ESC"键退出编辑模式,键盘键入:wq!保存并强制退出文件完成对文件的编辑操作。 打开Linux Deploy,停止后再启动Linux系统。打开"Turbo客户端" - 侧边栏 - 创建一个新账户 - SFTP 来新建一个SFTP连接(部分文件管理器,比如ES文件浏览器(ESFileExplorer),SE文件管理器(SolidExplorer)也带有SFTP功能,如果不想安装TurboFTP的话,可以用它们来代替): 其中: 用户名为:root 密码为刚刚设置好的root用户的密码 主机名为:127.0.0.1 其他项保持默认,点击右上角的"保存"图标保存配置,在侧边栏的连接列表中我们将以root用户连接到SFTP并管理文件: 当然,修改完sshd_config文件,停止并启动Linux系统后,你也可以直接以root用户连接到SSH了。 介绍完安装,介绍一下卸载吧~你可以通过以下方法完全卸载Linux Deploy: 1.如果你使用"目录"的方式部署的Linux系统,那么在Linux Deploy内"停止"Linux系统,接着直接卸载Linux Deploy并重启手机即可完全卸载; 2.如果你使用"文件(镜像)"方式部署的Linux系统,你需要先"停止"Linux系统,然后删除放置在内置存储下的镜像文件,镜像文件路径就是上文在部署Linux系统之前提到的"安装路径"这一项,如果此项未经修改,则镜像路径为 安装图形环境 修改以下配置项: INIT: 打勾:启用自定义脚本执行 (INIT的其他配置保持不变) 图形界面: 打勾:允许图形界面启动 图形子系统:VNC 图形化界面设定:保持默认配置 桌面环境:按需选择,这里选择的是LXDE 配置完毕后,回到主界面,按下"菜单键",选择"配置"让我们刚才的的设置生效: 配置完毕后,点击底部的"停止"按钮停止Linux系统,再点击"启动"按钮启动Linux系统,接着我们登入SSH,在终端中执行: 中文字库安装完毕后,执行以下命令启动VNC: 终端会返回以下结果: New 'X' desktop is localhost:1 Starting applications specified in /home/android/.vnc/xstartup Log file is /home/android/.vnc/localhost:1.log 证明vncserver已启动成功。 (注意,在某些时候,第一次执行 接着我们使用VncViewer来连接到我们刚刚部署好的的图形界面: 打开VncViewer,点击右下角的"+"按钮添加VNC会话: Address: 127.0.0.1:5901 Name: Localhost - Ubuntu@Xfce 其中,"Address"项为VNC服务器所在的地址。由于我们需要连接本机的VNC服务器,所以填写127.0.0.1即可,此外我们还需要在地址后指定VNC端口,因为刚刚终端返回的信息: 这些信息填写完毕后,点击"CREATE"按钮提交: 确认信息无误后,点击下面绿色的"CONNECT"按钮开始连接VNC会话(如果你之前没有设定过VNC密码,但在连接VNC连接过程中仍然需要你输入密码时,那么你可以输入android用户的密码试试): 好了...图形界面的部署过程到此为止,剩下的你们自己折腾吧(/doge脸)~ 1. 当你开启了一个VNC会话,停止Linux系统再启动Linux系统后,再次执行vncserver命令,系统可能会报出以下错误: 这时候,你可以执行以下两条命令: 执行完毕后,再执行 编辑完成后,保存即可,进行这步操作后,在启动Linux系统后和停止Linux系统之前,Linux Deploy都会替我们执行这两条命令,这样一来之后就不会再报错了~ 2. vncserver默认的分辨率是1024×768,但市面上的大部分手机屏幕的分辨率都是720P(1280×720),1080P(1920×1080),甚至2K(2560×1440),vncserver默认的1024×768分辨率可能会造成VNC画面不能填充满屏幕的情况,这时候,我们有必要修改VNC分辨率以适应屏幕,经过测试,拿1080P屏幕来说,将分辨率设为为720P可使VNC图像充满屏幕且不影响显示效果。调节方法就是在每次执行 即可将新开启的VNC虚拟会话屏幕分辨率设为1280×720。值得注意的是,命令中的 下面是1280×720分辨率和1024×768分辨率的对比(将VNC Viewer画面缩小到最小): 很明显,1080P屏幕上,将VNC分辨率设为1280×720可使图像填充满屏幕且视觉效果更佳。 如果你觉得每次启动vncserver时输这么一长串命令有点儿麻烦,那么可以编辑 alias vncserver='vncserver -geometry 1280x720' 之后,每次执行 会发现ubuntu只能安装到18.04 升级的方法就是安裝Ubuntu后再直接升级。 用VNC登入桌面後,用終端機安裝更新器 更新全部套件至最新版 如果出現authenticate 'focal.tar.gz' against 'focal.tar.gz.gpg' Authentication failed錯誤,先安裝gnupg並執行以下指令: 如果提示Please Install All Available Updates Before Upgrading 不出意外的话,系统正常升级完了。 升级完之后还需要回到linux deploy的配置项中把用户名改成root,密码可以保持不变,原因是升级后,原来的android这个用户名就没有root权限了 # 2023.3.8更新 如果你遇到“The required dependency 'apt (>= 2.0.4)' is not installed.”需要修改/etc/apt/source.list文件sudo passwd root
/data/user/0/ru.meefik.linuxdeploy/env/rootfs/linux
即可管理新系统中的文件,如果你是通过"文件"方式部署的Linux系统,管理文件等操作就得依靠SFTP了(当然使用SSH方式也没问题,但是还是觉得SFTP更方便些)。当我们使用普通用户身份登录SFTP时,由于权限原因,我们无权操作大多数文件。所以我们需要以超级用户身份登录SFTP。但默认配置是不允许root用户登录SSH和SFTP的,所以我们需要进行如下设置:sudo apt-get install -y vim #安装vim编辑器
vim /etc/ssh/sshd_config #使用vim编辑器打开/etc/ssh/sshd_config这个文件
外置存储/linux.img
,接着卸载Linux Deploy并重启手机即可完全卸载。sudo apt-get install ttf-wqy-zenhei #安装中文字库
vncserver
复制vncserver
命令时系统将要求你设定一个小于8位数的VNC密码,你需要输入两次密码之后提交,VNC密码设定完成之后还会有一个提示,不用理会,键入n
提交即可)进入图形界面:
New 'X' desktop is localhost:1
指定了此次桌面会话号为1,所以端口就为5900+1=5901。如果我们开启了多个虚拟桌面,它们的会话号为2,3,4...,那么各自的端口即为5902,5903,5904...依次类推。并且,服务器地址与端口之间需要用英文冒号隔开。"Name"项为用户为此VNC会话指定的地址,我们为了区别其他会话,填写的是Localhost - Ubuntu@Xfce,实际上随便填写什么都可以。可能遇到的问题:
rm -rf /tmp/.X[1-9]-lock
rm -rf /tmp/.X11-unix/X[1-9]vncserver
,会话号就会被重置为1了。为了防止每次停止再启动Linux系统后带来的这个问题,我们可以编辑/etc/rc.local文件,在此文件的exit 0
之前插入这两条命令:sudo vim /etc/rc.local #编辑/etc/rc.local
vncserver
命令时在后面加上-geometry
参数,例如我需要把VNC分辨率调为720P(1280×720),那么在启动vncserver时,执行:vncserver -geometry 1280x720
1280x720
里的x
是小写字母x
,而不是数学中的乘号×
。~/.bashrc
文件,在下图所示的位置增加一行alias定义:vim ~/.bashrc #编辑~/.bashrc
复制vncserver
命令后,新开启的VNC会话的分辨率都会被设为1280×720。升级ubuntu
sudo apt install update-manager-core
sudo apt update && sudo apt upgrade
sudo do-release-upgrade
sudo apt install gnupg gnupg1 gnupg2
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 871920D1991BC93C
再次执行sudo do-release-upgrade,输入y開始更新系统,按照终端的指示更新。
apt clean
apt autoclean
sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade
再次执行sudo do-release-upgrade,输入y開始更新系统,按照终端的指示更新。
修改用户名之后一定要点linux deploy的配置选项重新配置
## /etc/apt/source.list
deb http://ports.ubuntu.com/ focal multiverse main universe
deb-src http://ports.ubuntu.com/ focal multiverse main universe
deb http://ports.ubuntu.com/ focal-updates main universe multiverse
deb-src http://ports.ubuntu.com/ focal-updates main universe multiverse
deb http://ports.ubuntu.com/ focal-security main universe multiverse
deb-src http://ports.ubuntu.com/ focal-security main universe multiverse