方法1: Linux Surface 项目 (推荐)

Linux Surface 项目 

前置条件:

  • 你已经在 Surface Pro 7 上成功安装了标准的 Ubuntu 22.04 LTS。
  • 你已经在 UEFI/BIOS 中禁用了 Secure Boot (安全启动)。
  • 你已经登录到 Ubuntu 桌面环境。
  • 你的 Surface Pro 7 必须能够连接到互联网。
  • 重要: 你已经运行了你的代理工具 (如 Clash),并且知道它提供的 HTTP 代理服务器地址和端口 (例如 127.0.0.1:7890)。后续步骤需要通过此代理访问 GitHub。

✅ 总结:Surface Pro 7 可以很好地运行 Linux(通过 linux-surface 项目)

👍 工作良好的功能包括:

  • 触摸屏、多点触控、Surface Pen
  • WiFi、蓝牙(少量设备需手动装 Marvell 驱动)
  • 电源管理、亮度调节
  • 摄像头(部分设备仍需等待补丁)
  • 虚拟键盘(配合 GNOME 使用效果佳)

 

步骤一:准备终端环境和国内镜像(装系统后设置过可以忽略)

  1. 打开终端 (Terminal): 按 Ctrl+Alt+T
  2. (可选,但推荐) 检查并切换到国内软件源: 如果你还没切换,为了提高下载 Ubuntu 基础包的速度,建议先切换。
    • 打开 "软件和更新" (Software & Updates)。
    • 在 "Ubuntu 软件" 选项卡,将 "下载自:" 改为国内镜像站 (如 mirrors.aliyun.commirrors.tuna.tsinghua.edu.cn 等)。
    • 关闭后按提示 重新载入

步骤二:配置代理并添加 linux-surface 软件源

  1. 检查当前代理设置 (确认终端未配置代理):

    • 在终端中运行以下命令,通常它们应该输出空行,表示当前终端会话没有设置 HTTP/HTTPS 代理:
      echo $http_proxy
      echo $https_proxy
  2. 设置终端代理环境变量(若上面检测不到环境变量):

    • 假设你的 Clash HTTP 代理监听在 127.0.0.1 端口 7890请将下面的 7890 替换为你自己 Clash 的实际 HTTP 代理端口。
      export http_proxy="http://127.0.0.1:7890"
      export https_proxy="http://127.0.0.1:7890"
    • 再次检查: 运行 echo $http_proxy 和 echo $https_proxy,现在应该能看到你设置的代理地址了。
  3. 添加 linux-surface GPG 密钥: (需要通过代理访问)

    • 重要: 因为 sudo 默认不会继承当前用户的环境变量,我们需要使用 sudo -E 来运行需要网络访问的 apt 相关命令,以确保它们也使用你刚刚设置的代理。
    # 注意这里的 sudo -E
    sudo -E wget -qO - https://raw.githubusercontent.com/linux-surface/linux-surface/master/pkg/keys/surface.asc | sudo apt-key add -

    (如果 apt-key 提示弃用,备选方案是: sudo -E wget -qO - https://raw.githubusercontent.com/linux-surface/linux-surface/master/pkg/keys/surface.asc | sudo tee /etc/apt/trusted.gpg.d/linux-surface.asc > /dev/null)

  4. 添加 linux-surface 软件仓库:

    echo "deb [arch=amd64] https://pkg.surfacelinux.com/debian release main" | sudo tee /etc/apt/sources.list.d/linux-surface.list
  5. (排错) 检查并清理重复的软件源: 如果你之前尝试过添加源,可能会导致重复。

    • 检查目录内容:ls /etc/apt/sources.list.d/
    • 如果除了 linux-surface.list 外还有类似 surface.list 的文件,请删除那个多余的:
      sudo rm /etc/apt/sources.list.d/surface.list # (请替换为实际多余的文件名)
  6. 更新软件包列表 (通过代理):

    # 同样使用 sudo -E
    sudo -E apt update
    • 检查输出,确保没有关于 pkg.surfacelinux.com 的 GPG 错误,并且最后是成功更新列表。

步骤三:安装 linux-surface 核心软件包 (通过代理)

  1. 执行安装命令:

    • 我们安装核心的内核、头文件、Wacom 驱动、触摸守护进程和 Secure Boot MOK 支持包。
    • 注意: 我们排除了 surface-ath10k-firmware-override,因为它通常不适用于 Surface Pro 7 (使用 Intel Wi-Fi),并且可能导致 "无法定位软件包" 的错误。
    # 仍然使用 sudo -E
    sudo -E apt install linux-image-surface linux-headers-surface libwacom-surface iptsd linux-surface-secureboot-mok
    • 耐心等待下载和安装完成。
  2. (可选) 取消终端代理设置: 安装完成后,如果你想让当前终端不再使用代理,可以运行:

    unset http_proxy
    unset https_proxy

步骤四:重启并处理 MOK 注册

  1. 重启电脑: 这是加载新内核的关键步骤!
    sudo reboot
  2. 处理 Secure Boot MOK (如果安装了 linux-surface-secureboot-mok):
    • 重启时可能会看到一个蓝色的 "Perform MOK management" (MokManager) 界面。
    • 选择 Enroll key from disk
    • 选择包含 surface 字样的条目 (通常是 /efi/ubuntu/MOK/surface.cer 或类似路径)。
    • 选择 Continue
    • 输入你在安装 linux-surface-secureboot-mok 时设置的密码进行确认。
    • 选择 Reboot
    • 如果你不打算重新启用 Secure Boot,可以忽略 MOK 注册过程,并保持 UEFI 中 Secure Boot 禁用。

步骤五:验证安装结果 (包含排错)

  1. 验证内核版本: 重启进入 Ubuntu 后,打开终端,运行:

    uname -r
    • 预期结果: 输出应包含 surface,例如 6.13.6-surface-1 (版本号会更新)。
  2. 验证 iptsd 服务 (触摸屏/触摸板):

    • 运行:systemctl status iptsd@*
    • 问题排查: 如果你遇到 Unit iptsd.service could not be found. 错误,按以下步骤修复(这是我们之前解决过的问题):
      1. 删除可能存在的错误残留文件:sudo rm /etc/systemd/system/iptsd.service (如果存在)
      2. 重新加载 systemd 配置:sudo systemctl daemon-reload
      3. 重新加载 udev 规则并触发:sudo udevadm control --reload-rules && sudo udevadm trigger
      4. 再次检查服务状态:systemctl status iptsd@*
    • 预期结果: 你应该看到至少一个 iptsd@dev-hidrawX.service (X是数字) 处于 active (running) 状态。
  3. 测试硬件:

    • 实际操作触摸屏、触摸板、Surface Pen,检查是否工作正常。
    • 检查 Wi-Fi、蓝牙、键盘盖、亮度/音量调节、睡眠/唤醒等功能。
  4. (可选) 清理无用包:

    sudo apt autoremove

后续维护:

  • 更新系统时 (sudo apt update && sudo apt upgrade),如果 linux-surface 相关包有更新,并且你的网络仍然需要代理才能访问 GitHub,记得再次使用 export 设置代理,并用 sudo -E apt upgrade 来执行升级。

结语:
遵循这些步骤,你应该能够成功地为你的 Surface Pro 7 安装 linux-surface 内核和必要的驱动,并通过配置代理解决了在中国大陆网络环境下可能遇到的下载问题。现在,享受更完善硬件支持的 Ubuntu 体验吧!


方法2:不稳定

看起来你在尝试将GPG密钥保存到/usr/share/keyrings/目录时遇到了权限问题。你可以先将文件保存到一个你有写权限的目录中,然后再使用sudo命令将文件移动到目标目录。

以下是具体的步骤:

  1. 将GPG密钥保存到一个临时目录中:

    wget -qO- https://raw.githubusercontent.com/linux-surface/linux-surface/master/pkg/keys/surface.asc | gpg --dearmor > surface-archive-keyring.gpg
  2. 使用sudo命令将文件移动到目标目录:

    sudo mv surface-archive-keyring.gpg /usr/share/keyrings/surface-archive-keyring.gpg
  3. 添加Linux Surface Repository:

    echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/surface-archive-keyring.gpg] https://pkg.surfacelinux.com/debian release main' | sudo tee /etc/apt/sources.list.d/surface.list
  4. 更新并安装Linux Surface内核和固件:

    sudo apt update
    sudo apt install linux-image-surface linux-headers-surface iptsd libwacom-surface
  5. 启用并启动IPTS服务:

    sudo systemctl enable iptsd
    sudo systemctl start iptsd

    Failed to look up unit file state: 无效的参数
    Failed to start iptsd.service: Unit iptsd.service not found.

     

    好像没影响,重启电脑

    重启不能触屏可以试试下面命令

    sudo systemctl enable iptsd@default
    sudo systemctl start iptsd@default
    

     

  6. 重启系统:

    sudo reboot

通过这些步骤,你应该能够成功安装Linux Surface内核和驱动程序,并启用Surface Pro 7上的触屏功能。

如果还不行
看起来你下载的 iptsd 版本可能已经被移除。你可以试试下载最新版本的 iptsd。以下是步骤:

  1. 访问 linux-surface/iptsd 的 GitHub 页面 查看最新版本。
  2. 下载最新版本的 iptsd,例如:
wget https://github.com/linux-surface/iptsd/releases/download/v0.5.6/iptsd_0.5.6_amd64.deb

请根据最新版本号替换下载链接中的版本号。

  1. 下载完成后,安装该 .deb 文件:
sudo dpkg -i iptsd_0.5.6_amd64.deb

确保你的系统上安装了所有依赖项:

sudo apt --fix-broken install

然后再试启动和启用服务:

sudo systemctl enable iptsd
sudo systemctl start iptsd

如果仍然有问题,请确保你已经正确安装并配置了 linux-surface kernel。你可以参考 linux-surface 的安装指南 了解更多详细步骤。