1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Surface Pro 9 に Windows 11 と Arch Linux をクリーンインストールする

Last updated at Posted at 2025-02-20

はじめに

この記事では、Surface Pro 9にWindows 11の完全なクリーンインストールを行い、その後Arch Linuxをインストールします。すでにWindows環境が仕上がっており、Arch Linuxのインストールのみ行いたいという場合は、#Arch準備編までジャンプしてください。

必要なもの

  • Surface Pro 9
  • ウェブページを閲覧できる程度の別端末(スマホで十分です)
  • 16GB程度のUSBデバイス
  • インターネット接続(無線または有線)
  • たくさんの時間(1日あれば終わるはずです、私は3日かかりました🫠)
  • 気力と根気

お掃除編:

  • 16GB程度の空き容量(ローカルディスクまたは外部ストレージ)

Arch準備編:

  • 数GB程度の空き容量(ローカルディスク)

Archインストール編:

  • 32-128GB程度の空き容量または空のパーティション(ローカルディスク)

どの工程においても、Surfaceに充電器を接続しておくことをおすすめします。
途中でバッテリーが切れると、システムやデータの破損につながります。

お掃除編

このセクションでは、既存のデータを完全に上書きし、新しいWindows 11環境を構築します。

Windowsの回復イメージをダウンロードする

回復イメージのダウンロード及び回復ドライブの作成は、Surface Pro 9以外のWindows端末からでも行えます。

以下のページにアクセスします。

MSアカウントでサインインし、正しい製品を選択したら、Surface本体の背面に書かれているシリアル番号を入力します。

image.png

「続ける」を押すと、イメージの選択が行えるようになるので、最新のWindows 11を選んで「画像をダウンロード」します。

image.png

イメージは約10GBあり、ダウンロードには2時間ほど要します。空き容量に注意しつつ、ローカルディスクや適当な外部ストレージに保存してください。ただし、イメージの書き込み先となるUSBデバイスへファイルを直接保存してはいけません。

また、このイメージはアカウント・デバイスごとに異なりますので、他人のものを使用したり、譲渡したりすることは避けてください。

Windowsの回復ドライブを作成する

イメージのダウンロードを待つ間に、回復ドライブを用意しておきましょう。
以下の記事に従います。

「ディスクとボリュームの管理」を開き、USBデバイスを確認します。

image.png

新品のUSBの場合は、FAT32かexFATのどちらかでフォーマットされているはずです。余計なデータが残っている場合や、exFATでフォーマットされている場合は、適宜Windows側の機能でFAT32にフォーマットし直してください。

GUI上でうまくフォーマットできない場合は、Windows標準のCLIツールであるdiskpartを使用します。

diskpartの実行例

diskpartはコマンドライン上で対話を行います。
操作に慣れていない場合は、誤って他のディスクを破壊しないよう細心の注意を払ってください。

Microsoft DiskPart バージョン 10.0.22621.1
Copyright (C) Microsoft Corporation.
DISKPART> LIST DISK
  ディスク      状態           サイズ   空き   ダイナ GPT
  ###                                          ミック
  ------------  -------------  -------  -------  ---  ---
  ディスク 0    オンライン           237 GB      0 B        *
  ディスク 1    オンライン           931 GB      0 B        *
  ディスク 2    オンライン            14 GB    14 GB
DISKPART> SELECT DISK 2
ディスク 2 が選択されました。
DISKPART> LIST PARTITION
  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    システム               352 MB  1392 MB
DISKPART> CLEAN
DiskPart はディスクを正常にクリーンな状態にしました。
DISKPART> LIST PARTITION
このディスクには表示するパーティションがありません。
DISKPART> CREATE PARTITION PRIMARY
DiskPart は指定したパーティションの作成に成功しました。
DISKPART> LIST PARTITION
  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
* Partition 1    プライマリ               14 GB  1024 KB
DISKPART> SELECT PARTITION 1
パーティション 1 が選択されました。
DISKPART> ACTIVE
DiskPart は現在のパーティションをアクティブとしてマークしました。
DISKPART> FORMAT FS=FAT32 QUICK
  100% 完了しました
DiskPart は、ボリュームのフォーマットを完了しました。
DISKPART> ASSIGN
DiskPart はドライブ文字またはマウント ポイントを正常に割り当てました。
DISKPART> LIST VOLUME
  Volume ###  Ltr Label        Fs    Type        Size     Status     Info
  ----------  --- -----------  ----  ----------  -------  ---------  --------
  Volume 0     C   Local Disk   NTFS   Partition     92 GB  正常         ブート
  Volume 1         SYSTEM       FAT32  Partition    260 MB  正常         システム
  Volume 2         Windows RE   NTFS   Partition   1152 MB  正常         非表示
  Volume 3     D   extreme-ntf  NTFS   Partition    256 GB  正常
* Volume 4     E                FAT32  リムーバブル        14 GB  正常
DISKPART> EXIT

USBデバイスの準備ができたら、「回復ドライブ」を開きます。「システム ファイルを回復ドライブにバックアップします。」のチェックは外してください。

image.png

USBデバイスを選択します。

選択したドライブ上のデータはすべて破壊されます。
誤ったドライブを選択していないか、よく確認してください。

image.png

「回復ドライブの準備ができました」と表示されれば成功です。

image.png

ダウンロードした回復イメージをエクスプローラーで開き、すべてのファイルを回復ドライブに移動します。

image.png

30分-1時間ほど待つとプロンプトが表示されるので、「ファイルを置き換える」を選択します。

image.png

完了したら、そのままシステムを再起動します。

Windowsをクリーンインストールする

ディスク上のパーティション及びデータはすべて失われます。
大事なデータが残っていないことを確認したうえで続行してください。

Surfaceの電源を切り、作成した回復ドライブ(USBデバイス)からブート1します。

他のOSが起動してしまう場合は、Windowsの起動オプション2からUSBデバイスをブートしてください。UEFI設定3のBoot configurationを編集しても構いません。

青い背景の回復画面が表示されたら、言語とキー配列を選択します。私は「日本語 (日本)」と「Microsoft IME」を選択しました。

「ドライブから回復する」を選択後「ドライブを完全にクリーンアップする」を選択することで、全パーティションが削除され、Windows 11がインストールされます。

  • システム ドライブのパーティションを変更している場合は、規定のパーティションが復元されます

「回復」を選択した時点で、ディスク上の全データが失われます。

「この PC を回復しています (1%)」と表示されたら、数十分ほど放置します。

Windows 11の初期画面が表示されたら成功です。
画面の指示に従ってセットアップを済ませていきます。

バックアップからの復元も行えますが、今回は使用しません。
「<ユーザー名> さん、では、始めましょう!」と表示されたら、「その他のオプション」を選択し、「新しい PC としてセットアップする」→「新しい PC としてセットアップする」を選択します。

デスクトップが表示されたら、ひとまずセットアップ完了です。お疲れ様でした。

Windowsをカスタマイズする

このままでは味気ないので、設定をいじったり、アプリケーションを追加したりしてカスタマイズを済ませます。

私が実際に変更した設定を抜粋します:

  • システム▶ディスプレイ▶ディスプレイの詳細設定: リフレッシュレートを120Hzへ変更
  • システム▶通知▶追加の設定: 余計な提案機能3つを無効化
  • システム▶開発者向け▶タスクの終了: オン
  • システム▶開発者向け▶エクスプローラー: 「ファイル拡張子を表示する」「非表示のファイルをシステム ファイルを表示する」「空のドライブを表示する」をオン
  • システム▶開発者向け▶sudo の有効化: オン
  • システム▶クリップボード▶クリップボードの履歴: オン
  • アクセシビリティ▶マウス ポインターとタッチ▶マウス ポインターのスタイル: 一番右の「カスタム」を選択し、「別の色を選択」、黒色に変更
  • アクセシビリティ▶キーボード▶固定キー機能▶固定キー機能用のキーボード ショートカット: オフ

Arch準備編

このセクションでは、Windows 11の調整や、Arch Linuxのインストールメディアの作成を行います。

Windowsの重要な設定を変更する

BitLockerを無効化する

まずはBitLockerの無効化を行っておきます。

BitLockerが有効なままLinux環境をインストールすると、そのLinux環境だけでなく既存のWindows環境もブートできなくなるおそれがあります。

エクスプローラーを開き、「Local Disk (C:)」を確認します。鍵のアイコンが表示されている場合は、右クリックメニューから、BitLockerの無効化を行います。

コントロールパネルの「BitLocker ドライブ暗号化」から確認することもできます。

image.png

暗号化解除が完了したら、UEFI設定3を開き、Security▶Secure Boot▶Change configurationをクリックし、Noneを選択します。適用したら、Exit▶Restart nowを選択します。起動時に赤いバナーが表示されるようになれば成功です。

高速スタートアップを無効化する

Linux側からWindowsのパーティションを操作したい場合は、高速スタートアップ機能も無効化しておきます。

高速スタートアップが有効な場合、Windowsはシャットダウン時に状態をディスクへ保存しハイバネート(休止)状態に入ります。この状態でLinuxからパーティションをマウントすると、読み取り専用になります。なお、再起動時に高速スタートアップは使用されません。

「電源プランの選択」を開き、「電源ボタンの動作の選択」から、「現在利用可能ではない設定を変更します」をクリックし、「高速スタートアップを有効にする (推奨)」をオフにして保存します。

image.png

Archのライブ環境を作成する

Arch Linuxは通常、公式ページからダウンロードしたイメージを使用してインストールしますが、Surface Pro 9向けのドライバが不足しているため、タイプカバーでの操作が一切行えません。そのため、必要なドライバを持つカーネルを含めたライブイメージを事前にビルドし、インストール作業に使用します。

タイプカバーの代わりに外部キーボードを接続すれば、正しくキー入力が行えます。有線キーボードと十分な変換アダプタをお持ちの場合は、公式のisoファイルをダウンロードし、#イメージをUSBにフラッシュするまでジャンプしてください。

Arch Linuxが動作する別の端末をお持ちの場合は、WSLの代わりにそちらでイメージをビルドするほうが簡単です。#archisoでプリセットを作成するまでジャンプしてください。

WSLをセットアップする

Windows上でArchを動かすため、Windows Subsystem for Linuxをセットアップします。

ターミナルを開き、PowerShellでwsl --installを実行します。Ubuntuが必要なければ、--no-distributionオプションを付加します。(1敗)

PowerShell 7
> wsl --install
要求された操作には管理者特権が必要です。
ダウンロード中: Linux 用 Windows サブシステム 2.3.26
インストール中: Linux 用 Windows サブシステム 2.3.26
Linux 用 Windows サブシステム 2.3.26 はインストールされました。
Windows オプション コンポーネントをインストールしています: VirtualMachinePlatform

展開イメージのサービスと管理ツール
バージョン: 10.0.26100.1150

イメージのバージョン: 10.0.26100.2033

機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。
要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。
インストール中: Ubuntu
Ubuntu がインストールされました。
要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。

ここで指示通り、再起動しておきます。

セットアップには、tarballを手動で書き換えてインポートするという方法もあるようですが、今回はより簡単なArchWSLを使って進めます。

READMEを読みつつセットアップを進めます。Releasesから最新のArch.zipをダウンロードし、適当な場所(私はC:\wsl\にしました)へ展開したら、Arch.exeを実行します。

C:\wsl\Arch.exe
Using: C:\wsl\rootfs.tar.gz
Installing...
Installation complete
Press enter to continue...

Windows Terminalから起動して、最低限のセットアップを済ませます。

image.png

WSL: Arch
# passwd
New password:
Retype new password:
passwd: password updated successfully
# echo "%wheel ALL=(ALL) ALL" > /etc/sudoers.d/wheel
# useradd -m -G wheel -s /bin/bash ユーザー名
# passwd ユーザー名
New password:
Retype new password:
passwd: password updated successfully
# exit
PowerShell 7
> /wsl/Arch.exe config --default-user ユーザー名

pacmanも必要なので設定しておきます。

WSL: Arch
# vim /etc/pacman.d/mirrorlist # `Japan`セクションを中心に、ミラーを5個程度選びます
# pacman-key --init
gpg: /etc/pacman.d/gnupg/trustdb.gpg: trustdb created
...
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
# pacman-key --populate
==> Appending keys from archlinux.gpg...
...
gpg: next trustdb check due at 2025-07-01
# pacman -Sy archlinux-keyring
:: Synchronizing package databases...
...
Packages (1) archlinux-keyring-20250123-1

Total Download Size:   1.18 MiB
Total Installed Size:  1.68 MiB
Net Upgrade Size:      0.02 MiB

:: Proceed with installation? [Y/n]
:: Retrieving packages...
...
:: Running post-transaction hooks...
(1/2) Reloading system manager configuration...
(2/2) Arming ConditionNeedsUpdate...
# pacman -Su
:: Starting full system upgrade...
...
Total Download Size:   141.15 MiB
Total Installed Size:  588.30 MiB
Net Upgrade Size:       25.04 MiB

:: Proceed with installation? [Y/n]
:: Retrieving packages...
...
(12/13) Adding capabilities to ping to allow non-root user to ping...
(13/13) Reloading system bus configuration...

とりあえず使える状態になりました。
一度WSLをシャットダウンし、ついでにUbuntuを消し飛ばしておきましょう。

PowerShell 7
> wsl --shutdown
> wsl --unregister Ubuntu
登録解除。
この操作を正しく終了しました。

image.png

archisoでプリセットを作成する

archisoを用いて、カスタムイメージをビルドします。

archisoをインストールし、/usr/share/archiso/configs/releng/配下のデフォルトプリセットを操作しやすい場所へコピーしてきます。

WSL: Arch
$ sudo pacman -S --needed archiso
...
$ cp -r /usr/share/archiso/configs/releng/. archlive

このプリセットをそのまま使用すればArch公式と同等のイメージが作成できますが、今回はここにlinux-surfaceカーネルとGPartedを追加します。以下の時短スクリプトを実行するか、その下の変更内容を参考に自力で書き換えてください。

時短スクリプトはこちら

実行すると、スクリプトのあるディレクトリのarchlive配下にカスタムプロファイルが作成されます。

surfaceiso.sh
#!/bin/bash

set -euo pipefail
cd "$(dirname "$0")"
echo "INFO: This script is running on: $(pwd)"

echo 'Syncing default profile to dir `archlive`...'
rm -rf archlive/
cp -r /usr/share/archiso/configs/releng/. archlive/

cd archlive/

echo 'Adding custom repositories...'
cat << EOF >> pacman.conf

[linux-surface]
Server = https://pkg.surfacelinux.com/arch/
EOF

echo 'Adding runtime packages...'
cat << EOF >> packages.x86_64

linux-surface
linux-surface-headers
gparted
xfce4
xorg-server
EOF

echo 'Replacing systemd-boot configuration...'
cat << EOF > efiboot/loader/loader.conf
timeout 15
default 02-archiso-x86_64-linux-surface.conf
EOF

echo 'Adding boot entry for linux-surface...'
rm efiboot/loader/entries/02-archiso-x86_64-speech-linux.conf
cat << EOF > efiboot/loader/entries/02-archiso-x86_64-linux-surface.conf
title    Install medium with linux-surface (x86_64, UEFI)
sort-key 02
linux    /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux-surface
initrd   /%INSTALL_DIR%/boot/x86_64/initramfs-linux-surface.img
options  archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID%
EOF

echo 'Adding mkinitcpio preset for linux-surface...'
cat << EOF > airootfs/etc/mkinitcpio.d/linux-surface.preset
PRESETS=('archiso')

ALL_kver='/boot/vmlinuz-linux-surface'
archiso_config='/etc/mkinitcpio.conf.d/archiso.conf'

archiso_image="/boot/initramfs-linux-surface.img"
EOF

echo 'Done!'

まずはpacman.conflinux-surfaceのリポジトリを追加します。

archlive/pacman.conf
...
  #[custom]
  #SigLevel = Optional TrustAll
  #Server = file:///home/custompkgs
+
+ [linux-surface]
+ Server = https://pkg.surfacelinux.com/arch/

続いて、packages.x86_64linux-surfacelinux-surface-headersを追記して、ライブ環境でlinux-surfaceカーネルを使用できるようにします。また、パーティショニングに使用するgpartedと適当なデスクトップもインストールしておきます。

archlive/packages.x86_64
  xfsprogs
  xl2tpd
  zsh
+
+ linux-surface
+ linux-surface-headers
+ gparted
+ xfce4
+ xorg-server

EFIローダーのコンフィグを上書きし、デフォルトエントリを変更します。

archlive/efiboot/loader/loader.conf
timeout 15
default 02-archiso-x86_64-linux-surface.conf

既存のスクリーンリーダー付きブートを行うエントリを削除し、linux-surfaceカーネルのブートエントリに置き換えます。

$ rm archlive/efiboot/loader/entries/02-archiso-x86_64-speech-linux.conf
archlive/efiboot/loader/entries/02-archiso-x86_64-linux-surface.conf
title    Install medium with linux-surface (x86_64, UEFI)
sort-key 02
linux    /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux-surface
initrd   /%INSTALL_DIR%/boot/x86_64/initramfs-linux-surface.img
options  archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID%

最後に、mkinitcpiolinux-surfaceプリセットを作成します。

archlive/airootfs/etc/mkinitcpio.d/linux-surface.preset
PRESETS=('archiso')

ALL_kver='/boot/vmlinuz-linux-surface'
archiso_config='/etc/mkinitcpio.conf.d/archiso.conf'

archiso_image="/boot/initramfs-linux-surface.img"

archisoでISOファイルをビルドする

プリセットのカスタマイズが完了したら、isoファイルに書き出します。

事前にlinux-surfaceリポジトリのキーをインポートしておきます。

WSL: Arch
$ curl -s https://raw.githubusercontent.com/linux-surface/linux-surface/master/pkg/keys/surface.asc | sudo pacman-key --add -
==> Updating trust database...
gpg: next trustdb check due at 2025-06-16
$ sudo pacman-key --lsign-key 56C464BAAC421453
  -> Locally signed 1 key.
==> Updating trust database...
gpg: Note: third-party key signatures using the SHA1 algorithm are rejected
gpg: (use option "--allow-weak-key-signatures" to override)
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   6  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1  valid:   6  signed: 101  trust: 1-, 0q, 0n, 5m, 0f, 0u
gpg: depth: 2  valid:  78  signed:  21  trust: 78-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2025-06-16

準備ができたら、mkarchisoで書き出します。./archliveは作成したプリセットのディレクトリに置き換えてください。

WSL: Arch
$ sudo mkarchiso -v ./archlive
[mkarchiso] INFO: Validating options...
...
[mkarchiso] INFO: Done!
1.8G    /home/meatwo310/out/archlinux-2025.02.02-x86_64.iso

ファンが唸りだしたら、数分ほど待つと完成です。成果物は使い回せるよう外部ストレージにも保管しておくのがおすすめです。

イメージをUSBにフラッシュする

balenaEtcherを用いて、用意したイメージをフラッシュします。おそらくWSLからフラッシュすることもできますが、事故が怖いのでGUIツールに頼ります。

PowerShell 7
> winget install -e --id Balena.Etcher
見つかりました balenaEtcher [Balena.Etcher] バージョン 1.19.25
...
インストールが完了しました

image.png
image.png
image.png

これにてインストールメディアの作成は完了です。

空き容量が少ない場合は、不要なファイルを削除(sudo rm -rf .cache/ archlive/ work/ out/)して、Arch Linuxのインストールに備えてください。

お疲れ様でした。

Archインストール編

このセクションでは、用意したインストールメディアを用いて、Windows 11がインストールされたSurface Pro 9上にArch Linuxのデュアルブート環境を構築します。

ライブ環境からインストールする

Windowsをシャットダウンし、Arch Linuxのインストールメディアが書き込まれたUSBからブート1します。

通常は大音量のビープが鳴りますが、Surface Pro 9にはそもそも搭載されていないため無音で起動します。

エントリの選択画面が表示されるので、「Install medium with linux-surface (x86_64, UEFI)」を選択しEnterを押します。

root@archiso ~ #と表示されたら成功です。私の場合途中で怪しいログが流れましたが見なかったことにします

image.png

起動中のカーネルを確認しておきます。

tty
# uname -r
6.12.7-arch1-1-surface

ここからはArchWikiのインストールガイドに従って進めていきます。

最低限の変更を加える

キーボードレイアウトを日本語配列に設定します。

tty
# loadkeys jp106

無線LANを使用している場合は、iwctlを用いて適当なアクセスポイントに接続します。

tty
# iwctl
NetworkConfigurationEnabled: disabled
StateDirectory: /var/lib/iwd
Version: 3.3
[iwd]# device list
                                    Devices                                   *
--------------------------------------------------------------------------------
  Name                  Address               Powered     Adapter     Mode      
--------------------------------------------------------------------------------
  wlan0                 **:**:**:**:**:**     on          phy0        station     

[iwd]# station wlan0 scan
[iwd]# station wlan0 get-networks
                               Available networks                             *
--------------------------------------------------------------------------------
      Network name                      Security            Signal
--------------------------------------------------------------------------------
      ***                               psk                 ****
      ...

[iwd]# station wlan0 connect ネットワーク名
Type the network passphrase for ** psk.
[iwd]# exit

通信できるか確認しておきます。

tty
# ping -c 3 scanme.nmap.org
PING scanme.nmap.org (**.**.**.**) 56(84) bytes of data.
64 bytes from scanme.nmap.org (**.**.**.**): icmp_seq=1 ttl=47 time=155 ms
64 bytes from scanme.nmap.org (**.**.**.**): icmp_seq=2 ttl=47 time=122 ms
64 bytes from scanme.nmap.org (**.**.**.**): icmp_seq=3 ttl=47 time=120 ms
...

ネットワークに接続後、SSH越しに設定を続けることも可能です。

手順
tty
# passwd
New password:
Retype new password:
passwd: password updated successfully
# echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
# tail -n 1 /etc/ssh/sshd_config
PermitRootLogin yes
# ip a show dev wlan0 | grep 'inet '
    inet 192.168.**.**/24 ...
別端末
$ ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@192.168.**.**
Warning: Permanently added '192.168.**.**' (ED25519) to the list of known hosts.
root@192.168.**.**'s password: 
...
root@archiso ~ # 

タイムゾーンを修正します。

# timedatectl status
               Local time: Sun 2025-02-02 13:22:08 UTC
           Universal time: Sun 2025-02-02 13:22:08 UTC
                 RTC time: Sun 2025-02-02 13:22:08
                Time zone: UTC (UTC, +0000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
# timedatectl set-timezone Asia/Tokyo
# timedatectl status                 
               Local time: Sun 2025-02-02 22:22:51 JST
           Universal time: Sun 2025-02-02 13:22:51 UTC
                 RTC time: Sun 2025-02-02 13:22:51
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

パーティションを切る

どのシステムにどれだけの容量を与えるか決める、パーティショニングを行います。

操作を誤るとWindowsやその他システムを破壊するおそれがあります。書き込む前に、間違いがないことをよく確認してください。

CLI上でNTFSパーティション/ファイルシステムをリサイズするのは面倒なので、事前にインストールしておいたGPartedを使用します。

インストールメディア作成時にGPartedを含めていなかった場合でも、ライブ環境から直接インストールできます。
標準のrootfsは256MBと小さいので、パッケージのインストール前に拡張する必要がある点に注意してください。

手順
# mount -o remount,size=2G /run/archiso/cowspace
# pacman -Syu xorg-server xfce4 gparted
...
:: There are 15 members in group xfce4:
:: Repository extra
   1) exo  2) garcon  3) thunar  4) thunar-volman  5) tumbler  6) xfce4-appfinder
   7) xfce4-panel  8) xfce4-power-manager  9) xfce4-session  10) xfce4-settings
   11) xfce4-terminal  12) xfconf  13) xfdesktop  14) xfwm4  15) xfwm4-themes

Enter a selection (default=all): 
...
:: Proceed with installation? [Y/n] 
...

まずはXfce4を起動します。

tty
# startxfce4

「Applications」から「System」を選択し、「GParted」を開きます。

launch-gparted.png

一番大きなパーティションはWindowsのデータが保管されているNTFSパーティションです。右クリックして、「Resize/Move」を選択します。

resize-move.png

最低限必要となるのは、1-4GiB程度のEFI用パーティション(fat32)と、任意の大きさのルートディレクトリ用パーティション(ext4)です。

EFIパーティションはシステムの起動に必要ですが、Windowsの作成したものは260Mと小さく、Linuxカーネルを保存できるだけの空きがありません。今回は既存のEFIパーティションを無理にリサイズせず、新しいLinux用のEFIパーティションを作成することにします。

私はEFIパーティションに2GiB、ルートディレクトリ用パーティションに144GiB、さらにSwapパーティションとして8GiBを割り当てたいので、Windowsから154GiB=157,696MiBを取り上げました。

resize-win.png

サイズとファイルシステムに注意しながら、パーティションを作成していきます。

create-efi.png
create-swap.png
create-root.png

準備ができたらよく確認して、「Apply All Operations」をクリックします。

apply-all.png

「Apply」をクリックした段階で、ディスクへ変更が加えられます。

are-you-sure.png

成功したら、そのまま「Close」をクリックします。

success.png

続いて、EFI用に確保したfat32パーティションを右クリックし、「Manage Flags」を選択します。

manage-flags.png

「esp」フラッグを有効化すると、同時に「boot」フラッグも有効化されるので、そのまま「Close」をクリックします。

esp-flag.png

作業が終わったらXfceからログアウトします。

logout.png
logout-root.png

パーティションが作成できていることを確認します。

# fdisk -l /dev/nvme0n1 
Disk /dev/nvme0n1: 237.54 GiB, 255060320256 bytes, 498164688 sectors
Disk model: HFM256GD3GX013N-SKhynix                 
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 00FF8B20-5001-4B9B-8D53-C1E5F4A335B4

Device             Start       End   Sectors  Size Type
/dev/nvme0n1p1      2048    534527    532480  260M EFI System
/dev/nvme0n1p2    534528    567295     32768   16M Microsoft reserved
/dev/nvme0n1p3    567296 173135871 172568576 82.3G Microsoft basic data
/dev/nvme0n1p4 496097280 498163711   2066432 1009M Windows recovery environment
/dev/nvme0n1p5 491902976 496097279   4194304    2G EFI System
/dev/nvme0n1p6 475125760 491902975  16777216    8G Linux swap
/dev/nvme0n1p7 173135872 475125759 301989888  144G Linux filesystem

Partition table entries are not in disk order.

作成したパーティションをマウントしておきます。
デバイス名は各環境に応じて読み替えてください。

# mount /dev/nvme0n1p7 /mnt
# mount --mkdir /dev/nvme0n1p5 /mnt/boot
# swapon /dev/nvme0n1p6 # スワップパーティションを作成した場合

Arch Linuxをインストールする

いよいよArch Linuxのインストールに取り掛かります。

/etc/pacman.d/mirrorlistを開き、ミラーが問題ないか確認しておきます。
(最新のミラー20件の中からダウンロード速度順にソートされています)

pacstrapを使用して、必須のパッケージをインストールします。

# pacstrap -K /mnt base linux linux-firmware
==> Creating install root at /mnt
...
(13/13) Reloading system bus configuration...
  Skipped: Running in chroot.
pacstrap -K /mnt base linux linux-firmware  30.39s user 14.66s system 24% cpu 3:00.49 total

fstabを生成します。

# genfstab -U /mnt >> /mnt/etc/fstab

ここからはchroot環境に入って作業を行います。

# arch-chroot /mnt

タイムゾーンを設定します。

# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# hwclock --systohc --localtime

ロケールを生成します。英語と日本語どちらも生成しますが、日本語文字はtty上で描画できないため、LANG環境変数には英語を設定します。

# sed -i '/^#en_US.UTF-8 UTF-8/s/^#//; /^#ja_JP.UTF-8 UTF-8/s/^#//' /etc/locale.gen
# locale-gen
Generating locales...
  en_US.UTF-8... done
  ja_JP.UTF-8... done
Generation complete.
# echo 'LANG=en_US.UTF-8' > /etc/locale.conf

tty上で使用されるキーマップを設定します。

# echo 'KEYMAP=jp106' > /etc/vconsole.conf

任意のホスト名を設定します。

# echo 'sp9-v5-arch' > /etc/hostname

rootパスワードを設定します。このパスワードを忘れると、システムにログインできなくなります。強力なパスワードを正確にタイプしてください。パスワードに記号を含める場合は、キー配列が正しいことを確認してから入力してください。

# passwd
New password: 
Retype new password: 
passwd: password updated successfully

pacmanの設定を変更して、出力に色を付けたり進捗バーをパックマン化したりします。

# sed -i '/^#Color/s/^#//; /^#ParallelDownloads = 5/s/^#//; /^Color/a ILoveCandy' /etc/pacman.conf

必要なパッケージを追加でインストールします。

# pacman -S pacman -S intel-ucode vim openssh wget networkmanager
...

linux-surfaceをインストールします。

# curl -s https://raw.githubusercontent.com/linux-surface/linux-surface/master/pkg/keys/surface.asc | pacman-key --add -
==> Updating trust database...
gpg: next trustdb check due at 2025-06-16
# pacman-key --lsign-key 56C464BAAC421453
  -> Locally signed 1 key.
==> Updating trust database...
gpg: Note: third-party key signatures using the SHA1 algorithm are rejected
gpg: (use option "--allow-weak-key-signatures" to override)
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   6  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1  valid:   6  signed: 101  trust: 1-, 0q, 0n, 5m, 0f, 0u
gpg: depth: 2  valid:  78  signed:  21  trust: 78-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2025-06-16
# cat << EOF >> /etc/pacman.conf
[linux-surface]
Server = https://pkg.surfacelinux.com/arch/
EOF
# pacman -Syu linux-surface linux-surface-headers iptsd
...

ブートローダーをインストールします。今回は一番手っ取り早いGRUBを使用します。

# pacman -S grub efibootmgr
...
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
Installing for x86_64-efi platform.
Installation finished. No error reported.
# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file...
Found linux image: /boot/vmlinuz-linux-surface
Found initrd image: /boot/intel-ucode.img /boot/initramfs-linux-surface.img
Found fallback initrd image(s) in /boot:  intel-ucode.img initramfs-linux-surface-fallback.img
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/intel-ucode.img /boot/initramfs-linux.img
Found fallback initrd image(s) in /boot:  intel-ucode.img initramfs-linux-fallback.img
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done

chroot環境から抜けます。

# exit

最後の確認を行う

なにか一つでも見落とした場合、システムが起動しないか、起動しても何もできなくなります。
インストールに失敗した場合は、再度USBデバイスからライブ環境をブートして、パーティションをマウントし、chroot環境に入って必要な作業を行ってください。

  • パーティション作成時、EFIパーティションにespフラグはセットしましたか?
  • rootパスワードは設定しましたか?
  • VimやNetworkManager、linux-surfaceはインストールしましたか?
  • GRUBはインストールしましたか? grub-mkconfigで設定ファイルは作成しましたか?

問題なければ、無事を祈りながらrebootとタイプしてシステムを再起動してください。

Arch Linuxを起動する

うまくいけば、小さな文字でGRUBのメニューが表示されるはずです。
Windowsが起動してしまう場合は、あるいはWindowsを起動したい場合は、UEFI設定3から「Boot configuration」を編集してください。

linux-surfaceカーネルが起動し、rootとしてログインできれば成功です。おめでとうございます :tada:

ネットワークを設定する

インストールしたNetworkManagerを使用して、再度ネットワークに接続します。

# systemctl enable --now NetworkManager
# nmtui
(Activate a connectionを選択)
(お好みのアクセスポイントを選択)
(パスワードを入力)
(Escキーで戻る・終了)
# ping -c 3 scanme.nmap.org
...

一般ユーザーを作成する

まずはsudoを設定します。

# pacman -S sudo
...
# EDITOR=vim visudo
visudo
...
  ## Uncomment to allow members of group wheel to execute any command
- # %wheel ALL=(ALL:ALL) ALL
+ %wheel ALL=(ALL:ALL) ALL
...

useraddを用いて、wheelグループを持つ一般ユーザーを作成します。

# useradd -m -G wheel meatwo310 # 好きなユーザー名に置き換えてください
# passwd meatwo310
New password:
Retype new password:
passwd: password updated successfully

Alt+Left/RightCtrl+Alt+F1..F6でttyを切り替え、作成したユーザーとしてログインします。

tty
sp9-v5-arch login: meatwo310
Password:
[meatwo310@sp9-v5-arch ~]$

AURヘルパーをインストールする

Arch User Repositoryのパッケージを簡単に扱うため、AURヘルパーをインストールします。今回はyayを使用しますが、paruなどほかのヘルパーをインストールすることもできます。

$ sudo pacman -S --needed git base-devel && git clone https://aur.archlinux.org/yay.git && cd yay && makepkg -si

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

For security reasons, the password you type will not be visible.

[sudo] password for meatwo310:
...
(1/2) installing yay
...
$ cd ..
$ rm -rf ./yay/

システムをアップグレードするには、yayとタイプするだけです。

$ yay

試しにAURからlibwacom-surfaceをインストールしてみます。

$ yay -S libwacom-surface
Sync Make Dependency (1): meson-1.7.0-1
...
AUR Explicit (1): libwacom-surface-2.13.0-1
:: (1/1) Downloaded PKGBUILD: libwacom-surface
  1 libwacom-surface                 (Build Files Exist)
==> Packages to cleanBuild?
==> [N]one [A]ll [Ab]ort [I]nstalled [No]tInstalled or (1 2 3, 1-3, ^4)
==> 
...

自動で依存パッケージのインストールとパッケージのビルドが行われたら成功です。

必要最低限のセットアップはこれにて完了です。お疲れ様でした。

デスクトップ環境を構築する

このままでは使い物にならないので、グラフィカルなアプリケーションを使うためのデスクトップ環境を用意します。

なんでもいいのですが、今回は私が好きなKDE Plasmaをセットアップします。

$ yay -S plasma ark dolphin dolphin-plugins filelight gwenview haruna kate kcalc kcron konsole okular partitionmanager spectacle yakuake power-profiles-daemon
...
:: There are 60 members in group plasma:
:: Repository extra
   1) bluedevil  2) breeze  3) breeze-gtk  4) breeze-plymouth  5) discover  6) drkonqi
   7) flatpak-kcm  8) kactivitymanagerd  9) kde-cli-tools  10) kde-gtk-config
   11) kdecoration  12) kdeplasma-addons  13) kgamma  14) kglobalacceld  15) kinfocenter
   16) kmenuedit  17) kpipewire  18) krdp  19) kscreen  20) kscreenlocker  21) ksshaskpass
   22) ksystemstats  23) kwallet-pam  24) kwayland  25) kwin  26) kwrited
   27) layer-shell-qt  28) libkscreen  29) libksysguard  30) libplasma  31) milou
   32) ocean-sound-theme  33) oxygen  34) oxygen-sounds  35) plasma-activities
   36) plasma-activities-stats  37) plasma-browser-integration  38) plasma-desktop
   39) plasma-disks  40) plasma-firewall  41) plasma-integration  42) plasma-nm
   43) plasma-pa  44) plasma-sdk  45) plasma-systemmonitor  46) plasma-thunderbolt
   47) plasma-vault  48) plasma-welcome  49) plasma-workspace
   50) plasma-workspace-wallpapers  51) plasma5support  52) plymouth-kcm
   53) polkit-kde-agent  54) powerdevil  55) print-manager  56) qqc2-breeze-style
   57) sddm-kcm  58) systemsettings  59) wacomtablet  60) xdg-desktop-portal-kde

Enter a selection (default=all): ^5 ^32-34 ^57
resolving dependencies...
...
:: There are 2 providers available for jack:
:: Repository extra
   1) jack2  2) pipewire-jack

Enter a number (default=1): 2
...
Total Download Size:    782.95 MiB
Total Installed Size:  2486.76 MiB

:: Proceed with installation? [Y/n] 
...

ディスプレイマネージャーには、KDE環境で一般的なSDDMの代わりに、tty上で動作するlyを使用します。

$ yay -S ly
...
$ sudo systemctl enable ly

KDE Walletを自動でアンロックするよう、PAMの設定を変更しておきます。

$ sudo tee -a /etc/pam.d/login << EOF > /dev/null
auth       optional     pam_kwallet5.so
session    optional     pam_kwallet5.so auto_start force_run
EOF
[sudo] meatwo310 のパスワード:

リブートすると、ログイン画面が表示されます。

tty
F1 shutdown F2 reboot

 ┌───────────────────────────────────────────────┐
 │                                               │
 │                  sp9-v5-arch                  │
 │                                               │
 │  x11      < Plasma (X11)                   >  │
 │                                               │
 │  login    _                                   │
 │                                               │
 │  password                                     │
 │                                               │
 └───────────────────────────────────────────────┘

Plasma (Wayland)を選択し、ユーザー名とパスワードを入力してログインします。

tty上から直接Plasmaを起動するには、startplasma-waylandを実行します。

Screenshot_20250203_210824.png

キーボードレイアウトを正しく設定し直します。
「System Settings」から「Keyboard」を開き、「Layouts」の「Enable」を有効化して、「Japanese」を追加し適用します。

表示の日本語化も行います。konsoleを開き、日本語を表示するための適当なフォントをインストールします。

Konsole
$ yay -S noto-fonts-cjk
...

「System Settings」の「Region & Language」から、Languageを日本語に設定します。

locale.confを書き換えたらリブートします。

$ sudo vim /etc/locale.conf
- LANG=en_US.UTF-8
+ LANG=ja_JP.UTF-8

Plasma上の表示が日本語に変わっていれば成功です。

アプリケーションをインストールする

パッケージを好きなだけインストールします。

$ sudo vim /etc/pacman.conf
/etc/pacman.conf
- #[multilib]
- #Include = /etc/pacman.d/mirrorlist
+ [multilib]
+ Include = /etc/pacman.d/mirrorlist
$ yay
$ yay -S discord gparted jetbrains-toolbox prismlauncher steam teams-for-linux visual-studio-code-bin waydroid zen-browser-bin
...
:: 7 個の選択肢が vulkan-driver にはあります:
:: リポジトリ extra
   1) amdvlk  2) nvidia-utils  3) vulkan-intel  4) vulkan-nouveau  5) vulkan-radeon
   6) vulkan-swrast  7) vulkan-virtio

数字を入力してください (デフォルト=1): 3
:: 7 個の選択肢が lib32-vulkan-driver にはあります:
:: リポジトリ multilib
   1) lib32-amdvlk  2) lib32-nvidia-utils  3) lib32-vulkan-intel  4) lib32-vulkan-nouveau
   5) lib32-vulkan-radeon  6) lib32-vulkan-swrast  7) lib32-vulkan-virtio

数字を入力してください (デフォルト=1): 3
...

よろしければこちらもどうぞ:

おわりに

Surface Pro 9のデータをすべて消し飛ばし、Windows 11とArch Linuxをインストールしました。Surface特有のトラップがいくつかありますが、十分に回避可能ですので、興味のある方はぜひお試しあれ。

誤りやご指摘があれば、ぜひコメントでお知らせください。

  1. USBデバイスから直接ブートするには、音量を下げるボタン(電源ボタンから遠い方です)を押しながらSurfaceの電源を入れます。 2

  2. Windowsの起動オプションを開くには、Shiftを押しながら「再起動」をクリックします。このオプションを使って、他のデバイスからブートしたり、UEFIファームウェアの設定を開いたりできます。 2

  3. UEFI設定を開くには、Windowsの起動オプション2を使用するか、音量を上げるボタン(電源ボタンに近い方です)を押しながら電源を入れます。 2 3

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?