环境和工具
- surface book 2 13.5 16g gtx1050m
- Debian 12.5 完整镜像
- 启动盘制作工具:rufus
- UEFI命令行工具:UEFI-Shell
- Surface Kernel 6.9.3-2
安装
之前尚未安装过任何linux发行版本,Debian镜像用rufus
写入U盘后就可以开始安装了。surface book 2 按住音量上,开机,出现微软logo再松开音量键就能进入uefi,安全启动不用关闭,新版本的Debian和Ubuntu都能正确识别。
注意,就算是完整的Debian镜像,也需要配置网络来安装桌面环境。虽然可以配置国内的镜像地址,最好也准备个http代理来加速下载。
mok清理
如果之前安装过其他的linux发行版本,且自己签名了驱动或者内核,那就需要清理uefi的mok环境变量,不然会一直卡微软logo。该变量不是写在硬盘上,格式化硬盘是没用的。
使用上面的UEFI-SHELL
制作U盘启动镜像并启动,成功进入shell环境,执行dmpstore
可以看到所有的uefi变量,其中有一些MokAuth
类似的变量,可以使用dmpstore -d -all MokAuth
执行删除。但是有些mok变量可能看不到,所以可以直接使用dmpstore -d -all
来删除所有变量,不用担心删除一些关键的变量,那些都是有写保护的。
mok变量清理之后就可以正常的进行系统安装。
Surface Kernel
安装完成,Debian默认的用户是没有加入sudo组的,需要切换到root手动添加进去:
su -
usermod -aG sudo 需要添加到sudo的用户名
Debian 12.5默认的6.1内核是能够成功的识别部分硬件的,如键盘、触摸板等。但是一些如摄像头,触摸屏等硬件是没法识别的,所以需要安装surface kernel
来识别其他硬件,该内核支持的surface book 2硬件可以在这里查阅。
通过该安装指引可以成功安装内核。
在安装
linux-surface-secureboot-mok
后重启可能没法看到mok manger,导致卡在logo。可以在#1377查看相关讨论。
此时关闭uefi安全启动,下载Linux Mint 21.2制作启动U盘并启动,此时可以正确的看到mok manager的界面,enroll完成之后即可正常进入Debian系统,完成SurfaceKernel的安装。
此时大部分的硬件都已经被系统识别出来,除了显卡驱动。
可以安装一些工具,如
surface-control
来查看设备状态
Nvidia Driver
安装inxi
后执行inxi -G
可以看到显卡驱动是没有安装的。按照Debian官方指引可以安装显卡驱动。目前环境下dkms在编译驱动时候会出现libssl报错,需要安装libssl1.1
,在/etc/apt/sources.list
添加旧版本debian仓库:
deb http://deb.debian.org/debian bullseye main contrib non-free
之后dkms可以正确签名并安装显卡驱动。
显卡驱动建议从官方仓库进行安装,否则需要自己签名。
dkms自动生成的签名位于/var/lib/dkms
,需要将其导入mok:
mokutil --import /var/lib/dkms/mok.pub
重启然后执行mok enroll,同样也需要使用linux mint的启动盘来进入mok manager。
完成之后进入系统执行inxi -G
可以看到显卡驱动已经正确安装。但是此时触摸板的多指手势失效,因为默认显卡驱动安装好之后就会切换到X11
,X11
默认是不支持触摸板的多指手势的,可以在这里查看两者的差异。虽然可以使用各种第三方的手势,但是都不如Wayland
默认的用着舒服。
在Nvidia上启用Wayland
按照Debian文档中的方式进行操作,但是依旧无法开启Wayland
。在这里找到了解决方案:
/usr/lib/udev/rules.d/61-gdm.rules
中配置了Wayland
启用的各种条件;sudo cp /usr/lib/udev/rules.d/61-gdm.rules /etc/udev/rules.d/61-gdm.rules
将该配置文件复制出来编辑,不要直接修改;
默认上面Debian的文档满足了大部分启用条件,但是在/usr/lib/udev/rules.d/61-gdm.rules
87行左右有如下是否是双显卡笔记本检测,有则禁用Wayland
:
# If this is a hybrid graphics laptop with vendor nvidia driver, disable wayland
LABEL="gdm_hybrid_nvidia_laptop_check"
TEST!="/run/udev/gdm-machine-is-laptop", GOTO="gdm_hybrid_nvidia_laptop_check_end"
TEST!="/run/udev/gdm-machine-has-hybrid-graphics", GOTO="gdm_hybrid_nvidia_laptop_check_end"
TEST!="/run/udev/gdm-machine-has-vendor-nvidia-driver", GOTO="gdm_hybrid_nvidia_laptop_check_end"
GOTO="gdm_disable_wayland"
LABEL="gdm_hybrid_nvidia_laptop_check_end"
此处在复制出来的配置中注释即可,重启即可成功启用Wayland
。
摄像头
surface kernel目前是不支持摄像头的,需要手动编译libcamera来支持。
休眠
遇到休眠被莫名的唤醒事件打断,可以在这里看到讨论。
主动触发休眠是会被Debian系统设置中Power-Automatic Suspend-On
打断的,所以如果要通过sudo systemctl hibernate
验证休眠功能是否正常,需要关闭前面的设置。
使用swap分区需要配置/etc/fstab
为:LABEL=swap none swap sw 0 0
,分区没有指定label
时使用UUID
,分区信息使用blkid
查看。
同时需要修改/etc/initramfs-tools/conf.d/resume
,和上面一样需要指定label
或者uuid
,然后update-initramfs -u
刷新配置。
其他问题
偶尔开机会出现dev-surface-dtx.service
启动失败,导致键盘、触摸板全部失效,可以在这里找到相关讨论,临时禁用dtx服务就行(重启也能解决):
systemctl disable surface-dtx-daemon.service
其他设置
可以使用localectl
来设置系统区域选项
将默认的grub启动菜单换成黑白控制台,在/etc/default/grub
添加GRUB_BACKGROUND=""
将背景置空,创建/boot/grub/custom.cfg
添加以下内容,然后update-grub
重启即可看到效果。
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
插件:
# 托盘图标
sudo apt install gnome-shell-extension-appindicator
# 桌面任务栏
sudo apt install gnome-shell-extension-dashtodock
# 系统资源监控
sudo apt install gnome-shell-extension-system-monitor