平板的折腾之旅:从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等应用,然后选则手动分区安装系统。

minimal-installation.png

在"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的,这还怎么用!一阵翻箱倒柜,竟然真被我找到了几篇同道者留下的经验:

有三篇文章都提到了可以使用gslx680_ts_acpi这个开源驱动做适配工作,过程大概是这样的:

  1. 首先找到Windows下所用的驱动,对于这个开源驱动可以应对的硬件(GSLx680y系列触摸屏)来说,这个文件应当是C:\Windows\System32\drives当中的SileadTouch.sys,这可以在Windows下用设备管理器查看驱动位置找到,将其复制到TF卡中,我的TF卡使用的是exfat文件系统,Ubuntu只要安装exfat-utils就可以正常访问了
  2. 然后执行如下的代码引入gslx680-acpi的驱动部分:
1
2
3
4
5
$ git clone https://github.com/onitake/gslx680-acpi.git
$ cd gslx680-acpi
$ make
$ make install
$ sudo depmod -a
  1. 再用gsl-frimware工具获取所需的固件文件:(假设SileadTouch.sys已经复制到了Ubuntu系统中)
1
2
3
4
5
$ git clone https://github.com/onitake/gsl-firmware.git
$ cp SileadTouch.sys gsl-firmware/tools
$ cd gsl-firmware/tools
$ ./scanwindrv SileadTouch.sys
$ ./fwtool -c firmware_00.fw -m 1680 -w 1730 -h 1120 -t 10 silead_ts.fw
  1. 将固件放进对应的位置,重启系统
1
2
3
$ sudo cp silead_ts.fw /lib/firmware
$ sudo rmmod silead
$ sudo modprobe gslx_680_acpi
  1. 重复第三、四步(是的,重复它……)改变-w-h参数后面的数值,它们分别代表触摸屏的物理宽度和长度。需要注意的是,物理尺寸和显示尺寸根本不是一个东西,例如:我的Ezpad 7s显示分辨率是1920x1080,但是物理尺寸大约是1730x1120。这个物理尺寸根本无处查询,只能逐步缩小试验来大概估计——这足足消耗了我一晚上时间,只是一遍一遍地生成文件和重启这该死的平板。

如果是一些比较老的型号,在gsl-firmware这个项目上就可以找到前辈身先士卒踩坑的经验,可惜,Jumper的产品现在也才公布到Ezpad 6s,所以我只好用这样的办法来试:

放好silead_ts.fw文件后,重启系统,用触控笔(当然用手也行,只是不大方便看)在桌面上框选,看看拉到屏幕边缘时,选框大概能到什么位置。

select-screen.png

图片是Linux Mint下我随便截的,Ubuntu下也没什么区别。因为触摸屏是以左上角为(0,0)(0,0)点的,所以如果选框右下角达不到桌面右下角,并且能够得着的最远点是(x,y)(x,y)的话,那输入的物理分辨率太大了,应该调整为

w=w×xw0 h=h×yh0w'=w\times\frac{x}{w_0} \\ \nobreakspace \\ h'=h\times\frac{y}{h_0}

其中,w0,h0w_0,h_0是屏幕的尺寸,可以直接用尺子量,(x,y)(x,y)也是实际位置,同样用尺子量出来。如果选框比实际的触摸位置先到桌面右下角的话,就是物理分辨率输入得太小了,反过来调整就行。

这样反复调整几次(也不知道是几次)以后,终于可以获得说得过去的触控操作了。

不过还需要用专门的校准工具来校准屏幕,这里使用xinput-calibrator,这是Xorg提供的校准程序,不依赖于具体硬件。

1
2
$ sudo apt install xinput-calibrator
$ sudo xinput_calibrator

这时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下,就改为

1
Exec=env MOZ_USE_XINPUT2=1 /opt/firefox/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,用键盘也是可以的~

notes-1.png

notes-2.png

notes-3.png



后记

工科生就是喜欢折腾。

好吧,也许这是我自作多情,但是折腾来折腾去,总归获得了一些对Ubuntu硬件设备驱动的了解。再说了,疫情当头、自我隔离之际,总要找些事情做——一边气得咒骂一边却还不想放下的事情,似乎也算是个不错的选择了?

大概体会了一下所谓的

Linux is free when your time is free.

随后我会发起一个Pull Request,把自己测试Jumper Ezpad 7s的参数传到gsl-firmware项目中去,不知道这样算不算得上栽树,有没有后人来乘凉(笑)。