lostars
发布于 2024-07-01 / 85 阅读
0

Surface Book 2 安装 Debian 12.5

环境和工具

安装

之前尚未安装过任何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可以看到显卡驱动已经正确安装。但是此时触摸板的多指手势失效,因为默认显卡驱动安装好之后就会切换到X11X11默认是不支持触摸板的多指手势的,可以在这里查看两者的差异。虽然可以使用各种第三方的手势,但是都不如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.rules87行左右有如下是否是双显卡笔记本检测,有则禁用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