20170410 初次成文
其实这篇文章构思很久了,拖到现在才写...原因就在于在Linux Deploy上部署图形环境是一件坑多活累的工作:一来是因为兼容性原因,部署好的图形界面环境存在数量可观的Bug,并且小苏也无力解决这些Bug。二来是因为基础的Linux环境才是图形界面环境部署的前提,而最近由于各种原因,使用原始的部署方法已经越来越难部署成功基础的Linux环境了。
但这样看来,第一点倒不是什么大问题:毕竟手机不是为运行专业的Linux发行版而生,所以存在Bug是难免的,只要图形界面能部署成功并且大家可以正常进入图形界面,小苏的任务就完成了。问题就在于第二点:由于国内网络运营商的DNS污染与镜像源站的同步原因,基础的Linux环境能否正常部署成功都是个问题,更别说图形界面的部署了。
所以在这篇文章中,小苏将直接使用上一篇文章中提到的的方法,在此基础上部署图形环境:
https://cloud.tencent.com/developer/article/1159975
因为作者的Repository中包含了基础的Linux环境组件,我们可以将作者的Repository导入镜像来直接部署好Linux基础环境,再在此环境之上部署图形界面。这么一来,基础的Linux环境是否部署成功就不是我们担心的问题了。
所以在这里,小苏默认你已经阅读完上一篇文章的内容,并且根据上一篇文章的方法成功部署了基础的Linux环境。
进入Linux Deploy,点击右下角的"下载"图标进入配置界面,保持其他选项不变,修改以下配置项:
INIT:
打勾:启用自定义脚本执行
(INIT的其他配置保持不变)
图形界面:
打勾:允许图形界面启动
图形子系统:VNC
图形化界面设定:保持默认配置
桌面环境:按需选择,小苏这里选择的是Xfce
(实际上小苏也推荐大家选择Xfce,原因在于XTerm太过简陋,LXDE桌面环境倒是好一些,但是"ubuntu-lxde_arm"这个Repository是免费的,可以直接导入作者为我们部署好的ubuntu+ssh+lxde+vnc环境,而Mate桌面环境需要下载更多的软件包和依赖组件,且Bug数量更为可观)
配置完毕后,回到主界面,按下"菜单键",选择"配置"让我们刚才的的设置生效:
配置完毕后,点击底部的"停止"按钮停止Linux系统,再点击"启动"按钮启动Linux系统,接着我们登入SSH,在终端中执行:
sudo apt-get install ttf-wqy-zenhei #安装中文字库
中文字库安装完毕后,执行以下命令启动VNC:
vncserver
终端会返回以下结果:
New 'X' desktop is localhost:1
Starting applications specified in /home/android/.vnc/xstartup
Log file is /home/android/.vnc/localhost:1.log
证明vncserver已启动成功。
(注意,在某些时候,第一次执行vncserver
命令时系统将要求你设定一个小于8位数的VNC密码,你需要输入两次密码之后提交,VNC密码设定完成之后还会有一个提示,不用理会,键入n
提交即可)
接着我们使用VncViewer来连接到我们刚刚部署好的的图形界面:
打开VncViewer,点击右下角的"+"按钮添加VNC会话:
Address:
127.0.0.1:5901
Name:
Localhost - Ubuntu@Xfce
其中,"Address"项为VNC服务器所在的地址。由于我们需要连接本机的VNC服务器,所以填写127.0.0.1即可,此外我们还需要在地址后指定VNC端口,因为刚刚终端返回的信息:New 'X' desktop is localhost:1
指定了此次桌面会话号为1,所以端口就为5900+1=5901。如果我们开启了多个虚拟桌面,它们的会话号为2,3,4...,那么各自的端口即为5902,5903,5904...依次类推。并且,服务器地址与端口之间需要用英文冒号隔开。"Name"项为用户为此VNC会话指定的地址,我们为了区别其他会话,填写的是Localhost - Ubuntu@Xfce,实际上随便填写什么都可以。
这些信息填写完毕后,点击"CREATE"按钮提交:
确认信息无误后,点击下面绿色的"CONNECT"按钮开始连接VNC会话(如果你之前没有设定过VNC密码,但在连接VNC连接过程中仍然需要你输入密码时,那么你可以输入android用户的密码试试):
好了...图形界面的部署过程到此为止,剩下的你们自己折腾吧(/doge脸)~
1. 当你开启了一个VNC会话,停止Linux系统再启动Linux系统后,再次执行vncserver命令,系统可能会报出以下错误:
这时候,你可以执行以下两条命令:
rm -rf /tmp/.X1-9-lock rm -rf /tmp/.X11-unix/X1-9
执行完毕后,再执行vncserver
,会话号就会被重置为1了。为了防止每次停止再启动Linux系统后带来的这个问题,我们可以编辑/etc/rc.local文件,在此文件的exit 0
之前插入这两条命令:
sudo vim /etc/rc.local #编辑/etc/rc.local
编辑完成后,保存即可,进行这步操作后,在启动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图像充满屏幕且不影响显示效果。调节方法就是在每次执行vncserver
命令时在后面加上-geometry
参数,例如我需要把VNC分辨率调为720P(1280×720),那么在启动vncserver时,执行:
vncserver -geometry 1280x720
即可将新开启的VNC虚拟会话屏幕分辨率设为1280×720。值得注意的是,命令中的1280x720
里的x
是小写字母x
,而不是数学中的乘号×
。
下面是1280×720分辨率和1024×768分辨率的对比(将VNC Viewer画面缩小到最小):
很明显,在小苏的1080P屏幕上,将VNC分辨率设为1280×720可使图像填充满屏幕且视觉效果更佳。
如果你觉得每次启动vncserver时输这么一长串命令有点儿麻烦,那么可以编辑~/.bashrc
文件,在下图所示的位置增加一行alias定义:
vim ~/.bashrc #编辑~/.bashrc
alias vncserver='vncserver -geometry 1280x720'
之后,每次执行vncserver
命令后,新开启的VNC会话的分辨率都会被设为1280×720。
https://play.google.com/store/apps/details?id=com.realvnc.viewer.android