平板的折腾之旅:从Windows 10到Ubuntu
疫情来袭,天天在家里沉默的我终于在平板卡到死机之后爆发了。一怒之下,索性把整个硬盘格式化了装上Ubuntu,拜拜了Windows 10!
但是安装经历就不是那么愉快了……
毕竟这不是标准的PC/Laptop设备,考虑到小厂家的BIOS/驱动可能会出现千奇百怪的问题,还是先谨慎一点为好。
先做一下心理准备:如果能解决这些问题,就干脆让Windows有多远走多远~
- 触摸屏/触摸板至少有一个能基本正常使用,毕竟是平板,不是真的当笔记本用的
- 至少不比Windows 10更卡
- 能够提供我需要的基本功能:
- 方便地阅读PDF文档和ppt课件
- 用markdown+TeX公式写笔记
- 简单浏览网页
- 临时编写代码,测试一些点子或者简单试用一些库
硬件设备
- 机型:中柏(Jumper)Ezpad 7s
- 屏幕:显示分辨率1920x1080,10.8英寸屏幕
- 内存:DDR3 4GB
- 磁盘:eMMC 64GB
- CPU:Intel Cherry Trail X5-Z8350 1.44GHz
- 显卡:Intel HD Graphic
- 外设:
- Jumper Ezpad 7s标配键盘
- 金士顿microSD存储卡 64GB
系统环境
原装Windows 10 1903家庭版,计划安装Ubuntu 18.04 LTS
试用
先用Windows 10自带的磁盘管理工具压缩出一定的空间来,安装Ubuntu,主要目的是检查硬件工作是否正常。
没想到的是这一步就发现了麻烦:64GB的磁盘最多允许压缩出大概8GB的空间,这么点地方真是够紧张的——幸好,还勉强足够安装Ubuntu。
我制作启动盘时用的是UltraISO,过程就不赘述了。在安装Ubuntu时,选择18.04新引入的选项“最小化安装”,放弃安装LibreOffice、ThunderMail等应用,然后选则手动分区安装系统。
在"What apps would you like to install to start with?"中选择"Minimal installation"
在压缩出的8GB空间中创建分区用于挂载如下目录:
/boot
:用于放置启动引导,200MB/swap
:交换空间,类似Windows系统下的虚拟内存,1024MB/
:系统根目录,5800MB(按照Ubuntu官方给出的提示,即使是最小化安装,这部分也至少要分配5.2GB的空间)/home
:用户目录,剩余的空间都分配到这里,略多于1GB
除了挂载/boot
的是逻辑分区之外,其余都是主分区。
配置Ubuntu分区的介绍一搜一大片,上述的配置是按照安装双系统设置的,主要参考这篇文章的说明。(想给自己电脑装双系统的朋友们,注意比较新的电脑往往是UEFI引导启动的,EasyBCD不适用)
安装完毕以后取出U盘,进入Windows系统,尝试用EasyUEFI修改启动顺序,将Ubuntu调到第一位。这里就又发现了坑:即使用EasyUEFI调整了启动顺序,依然是启动Windows而不是Ubuntu。为什么呢?
一个个试过之后终于找到了进入BIOS设置的键(万万没想到是Esc
),尝试从BIOS设置里修改启动顺序,发现启动顺序竟然被写死在了BIOS里……对于用惯了标准x86设备的人来说真是奇观。
那既然修改的企图是白费功夫,就只好每次都先进入BIOS再选择Ubuntu引导启动了。
总算是进入了Ubuntu,却发现无论是触摸屏还是触摸板的驱动都不能用了,算了,反正猜也猜到了,这种事情的发生是八九不离十的。上网一查,关于Ubuntu使用触摸屏设备的资料简直是从故纸堆里翻出来的,都18.04了,大多数资料是关于10甚至是9的,这还怎么用!一阵翻箱倒柜,竟然真被我找到了几篇同道者留下的经验:
- 在昂达V101W上安装Ubuntu(由于是github pages,访问前请修改hosts避开DNS污染)
- 在Fyde OS的社区当中,找到了关于酷比魔方 KNote Go安装Fyde OS后适配触摸屏的问题
- 一位有趣的天文学博主写的ThinkPad X1 Yoga上的适配方案
- 用于适配开源驱动gslx680_ts_acpi的固件文件提取和制作
有三篇文章都提到了可以使用gslx680_ts_acpi这个开源驱动做适配工作,过程大概是这样的:
- 首先找到Windows下所用的驱动,对于这个开源驱动可以应对的硬件(GSLx680y系列触摸屏)来说,这个文件应当是
C:\Windows\System32\drives
当中的SileadTouch.sys
,这可以在Windows下用设备管理器查看驱动位置找到,将其复制到TF卡中,我的TF卡使用的是exfat文件系统,Ubuntu只要安装exfat-utils
就可以正常访问了 - 然后执行如下的代码引入gslx680-acpi的驱动部分:
- 再用
gsl-frimware
工具获取所需的固件文件:(假设SileadTouch.sys
已经复制到了Ubuntu系统中)
- 将固件放进对应的位置,重启系统
- 重复第三、四步(是的,重复它……)改变
-w
和-h
参数后面的数值,它们分别代表触摸屏的物理宽度和长度。需要注意的是,物理尺寸和显示尺寸根本不是一个东西,例如:我的Ezpad 7s显示分辨率是1920x1080,但是物理尺寸大约是1730x1120。这个物理尺寸根本无处查询,只能逐步缩小试验来大概估计——这足足消耗了我一晚上时间,只是一遍一遍地生成文件和重启这该死的平板。
如果是一些比较老的型号,在gsl-firmware这个项目上就可以找到前辈身先士卒踩坑的经验,可惜,Jumper的产品现在也才公布到Ezpad 6s,所以我只好用这样的办法来试:
放好silead_ts.fw
文件后,重启系统,用触控笔(当然用手也行,只是不大方便看)在桌面上框选,看看拉到屏幕边缘时,选框大概能到什么位置。
图片是Linux Mint下我随便截的,Ubuntu下也没什么区别。因为触摸屏是以左上角为点的,所以如果选框右下角达不到桌面右下角,并且能够得着的最远点是的话,那输入的物理分辨率太大了,应该调整为
其中,是屏幕的尺寸,可以直接用尺子量,也是实际位置,同样用尺子量出来。如果选框比实际的触摸位置先到桌面右下角的话,就是物理分辨率输入得太小了,反过来调整就行。
这样反复调整几次(也不知道是几次)以后,终于可以获得说得过去的触控操作了。
不过还需要用专门的校准工具来校准屏幕,这里使用xinput-calibrator
,这是Xorg提供的校准程序,不依赖于具体硬件。
这时xinput-calibrator
应当已经能检测到触摸屏并启动校准,只需依次点击灰色背景上的四个白色十字即可完成校准。校准后,程序会输出一些信息到终端,按照提示将其复制到/etc/X11/xorg.conf.d/99-calibration.conf
中(我的系统中并没有这个文件,所以手动创建了一个)。为保险起见,另一个提示的目录/usr/share/X11/xorg.conf.d
中也放置一个相同的文件。
到这时,我终于可以用触摸屏了。
接下来各种体验操作就随意了,果然Ubuntu还是比Windows占资源少啊,即使我用Gnome桌面也没怎么卡顿。那么就愉快地决定了:放弃Windows 10!
正式安装和使用
重新插入U盘启动,这次选择完整安装,并且直接清除整个硬盘安装Ubuntu,一切顺利。
由于之前试用的系统已经没有了,所以需要重新安装gslx680_ts_acpi
,重复上面的过程使触摸屏正常工作。
虽然现在触摸板的问题依然没有解决,不过这个不重要啦,反正有触屏也足够了。
接下来又遇到一个问题:Ubuntu对触摸屏设备的支持并不是很好,Firefox很难滚屏,一旦滑动就会选中页面上的文字。好在这个问题的解决方案不难查到,需要修改Firefox的.desktop
文件中的Exec
属性,我的Firefox安装在/opt/firefox
下,就改为
备用的方案还有强行修改about:config
等,不过这个方案工作正常,不用作这样的修改了。
具体可见:在 Firefox 中,Ubuntu 16和触摸屏滚动
因为Firefox比较占内存,所以又安装了Foxit Reader来阅读PDF。
另外准备尝试着安装wine来运行Kindle for PC,用来看在Amazon上买的电子书(主要是数学类的,不方便在Kindle上看)。
对于笔记和代码来说,还是用习惯了的VS Code,基本的C++/Python/Markdown All in One
三个插件一上就能用了。之所以我一直喜欢Markdown All in One
而不是Markdown Preview Enhanced
作为我的markdown插件,是因为工科生的笔记里公式太多,用KaTeX渲染的Markdown All in One
对性能的要求比Mathjax要低很多。
上几张自己的笔记,向大家证明一下用平板记笔记也不只有OneNote或者EverNote,用键盘也是可以的~
后记
工科生就是喜欢折腾。
好吧,也许这是我自作多情,但是折腾来折腾去,总归获得了一些对Ubuntu硬件设备驱动的了解。再说了,疫情当头、自我隔离之际,总要找些事情做——一边气得咒骂一边却还不想放下的事情,似乎也算是个不错的选择了?
大概体会了一下所谓的
Linux is free when your time is free.
随后我会发起一个Pull Request,把自己测试Jumper Ezpad 7s的参数传到gsl-firmware项目中去,不知道这样算不算得上栽树,有没有后人来乘凉(笑)。