写给Surface用户的Linux入坑指南
Tofloor
poster avatar
SamLukeYes
deepin
2020-05-30 23:40
Author
本帖最后由 samlukeyes123 于 2020-9-14 18:41 编辑

本人SP6用户,当初买surface的时候就没想着要装Linux的,可还是在疫情期间由于无聊而回了Linux这个大坑。见到论坛中有人和我一样在surface上用linux的,出现各种硬件问题却找不到解决方案,特开此帖来分享一下我折腾的经验。

github上有这么几个大佬,热衷于在surface上折腾linux。他们聚在一起,创建了一个叫linux-surface的项目,向全世界提供在linux下尽量完美地使用surface的各种功能的解决方案。本帖的参考资料主要来源于linux-surface的wiki:https://github.com/linux-surface/linux-surface/wiki

在安装linux之前,你需要知道你的机型目前有哪些功能已经实现,哪些功能目前还无解。详情请见:https://github.com/linux-surface/linux-surface/wiki/Supported-Devices-and-Features

这个页面有一张表,提供了你所需要的信息。例如,我的SP6的绝大多数功能都是支持的,显示电量、性能模式以及使用触屏和笔需要安装linux-surface内核(但我没记错的话在ubuntu18.04下可以直接使用触屏和笔,只是电量显示需要linux-surface内核),摄像头目前无解;而较新的SP7支持就要差一些,需要5.5+的linux-surface内核才能使用触屏,而且只能单点触控,还不能用笔,摄像头问题也无解,显示电量和性能模式同样需要linux-surface内核;SGO和SGO2除了摄像头和性能模式无解之外,其他功能无需linux-surface内核即可实现。根据这张表,你可以对linux下能够实现哪些功能有一个心理预期。如果有哪个不支持的功能是你的刚需,我建议你还是老老实实用win10。

接下来就是关掉bitlocker(重要!!),然后照着wiki折腾了:https://github.com/linux-surface/linux-surface/wiki/Installation-and-Setup
由于各个型号的具体过程有差别,wiki上也写得很详细,我在这里就不细讲了,只讲一些注意事项。

一、关于内核版本的选择

大部分surface设备都是使用ipts(intel精准触控)实现触屏的,其中包括我的SP6。以下关于触屏的内容只针对ipts的型号,不使用ipts的(如SP1~3、S3、苏菲狗系列)请移步wiki去寻找具体的指导。

由于上游(Linux内核项目)破坏原有的了ipts支持,目前在5.4+的内核上只能实现触控笔操作单点触控。因此在选择内核版本的时候:

1、如果你可以接受只用单点触控或者只用笔不用触屏,你可以选择最新版本的内核。
2、如果你需要多点触控,或者需要同时使用触屏和笔,建议选择4.19版本的LTS内核,这个版本的内核将持续维护至今年年底。
3、如果你既需要完整的触屏支持,也需要5.x的内核,那么你只能使用已经EOL的5.3内核,这个版本的内核将不再收到安全更新。


目前最新版的内核也可以同时实现手指触控和触控笔操作了,只是需要 iptsd。

最新版和4.19版linux-surface内核可以通过软件源获取:https://github.com/linux-surface/linux-surface/wiki/Package-Repositories
无论是用软件源还是手动下载,本质上都是从github上下载(软件源的下载也是重定向到github的release的),因此可能会存在下载过慢的问题。可以手动使用油猴脚本fastgithub提供的镜像站下载release。在某些网络环境下,密钥文件(surface.asc)可能也会无法获取,我会在楼下贴出文件内容。

二、关于屏幕自动旋转

这个问题在理论上可以解决,但除非你真的很需要竖屏,或者你使用的桌面环境对此的支持比较好(如GNOME、Budgie等,安装iio-sensor-proxy后可以完美实现自动旋转),不然不建议你折腾这个。如果你的屏幕可以自动旋转,但在竖屏状态下触屏操作和落笔操作无法在屏幕上正确对应,建议直接禁用自动旋转(大佬除外)。如果设置中没有这个选项,就直接禁用iio-sensor-proxy服务,或者卸载它,然后重启。

参考资料:https://wiki.archlinux.org/index.php/Tablet_PC(其他发行版原理应该差不多)

三、用 Wayland 还是 X11?

linux-surface 的 wiki 上推荐使用 wayland,理由是 wayland 对触屏有原生支持,而 x11 会默认把触屏操作模拟成鼠标点击。这一点其实无关痛痒,如果你需要用 x11(比如 Deepin 的桌面环境根本不支持 wayland),照样用 x11 就是了。

四、关于休眠/睡眠的问题

这个似乎并不是在所有桌面环境都会出现,好像我用 dde、gnome 的时候是可以正常睡眠的。建议装好后先试试能不能睡眠,如果不能的话就在设置中关闭自动睡眠,并且把合盖动作调成锁屏吧。由于我自己不需要这个功能(目前不太在意续航的问题),我也没去找解决方案。如果你需要这个功能,请自行google。如果有谁解决了这个问题,也欢迎分享。
休眠似乎也有些问题,我的 SP6 每次从休眠唤醒之后都会特别卡,所以我没有开启休眠。

五、关于发热与续航问题

我的SP6在Windows下默认的CPU主频为1.9GHz,但在Linux下睿频的最大主频为4.2GHz,发热很恐怖,但可以通过调整CPU的策略来减少发热。如果你使用的是KDE,可以使用KDE的一个小部件:Intel P-state and CPU-Freq Manager,把turbo给关了,发热就会明显降低,续航时间也会变长。GNOME、DDE也有类似的扩展或小部件。如果你用的是其他桌面环境,也可以用cpupower-gui来限制最大主频。不推荐使用 TLP,因为它在默认设置下会导致一些其他的硬件问题。

另外,可以用 surface-control 来像在 Windows 上那样调整电源模式,但目前只支持推荐、更好的性能和最佳性能这三种模式,不支持节电模式,因此比较鸡肋。(似乎这玩意儿真正的作用是调节风扇转速……)

六、关于UEFI固件的更新

如果你保留了Windows,微软会自动给你推送固件更新。然而事实上,UEFI固件只要没有出现严重的bug,一般是不需要更新的,反而微软给你强制推送更新有时还会出问题。案例参考:https://answers.microsoft.com/zh-hans/surface/forum/all/surface-pro4/9dcf92e9-2ab2-4415-b2ef-b36bb66ff013?page=1
如果你想规避固件更新的风险,我建议,只在刚买到surface的时候进行一次更新,确认固件可用以后,就装linux,别用Windows了。

如果你在某些时候需要更新固件,却已经卸载了Windows,可以参考此页的方法进行手动更新:https://github.com/linux-surface/surface-uefi-firmware


七、如果你想把Linux装进TF卡……


Surface部分型号的UEFI固件不支持从TF卡启动,因此在这些型号的TF卡上建立esp分区是没用的。经过测试,grub不能装在TF卡上,不然直接进rescue,而且rescue命令行完全无法识别分区。如果把grub装在硬盘上,就可以正常启动grub,但是(疑似)无法启动TF卡上的内核。因此,只能把引导程序和内核都放在硬盘上,也就是把/boot挂载在硬盘上。

八、在最新版内核上正常使用触屏

由于5.4+内核让原有的ipts驱动方案不可用,linux-surface团队正在开发新的ipts驱动。这个驱动由两个部分组成,一个是内核模块,另一个是守护进程。需要注意的是,此方案还处于实验性的阶段,使用前请仔细阅读这两个项目的README。如果你使用的是arch系的发行版,在安装linux-surface内核后可以直接安装我上传到AUR的软件包ipts-uapi-dkms-git。其他发行版请按照README中的方法安装。

目前按照 linux-surface wiki 上的方法已经可以顺利在最新版的内核上实现触屏。

九、关于 wifi 不稳定的问题

偶尔会出现 wifi 突然中断然后无法再打开的问题。目前此问题还没有彻底解决,详见此 issue





Reply Favorite View the author
All Replies
1 / 2
To page
SamLukeYes
deepin
2020-05-31 02:58
#1
真·没几个人像我这样作死
Reply View the author
leafgreen
deepin
2020-05-31 03:07
#2
我买电脑的时候都考虑哪些型号装linux省事。感觉楼主太能折腾了,厉害。
Reply View the author
SamLukeYes
deepin
2020-05-31 04:29
#3
https://bbs.deepin.org/post/195290
我买电脑的时候都考虑哪些型号装linux省事。感觉楼主太能折腾了,厉害。

surface还算是有成熟的解决方案,认真看一看wiki就能搞定了。只是,得找到这个wiki
Reply View the author
tr******rt@outlook.com
deepin
2020-05-31 04:36
#4
从入门到出二手
Reply View the author
SamLukeYes
deepin
2020-05-31 04:44
#5

出二手倒不至于,win10还是能用的
Reply View the author
wnmer
deepin
2020-05-31 05:35
#6
楼主真有钱
Reply View the author
SamLukeYes
deepin
2020-06-06 05:59
#7
苏菲狗2的测试结果出来了,无需换内核即可正常使用,果然 MS love Linux
Reply View the author
SamLukeYes
deepin
2020-06-15 07:59
#8
找到解决屏幕旋转问题的方案了,就是用budgie
Reply View the author
SamLukeYes
deepin
2020-06-16 05:05
#9
尝试了一下论坛中禁用pstate来减少发热的做法,效果是把最大主频从4.2GHz降到了2.1GHz,但似乎在空闲的时候不会自动降频,因此发热还是很严重,续航甚至还会变短,除非配合其他策略。还不如不禁用pstate然后限频
Reply View the author
SamLukeYes
deepin
2020-07-17 01:11
#10
本帖最后由 samlukeyes123 于 2020-8-24 18:25 编辑

如果在添加软件源之前导入密钥的时候无法获取surface.asc,可以执行(以debian系为例):
  1. sudo apt-key add -
Copy the Code

此页的文本内容复制,然后按下ctrl+D,就可以进行接下来的操作了。
Reply View the author
zhangn1985
deepin
2020-07-17 07:12
#11
可以限制pstate的百分比,/sys/devices/system/cpu/cpufreq/  你在这个目录下找找,有pstate的max, min,每个频点对应一个pstate,禁止高频就可以达到你的目的了。

intel 处理器还是推荐用pstate,毕竟这个是硬件采样的。
Reply View the author
zhangn1985
deepin
2020-07-17 07:15
#12
max_perf_pct min_perf_pct, 把max调50%就可以啦。
Reply View the author
SamLukeYes
deepin
2020-07-17 18:00
#13
刚刚搞定了 secure boot,不知道这玩意儿有没有人感兴趣
Reply View the author
SamLukeYes
deepin
2020-07-20 17:59
#14
刚才看到一个案例,微软给苏菲婆4推送的固件更新有问题,导致苏菲婆4集体变砖。如果使用Linux系统,就不会被微软强制推送固件更新,保证你的苏菲可以长期正常使用
Reply View the author
SamLukeYes
deepin
2020-07-24 18:30
#15
最新版的内核也可以愉快地使用触屏啦
虽然这个方案还处于实验性的阶段,但SP6亲测可用
Reply View the author
SamLukeYes
deepin
2020-07-30 08:52
#16
deepin 的安装程序比较死板,不支持直接把 EFI 分区挂载为/boot。如果需要把 deepin 装在 TF 卡上,可能还得在硬盘上额外建一个/boot 分区。我就偷了这个懒,结果现在只能用 manjaro chroot 进 deepin 了
Reply View the author
SamLukeYes
deepin
2020-08-17 06:01
#17
目前在最新版内核上驱动 IPTS 的方案已经正式推出!
Reply View the author
mikye
deepin
2020-11-22 21:32
#18

请问你下载慢的问题怎么解决的,

Reply View the author
SamLukeYes
deepin
2020-11-22 22:59
#19
mikye

请问你下载慢的问题怎么解决的,

在 github 访问较慢的环境下,添加软件源目的只是为了检查更新,实际下载安装包可以在 github 仓库的 release 页面上用油猴脚本找反代

Reply View the author
mikye
deepin
2020-11-23 07:16
#20
SamLukeYes

在 github 访问较慢的环境下,添加软件源目的只是为了检查更新,实际下载安装包可以在 github 仓库的 release 页面上用油猴脚本找反代

唉,下完了,不使用v2ray下载速度14k,使用v2ray下载失败。吐了。

Reply View the author
1 / 2
To page