はじめに
この記事では、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本体の背面に書かれているシリアル番号を入力します。
「続ける」を押すと、イメージの選択が行えるようになるので、最新のWindows 11を選んで「画像をダウンロード」します。
イメージは約10GBあり、ダウンロードには2時間ほど要します。空き容量に注意しつつ、ローカルディスクや適当な外部ストレージに保存してください。ただし、イメージの書き込み先となるUSBデバイスへファイルを直接保存してはいけません。
また、このイメージはアカウント・デバイスごとに異なりますので、他人のものを使用したり、譲渡したりすることは避けてください。
Windowsの回復ドライブを作成する
イメージのダウンロードを待つ間に、回復ドライブを用意しておきましょう。
以下の記事に従います。
「ディスクとボリュームの管理」を開き、USBデバイスを確認します。
新品の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デバイスの準備ができたら、「回復ドライブ」を開きます。「システム ファイルを回復ドライブにバックアップします。」のチェックは外してください。
USBデバイスを選択します。
選択したドライブ上のデータはすべて破壊されます。
誤ったドライブを選択していないか、よく確認してください。
「回復ドライブの準備ができました」と表示されれば成功です。
ダウンロードした回復イメージをエクスプローラーで開き、すべてのファイルを回復ドライブに移動します。
30分-1時間ほど待つとプロンプトが表示されるので、「ファイルを置き換える」を選択します。
完了したら、そのままシステムを再起動します。
Windowsをクリーンインストールする
ディスク上のパーティション及びデータはすべて失われます。
大事なデータが残っていないことを確認したうえで続行してください。
Surfaceの電源を切り、作成した回復ドライブ(USBデバイス)からブート1します。
青い背景の回復画面が表示されたら、言語とキー配列を選択します。私は「日本語 (日本)」と「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 ドライブ暗号化」から確認することもできます。
暗号化解除が完了したら、UEFI設定3を開き、Security▶Secure Boot▶Change configurationをクリックし、Noneを選択します。適用したら、Exit▶Restart nowを選択します。起動時に赤いバナーが表示されるようになれば成功です。
高速スタートアップを無効化する
Linux側からWindowsのパーティションを操作したい場合は、高速スタートアップ機能も無効化しておきます。
高速スタートアップが有効な場合、Windowsはシャットダウン時に状態をディスクへ保存しハイバネート(休止)状態に入ります。この状態でLinuxからパーティションをマウントすると、読み取り専用になります。なお、再起動時に高速スタートアップは使用されません。
「電源プランの選択」を開き、「電源ボタンの動作の選択」から、「現在利用可能ではない設定を変更します」をクリックし、「高速スタートアップを有効にする (推奨)」をオフにして保存します。
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敗)
> 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
を実行します。
Using: C:\wsl\rootfs.tar.gz
Installing...
Installation complete
Press enter to continue...
Windows Terminalから起動して、最低限のセットアップを済ませます。
# 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
> /wsl/Arch.exe config --default-user ユーザー名
pacmanも必要なので設定しておきます。
# 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を消し飛ばしておきましょう。
> wsl --shutdown
> wsl --unregister Ubuntu
登録解除。
この操作を正しく終了しました。
archisoでプリセットを作成する
archisoを用いて、カスタムイメージをビルドします。
archiso
をインストールし、/usr/share/archiso/configs/releng/
配下のデフォルトプリセットを操作しやすい場所へコピーしてきます。
$ sudo pacman -S --needed archiso
...
$ cp -r /usr/share/archiso/configs/releng/. archlive
このプリセットをそのまま使用すればArch公式と同等のイメージが作成できますが、今回はここにlinux-surfaceカーネルとGPartedを追加します。以下の時短スクリプトを実行するか、その下の変更内容を参考に自力で書き換えてください。
時短スクリプトはこちら
実行すると、スクリプトのあるディレクトリのarchlive
配下にカスタムプロファイルが作成されます。
#!/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.conf
にlinux-surface
のリポジトリを追加します。
...
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs
+
+ [linux-surface]
+ Server = https://pkg.surfacelinux.com/arch/
続いて、packages.x86_64
にlinux-surface
とlinux-surface-headers
を追記して、ライブ環境でlinux-surface
カーネルを使用できるようにします。また、パーティショニングに使用するgparted
と適当なデスクトップもインストールしておきます。
xfsprogs
xl2tpd
zsh
+
+ linux-surface
+ linux-surface-headers
+ gparted
+ xfce4
+ xorg-server
EFIローダーのコンフィグを上書きし、デフォルトエントリを変更します。
timeout 15
default 02-archiso-x86_64-linux-surface.conf
既存のスクリーンリーダー付きブートを行うエントリを削除し、linux-surface
カーネルのブートエントリに置き換えます。
$ rm archlive/efiboot/loader/entries/02-archiso-x86_64-speech-linux.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%
最後に、mkinitcpio
のlinux-surface
プリセットを作成します。
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
リポジトリのキーをインポートしておきます。
$ 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
は作成したプリセットのディレクトリに置き換えてください。
$ 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ツールに頼ります。
> winget install -e --id Balena.Etcher
見つかりました balenaEtcher [Balena.Etcher] バージョン 1.19.25
...
インストールが完了しました
これにてインストールメディアの作成は完了です。
空き容量が少ない場合は、不要なファイルを削除(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 ~ #
と表示されたら成功です。私の場合途中で怪しいログが流れましたが見なかったことにします
起動中のカーネルを確認しておきます。
# uname -r
6.12.7-arch1-1-surface
ここからはArchWikiのインストールガイドに従って進めていきます。
最低限の変更を加える
キーボードレイアウトを日本語配列に設定します。
# loadkeys jp106
無線LANを使用している場合は、iwctlを用いて適当なアクセスポイントに接続します。
# 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
通信できるか確認しておきます。
# 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越しに設定を続けることも可能です。
手順
# 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を起動します。
# startxfce4
「Applications」から「System」を選択し、「GParted」を開きます。
一番大きなパーティションはWindowsのデータが保管されているNTFSパーティションです。右クリックして、「Resize/Move」を選択します。
最低限必要となるのは、1-4GiB程度のEFI用パーティション(fat32)と、任意の大きさのルートディレクトリ用パーティション(ext4)です。
EFIパーティションはシステムの起動に必要ですが、Windowsの作成したものは260Mと小さく、Linuxカーネルを保存できるだけの空きがありません。今回は既存のEFIパーティションを無理にリサイズせず、新しいLinux用のEFIパーティションを作成することにします。
私はEFIパーティションに2GiB、ルートディレクトリ用パーティションに144GiB、さらにSwapパーティションとして8GiBを割り当てたいので、Windowsから154GiB=157,696MiBを取り上げました。
サイズとファイルシステムに注意しながら、パーティションを作成していきます。
準備ができたらよく確認して、「Apply All Operations」をクリックします。
「Apply」をクリックした段階で、ディスクへ変更が加えられます。
成功したら、そのまま「Close」をクリックします。
続いて、EFI用に確保したfat32パーティションを右クリックし、「Manage Flags」を選択します。
「esp」フラッグを有効化すると、同時に「boot」フラッグも有効化されるので、そのまま「Close」をクリックします。
作業が終わったらXfceからログアウトします。
パーティションが作成できていることを確認します。
# 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としてログインできれば成功です。おめでとうございます
ネットワークを設定する
インストールしたNetworkManagerを使用して、再度ネットワークに接続します。
# systemctl enable --now NetworkManager
# nmtui
(Activate a connectionを選択)
(お好みのアクセスポイントを選択)
(パスワードを入力)
(Escキーで戻る・終了)
# ping -c 3 scanme.nmap.org
...
一般ユーザーを作成する
まずはsudoを設定します。
# pacman -S sudo
...
# EDITOR=vim 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
/Right
やCtrl
+Alt
+F1
..F6
で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 のパスワード:
リブートすると、ログイン画面が表示されます。
F1 shutdown F2 reboot
┌───────────────────────────────────────────────┐
│ │
│ sp9-v5-arch │
│ │
│ x11 < Plasma (X11) > │
│ │
│ login _ │
│ │
│ password │
│ │
└───────────────────────────────────────────────┘
Plasma (Wayland)
を選択し、ユーザー名とパスワードを入力してログインします。
tty上から直接Plasmaを起動するには、startplasma-wayland
を実行します。
キーボードレイアウトを正しく設定し直します。
「System Settings」から「Keyboard」を開き、「Layouts」の「Enable」を有効化して、「Japanese」を追加し適用します。
表示の日本語化も行います。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
- #[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特有のトラップがいくつかありますが、十分に回避可能ですので、興味のある方はぜひお試しあれ。
誤りやご指摘があれば、ぜひコメントでお知らせください。