Arch Linux から Windows に優雅に戻る方法#
前情提要:Arch Linux への優雅な移行方法。
データバックアップ#
そのままコピーしました。
微 PE と DiskGenius ツールを使用してデータバックアップとパーティションクローンを行います。
PE 環境ではオンライン授業や問題集を解くことができない場合があるため、まず DiskGenius のパーティションイメージ機能を使用してパーティションイメージを外付けハードディスクに保存し、その後 Windows システムに戻って DeskGenius を使用してパーティションイメージを外付けハードディスクに復元します(これは、パーティションイメージが 4K / 順次読み取り順次書き込み操作であり、パーティション復元が順次読み取り 4K / 順次書き込み操作であるため、SSD の小ファイルの読み書き速度が機械式ハードディスクよりも著しく速いためです)。
- wepe 環境を作成する
- wepe 環境に入り、DiskGenius を使用してディスクイメージ操作を行う
- Windows をインストールした後、ハードディスクを復元する
システムのインストール#
自分でインストールします。
OI 環境の設定#
CP Editor#
CP Editor 公式サイト にアクセスし、インストーラーをダウンロードします。プラットフォームは Windows を選択し、バージョンは v6.10.1(2022 年 8 月 18 日現在) を選択し、対応アーキテクチャ-setup.exe
を選択します。コンパイラを手動でインストールするためです。
MSYS2#
Clang-Format と Clangd を使用するために、MSYS2 を使用してそれらをインストールする必要があります。アーキテクチャ-setup-with-gcc-xxxx-llvm-xxxx.exe
を選択すれば良さそうですが、私はテストしていません。
- MSYS2 ウェブサイト にアクセスし、下部の Installation の最初のステップ Download the installer を見つけ、後ろのボタンをクリックしてインストーラーをダウンロードします。
- MSYS2 をインストールします。
- MSYS2 Shell に入り、
pacman -S msys2-keychain
を入力してキー チェーンをインストールします。 pacman -Syu
を入力してパッケージを更新します。pacman -S mingw-w64-x86_64-toolchain mingw64/mingw-w64-x86_64-make mingw64/mingw-w64-x86_64-gdb mingw64/mingw-w64-x86_64-clang mingw64/mingw-w64-x86_64-clang-tools-extra
を入力してコンパイラをインストールします。- 環境変数を設定します。
MINGW_HOME
を MSYS2 パス(デフォルトはC:\msys2
)のmingw64
(64 ビットコンピュータの場合)またはmingw32
(32 ビットコンピュータの場合)に設定します。例えば、64 ビットの場合はC:\msys2\mingw64
に設定します。C_INCLUDE_PATH
を%MINGW_HOME%\include
に設定します。LIBRARY_PATH
を%MINGW_HOME%\lib
に設定します。%MINGW_HOME%\bin
をPATH
に追加します。
CP Editor の設定#
-
CP Editor を開き、メニューバーの
オプション -> 設定
をクリックします。 -
言語 -> C++ -> C++ コマンド
を見つけ、自分の好みに応じて設定します。私の設定は CCF のコンパイルパラメータに対してg++ -Wall -Wextra -O2 -lm --std=gnu++14
です。 -
拡張 -> コードフォーマット -> Clang Format
を見つけ、Clang Format プログラム
をclang-format
に設定し、スタイルを自分の好みに応じて設定します。私の設定は以下の通りです:BasedOnStyle: Google IndentWidth: 4
-
拡張 -> Language Server -> C++ Server
を見つけて有効にし、遅延を好みに応じて設定します。遅延が短すぎると使用できない可能性があります。私の設定は1000ms
です。
PowerShell 7 と oh-my-posh#
PowerShell のインストール#
PowerShell の GitHub ページ にアクセスし、最新の Release 内で自分のアーキテクチャに合ったインストーラーを見つけ、最新の PowerShell をインストールします。
Windows Terminal の設定#
MesloLGM NF フォントをダウンロードしてインストールします。
GUI 設定付きの Windows Terminal を使用するには、Microsoft Store から Windows Terminal Preview をダウンロードする必要があります。
設定 -> プロファイル -> デフォルト -> その他の設定 -> 外観 -> テキスト -> フォント
でデフォルトフォントを Fira Code に設定します。
oh-my-posh のインストールと設定#
- Microsoft Store で
oh-my-posh
を検索してインストールします。 - PowerShell を開き、
$Home\[My ]Documents
フォルダーに新しいPowershell
フォルダーを作成し、その下にMicrosoft.PowerShell_profile.ps1
を新規作成し、oh-my-posh init pwsh | Invoke-Expression
を入力します。
WSL2#
Arch Linux のインストール#
-
コントロールパネル -> プログラム -> Windows 機能の有効化または無効化
に入り、Linux 用の Windows サブシステム
と仮想マシンプラットフォーム
にチェックを入れて OK をクリックします。 -
コンピュータを再起動します。
-
このリンク から WSL2 アップグレードパッケージをダウンロードしてインストールします。
-
PowerShell を開き、
wsl --set-default-version 2
を入力して WSL のデフォルトを WSL2 に設定します。 -
LxRunOffline をダウンロードし、解凍して
PATH
に追加します。 -
archlinux-bootstrap-x86_64.tar.gz をダウンロードします。
-
新しい PowerShell を開き、
LxRunOffline i -n archlinux -f <bootstrap のパス> -d <保存場所> -r root.x86_64
を入力します。 -
wsl --set-version archlinux 2
を入力します。仮想マシンプラットフォーム
が有効になっていることを確認してください。システムがHyper-V
をサポートしている場合は、有効にしてください。 -
wsl -d archlinux
を入力して WSL に入ります。 -
PowerShell 内で
wsl --shutdown archlinux && wsl -d archlinux
を入力して再起動し、WSL に接続します。 -
WSL 内で
cd /etc && explorer.exe .
を入力してファイルエクスプローラーで/etc
を開きます。 -
pacman.conf
を開き、multilib
リポジトリのコメントを外し、archlinuxcn
リポジトリを追加します:[archlinuxcn] Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch
-
pacman.d/mirrorlist
を開き、国内ミラーリポジトリのコメントを外します。 -
WSL 内で以下のコマンドを入力します。
pacman -Syy pacman-key --init pacman-key --populate pacman -S archlinuxcn-keyring pacman -S base base-devel nano git wget
-
WSL 内で
passwd
を入力して root パスワードを設定します。 -
一般ユーザーを新規作成し、パスワードを設定します。
useradd -m -G wheel -s /bin/bash <ユーザー名> passwd <ユーザー名>
-
EDITOR=nano visudo
を入力し、%wheel ALL=(ALL:ALL) NOPASSWD: ALL
のコメントを外し、Ctrl+O Enter
で保存し、Ctrl+X
で終了します。 -
id -u <ユーザー名>
を入力して新規作成したユーザーの ID を確認します。最初のアカウントは1000
である必要があります。 -
exit
を入力して WSL を終了します。 -
PowerShell で
LxRunOffline su -n archlinux -v <アカウント ID>
を入力します。 -
管理者権限で PowerShell を開き、
net stop LxssManager && net start LxssManager
を入力して WSL サービスを再起動します。 -
Microsoft® Update Catalog にアクセスし、最新の
Windows Subsystem for Linux Update
(5.10.102.2
2022 年 8 月 18 日現在)をダウンロードします。 -
更新をインストールし、管理者権限で PowerShell を開き、
wsl --shutdown && wsl -d archlinux
を入力して WSL を再起動し、WSL に入ります。uname -a
を入力してカーネルバージョンを確認します。
zsh と oh-my-zsh のインストールと設定#
- WSL に入ります。
pacman -S zsh
を入力して zsh をインストールします。chsh
を入力し、パスワードを入力してシェルを/bin/zsh
に切り替えます。sh -c "$(curl -fsSL https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh)"
を入力して oh-my-zsh をインストールします。git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
を入力して powerlevel10k テーマをインストールします。git clone https://ghproxy.com/https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions && git clone https://ghproxy.com/https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
を入力してプラグインをインストールします。nano ~/.zshrc
を入力し、ZSH_THEME="powerlevel10k/powerlevel10k"
、plugins=(git zsh-autosuggestions zsh-syntax highlighting)
を設定します。- WSL を終了し、再起動します。
KDE Plasma#
基本インストール#
sudo pacman -Syu plasma
基本使用#
GWSL を使用して Plasma に接続することをお勧めします。Microsoft Store で GWSL
を検索するだけです。中国地域の GWSL は有料ですが、試用版と有料版には違いがなく、時間制限もなく、支払いを求められることもありませんが、作者をサポートすることをお勧めします。
ダウンロード後、GWSL を開き、タスクバーのアイコンをクリックすると Dashboard が表示されます。GWSL Distro Tools
をクリックし、Display/Audio Auto-Exporting
を有効にします。GWSL は Linux プログラムのウィンドウを Windows デスクトップに配置することをサポートしていますが、私は全体の Plasma を配置するために別の仮想デスクトップを使用することを好みます。
そのためには、次の操作を行う必要があります:
- 新しい仮想デスクトップを作成します。
- 新しい仮想デスクトップで GWSL を開きます。
- タスクバーの GWSL アイコンを右クリックし、上部の
XServer Profiles
を選択し、Fullscreen Mode
を選択します。 - 仮想デスクトップに全画面の黒いウィンドウが表示されますが、操作は必要ありません。別の仮想デスクトップに切り替えます。
- タスクバーの GWSL アイコンを左クリックし、
Shortcut Creator
を選択します。 - ポップアップウィンドウで、
Shortcut Label
にKDE Plasma
、Shortcut Command
にdbus-launch startplasma-x11
を入力します。複数の WSL コンテナがある場合は、Run In
をarchlinux
(つまり、あなたのコンテナ名)に選択します。 - 検索ツールを使用して
KDE Plasma on archlinux
を検索し、フォルダーを開いてショートカットをデスクトップにコピーして Plasma を起動します。 - ショートカットをダブルクリックします。
- 全画面 GWSL の仮想デスクトップに戻ると、Plasma が起動していることがわかります。
一部のトリック#
このように設定した後、次の問題が発生します:
- 仮想デスクトップを切り替えると GWSL ウィンドウが最小化されます。
まず、Python 3.x 環境を適切にインストールし、python -m pip install pywin32 pyvda
を使用して Win32 API と仮想デスクトップを操作するモジュールをインストールする必要があります。
もう一つの問題#
この時点で、仮想デスクトップを切り替えると GWSL ウィンドウが最小化されることがわかります。Windows 11 の新機能のおかげで、複数の仮想デスクトップに異なる壁紙を設定できますが、デスクトップ上のアイコンは分離できません。私の方法は、デスクトップにファイルを置かないことです。
解決策#
GWSL ウィンドウを非最小化状態にするスクリプトを作成することができます。Python の Win32 API と強力な pyvda ライブラリを使用して実現できます。
from pyvda import VirtualDesktop
import win32gui, win32con
import asyncio
hwnd_title = {}
WINDOW_NAME = 'VcXsrv Server - Display 秦玉振的笔记本:0.0' # ここをあなたのウィンドウ名に変更してください
GWSL_VD_NUM = 2 # ここをあなたの仮想デスクトップ番号に変更してください
DEBUG = False # デバッグ情報を表示
def get_all_hwnd(hwnd, mouse) -> dict:
global hwnd_title
hwnd_title = {}
if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):
hwnd_title.update({hwnd: win32gui.GetWindowText(hwnd)})
async def main():
while True:
if VirtualDesktop.current().number != GWSL_VD_NUM:
await asyncio.sleep(0.1)
continue
win32gui.EnumWindows(get_all_hwnd, 0)
hwnd = win32gui.FindWindow(None, WINDOW_NAME)
win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL)
if DEBUG:
print('Unminimized', hwnd)
await asyncio.sleep(0.1)
if __name__ == '__main__':
asyncio.run(main())
このコードは AsyncIO を使用してウィンドウを非最小化にし、各間隔を 0.1 秒に設定します。
参考資料:Python でウィンドウを最前面に表示する、著者:DG 息。
ウィンドウを切り替える際にそれほど目立たないようにするために、デスクトップの背景を Plasma と同じに変更することができます。
WSA#
Windows Subsystem for Android をすでにインストールしている場合は、まずアンインストールしてください。
MagiskOnWSA と GApps#
その名の通り、これにより Windows Subsystem for Android 上で Magisk(root 権限)と GApps(Google サービスフレームワークや Google Play など)を実行できます。
残念ながら、この記事が書かれる前に LSPosed/MagiskOnWSA はすでに禁止されていました。しかし、私たちは LSPosed/MagiskOnWSALocal が提供するスクリプトを使用して Linux でコンパイルすることができます。
GitHub Actions を使用する(推奨)#
GitHub アカウントを持っていて、GitHub 操作に少し慣れている場合は、この方法をお勧めします。厳密には GitHub Actions の規約に違反し、オープンソースリポジトリを利用して無料で構築する権利を乱用していますが、WSL コンテナから GitHub にアクセスできる場合は手動でコンパイルすることをお勧めします。
具体的な手順は以下の通りです:
-
LSPosed/MagiskOnWSALocal をフォークします。
-
.github
フォルダー内にworkflows
フォルダーを新規作成します。 -
workflows
フォルダー内に任意の名前の.yml
ファイルを新規作成し、Workflow を貼り付けます。Workflow はすでに洛谷云剪贴板 に置かれています。 -
ウェブページの
Actions
タブをクリックし、Actions を有効にします。 -
以下の 8~14 の手順に従って必要な設定を選択し、Workflow を実行します。
手動コンパイル(推奨しない)#
この方法は **「良好なネットワーク環境」** を必要とします。
具体的な手順は以下の通りです:
-
wsl --install -d Ubuntu
を使用して新しい Ubuntu コンテナを作成します。 -
新しいウィンドウでユーザー名とパスワードを設定します。
-
次のスクリプトを入力して Tuna ソースを変更します:
wget https://gitee.com/weizy1983/CNSolutions/raw/master/ubuntu/tunasource/UbuntuTunaSource.sh sudo chmod 777 UbuntuTunaSource.sh sudo ./UbuntuTunaSource.sh ubuntu20.04
-
sudo apt-get install python3-pip winetricks -y
を入力して依存関係をインストールします。 -
WSL でディレクトリを開きます。例えば、
$Home\Documents
です。 -
Git リポジトリをクローンし、
git clone https://ghproxy.com/https://github.com/LSPosed/MagiskOnWSALocal
を入力します。 -
リポジトリディレクトリに入り、
scripts/run.sh
を実行し、bash scripts/run.sh
を入力します。 -
Build arch
選択ページが表示されるので、デフォルト設定のまま Enter で確認します。 -
WSA release type
が表示されるので、自分で選択します。私はinsider slow
/Beta Channel
を選択しました。上下キーで移動し、スペースで選択、Enter で確認します。 -
次に
Magisk version
が表示されるので、自分で選択します。私はBeta Channel
を選択しました。 -
Do you want to install gapps?
と尋ねられるので、Yes
を選択し、Enter で確認します。 -
Variants of gapps
が表示されるので、OpenGApps が公式に Android 12 をサポートしていないため、Pico を選択します。 -
Do you want to keep amazon appStore?
と尋ねられるので、No
を選択し、Amazon アプリストアを保持しないようにします。 -
Root solution
でMagisk
を root ソリューションとして選択します。 -
その後、ターミナルにあなたの選択肢が表示され、完了を待つだけです。
ARCH=x64 RELEASE_TYPE=insider slow MAGISK_VER=beta GAPPS_VARIANT=pico REMOVE_AMAZON=remove ROOT_SOL=magisk
インストール#
設定 -> プライバシーとセキュリティ -> 開発者オプション -> 開発者オプションを有効にする
を選択します。- あなたの MagiskOnWSALocal ディレクトリを開きます。GitHub Actions を使用している場合は、Artifact をダウンロードしてフォルダーに解凍します。
Install.ps1
を右クリックし、PowerShell で開き、完了を待ちます。- Microsoft Store で WSATools を検索してインストールします。
- Android SDK Platform Tools をインストールします。
- お好きなプロキシソフトウェアをインストールします(良好なネットワーク環境がない場合)。私は Clash for Android を使用し、設定します。
- Google Play Store にアクセスし、アカウントにログインして Microsoft Desktop をインストールします。