Surface Pro 8 with Linux (Fedora 36)

# きっかけ
　以前はMacbook Proの15インチとiPad Proの12.9インチを使っていましたが、電池持ちが良くないため充電器コミコミで２ｋｇ強になって買い替えを検討、そこでSurface Pro 8を見つけ家電量販店で試しに使ってみて帰りのハードオフにて同じ機種があったため購入。本体が１８万強・ペン・キーボードはセットで新品３万弱で計２１万だったが公開はしていない。
結構苦労したので書き残しておこうと思う。

## なぜFedoraを入れたのか
　単純にWindowsが使いにくかったから。元々Linux (Debian系)を使っていたのもあるが、あまりGUIメインよりCUIでポチポチ打つほうがやりやすかったのでWindowsでは耐えられなかった。あと試しにサブで使っていたノートパソコンにFedoraを入れてみたら手動でドライバを入れなくても完動して感動したから、ダジャレじゃないです。

# スペック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294563/191aecd0-af8b-086b-fe80-03daacbc6f20.png)

SSDを256GB -> 1TBに増設している。

# 動作状況
カメラ以外は基本的に動作している。
Slim Pen 2に関してはまだドライバがないためマウス扱いになるが使えないことはない。

# 使用モジュール
・[linux-surface](https://github.com/linux-surface/linux-surface)（Surfaceに最適化されたカーネル、大体がこれで動作する）
・[ithc-linux](https://github.com/linux-surface/linux-surface)（Surface Pro 8と7+でタッチパネルを動作させるために必要な前提モジュール、これのみだとシングルジェスチャのみ動作する）
・[itpsd (fork)](https://github.com/quo/iptsd)（linux-surfaceに入っているiptsdのフォーク、こちらを使うことでマルチジェスチャが動作した）

# 前提条件
Fedora 36をインストール後インターネットに接続してアップデートを済ませてるものとする。

# 1. インストール（カーネル）
[こちら](https://github.com/linux-surface/linux-surface/wiki/Installation-and-Setup)を参考にカーネルをインストールする

## リポジトリ追加
```bash:add repository
sudo dnf config-manager \
    --add-repo=https://pkg.surfacelinux.com/fedora/linux-surface.repo
```

## 各種インストール
```bash:install more
sudo dnf install --allowerasing kernel-surface iptsd libwacom-surface
```

## 自動起動有効
```bash:enable automatically
sudo systemctl enable iptsd
```

## セキュアブートを有効（未確認）
当方はこちらを入れてセキュアブートを有効にしたが、動作しなかった。
```bash:install secure boot
sudo systemctl enable iptsd
```

## ファイル作成
当方はVimを使った。
```text:/etc/systemd/system/default-kernel.path
[Unit]
Description=Fedora default kernel updater

[Path]
PathChanged=/boot

[Install]
WantedBy=default.target
```

```text:/etc/systemd/system/default-kernel.service
[Unit]
Description=Fedora default kernel updater

[Service]
Type=oneshot
ExecStart=/bin/sh -c "grubby --set-default /boot/vmlinuz*surface*"
```

## 自動起動有効（セキュアブート）
```bash:enable automatically with secure boot
sudo systemctl enable default-kernel.path
```

## 次回時Surfaceカーネルを自動読み込み
```bash:enable automaticcaly select surface kernel
sudo grubby --set-default /boot/vmlinuz*surface*
```

## 再起動
普通に再起動

# 2.タッチパネル関係をインストール
再起動すると諸々が使えるようになってると思う。このままでも常用できなことはないが、個人的にタッチパネルが使えないのは辛い。
そこで色々こねくり回した結果、必要なモジュールを個別でソースコードからビルドすることで使えるようになった。

## ithc-linux
[こちら](https://github.com/quo/ithc-linux)からソースコードをダウンロード（クローン）後、以下のコマンドを順番に入力する。

事前にdkmsと[ここ](https://github.com/linux-surface/linux-surface/releases)からFedora用のdevelと書いたものをインストールしておく。
```bash:install ithc-linux
make && sudo make install
sudo modprobe ithc
```

当方はここで指定のディレクトリが存在しないようでつまづいた。
そのため指定のディレクトリにソース一式を移したあと、もう一度同じコマンドを実行し直したらうまくいった。

その後、dmesgを実行してithc関連でエラーが出てないか確認する。
うまくいけばシングルタッチが動作するようになるが、ここで
```plaintext
Blocked an interrupt request due to source-id verification failure
```
と出ていたらGRUB2の設定に
```text
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet intel_iommu=off intremap=nosid"
```
書き込んでから
```text
grub2-mkconfig -o /etc/default/grub
```
実行後再起動する。

## iptsd
事前にmesonとninjaが入っていなければインストールしておく
[ここ](https://github.com/quo/iptsd)からソースコードをダウンロード。

その後ビルドする。
```text:
meson build --wrap-mode=forcefallback --buildtype=debugoptimized -Dmarch=native
ninja -C build
sudo build/src/daemon/iptsd
```

g++関連でエラーが出た場合
```text
sudo dnf install g++
```
インストール後再試行すればうまくいくはず。

ビルド後、インストールする。
```text
sudo ninja -C build install
sudo systemctl daemon-reload
sudo systemctl disable iptsd
sudo systemctl start iptsd
```

すべてうまくいけばマルチタッチができるようになっているはずだ。
GNOMEはジェスチャー動作もするようになっているため、直感的に操作できて使いやすい。

# 最後に
至らぬ点やおかしな表記があれば是非コメントまで。
念願のLinux生活だやったー！