WSL2のUbuntu20.04にQGIS3.16をインストール

# 概要
Windows10 2004 (x64) 以降のWSL2 Ubuntu 20.04上にQGIS3環境を構築します。
この記事は、[「WSLのUbuntuにQGIS3をインストール」](https://qiita.com/picaosgeo/items/621e9399086c29e97af5)のWSL2版です。
Windows10 ビルド2004以降へのアップデートがまだの方は先にOSのアップデートを行ってください。

WSL2 **Ubuntu 20.04** への**QGIS3.16.4(+dfsg-1~focal0)**のインストールから起動までの手順を説明します。

* Ubuntu20.04ではGDAL3.2.1 以降がインストールされますので、**UNVTベクタータイルツールキット**と共存ができます。

* 2022年の22H2アップデート以降で WSLg が正式リリースされました。WSLgをインストールすると、後半に記載しているXサーバーのインストールの章の作業は不要になります。

# QGISについて
QGISは地理情報のデータ閲覧、編集分析機能を有するクロスプラットフォームのオープンソースソフトウェアです。
最新バージョンは QGIS 3.18.3 'Zürich' で、 14.05.2021にリリースされました。
近年、お仕事や研究で地理空間情報を扱っている多くの方に利用されています。
Windows10 ver2004以降、WindowsでWSL2(Windows Subsystem for Linux) が使えるようになりました。
これまでWindowsユーザーは、OSGeo4Wまたはスタンドアロン版QGISをインストールするかVirtualBoxやVMWare Workstation Playerを使用してOSGeoLiveを使用してQGISを使用していました。
Windows10でWSL環境を利用することが可能になったため、Linux版QGISを直接使用することができるようになりました。

# WSL2のインストール
WSL2のインストールですが、Windowsのログイン名が**漢字**の場合はうまくゆかないことがあります。
この場合、1バイト英数文字のユーザーアカウントを新たに作成してください。
自分のアカウントが2バイト文字かどうかわからない方は、コマンドプロンプトを起動して表示されるユーザーフォルダの文字列をじーっと見てご判断ください。

### WSL2の準備
WSL2をインストールしていない場合は、管理者モードでPowerShellを開き、以下を実行します。

"Linux 用 Windows サブシステム" オプション機能を有効にします。

```:PowerShell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
```
再起動してWSL2環境を有効にします。

```:PowerShell
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```
Linuxカーネル更新プログラムパッケージをダウンロードしインストールします。
[x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ](https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi)

WSL2を規定のバージョンに設定します。

```:PowerShell
wsl --set-default-version 2
```


### Ubuntu 20.04のインストール
WSL2をインストールしたら、Microsoft Storeから[Ubuntu20.04 LTS](https://www.microsoft.com/store/apps/9n6svws3rx71)をインストールします。

### Ubuntuの初期起動とアカウント設定
WSL2のUbuntuアイコンをクリックして、WSL2を起動します。
初期起動では、しばらく自動実行の環境設定が行われます。
その後、ユーザーアカウントの設定メッセージが表示されますので、アカウントの指定を行います。
**ユーザー名、パスワードに漢字は入れないでください**

シェルが起動したら初めに下記の操作でUbuntuのパッケージを更新します。

### パッケージリストの更新
```:WSL2
sudo apt update
```
### パッケージのアップデート
```:WSL2
sudo apt upgrade -y
```
### 上記で保留されたパッケージのアップデート
```:WSL2
sudo apt dist-upgrade -y
```
### 不要になったパッケージの削除
```:WSL2
sudo apt autoremove -y
```

### python3およびpip3のインストール
python3がインストールされているかどうかしらべます。

```:WSL2
apt show python3
```
インストールされていない場合は、python3のインストールを行います。

```:WSL2
sudo apt install -y python3
sudo apt install -y python-is-pythn3
```

pip3がインストールされているかどうかしらべます。

```:WSL2
apt show python3-pip
```
インストールされていない場合は、pip3のインストールを行います。

```:WSL2
sudo apt install python3-pip -y
sudo pip3 install pip -U
```

### matplotlib、tkinterモジュールのインストール

```:WSL2
sudo pip3 install matplotlib
sudo apt install python3-tk -y
```

## Windows環境にXサーバをインストールする
Linux環境でQGISのGUIを表示するためには、Xサーバが必要になります。
ホストOSのWindows側でXサーバを動かして、Windows上でGUI環境をサポートします。

###VcXsrv インストール
[VcXsrv Windows X Serverのダウンロードページ](https://sourceforge.net/projects/vcxsrv/)からVcXsrvをダウンロードして、Windowsにインストールします。

### Windows10側で、XLaunchを起動する
インストールが終了すると、デスクトップにXLaunchというアイコンが作成されます。
XLaunchアイコンをクリックするか、［スタート］メニューの［VcXsrv］－［XLaunch］を選択して、XLaunchを起動します。
Display settingダイアログが表示されるので、 **Multiple windows** を選択して、次へ進み、Select how to start clientsで **Start on client** を選択し、次へ進みます。
Extra settingsで **Clipboard**, **Primary Selection**, **Native opengl** を選択します。また、Additional parameters for VcXsrvの欄に`-ac`と書き込むこと（[参考](https://qiita.com/Engr_Coal33/items/6aabb6932b53bd43b843))。

次回起動時のために、設定をファイルに保存します。
以降は手動でXLaunchを起動する際、保存したファイルをクリックします。

### 表示先ディスプレイの設定
X Serverのディスプレイ指定は下記の書式になります。
_DISPLAY=＜ホスト名／IPアドレス＞:＜ディスプレイ番号＞.＜スクリーン番号＞_
下記のようにWSL2のターミナルでコマンドを入力し、ログインユーザーの.profileにディスプレイ指定を追加します。

Window上で**cygwin**を使用していて、cygwin環境とディスプレイ設定値 0.0 がバッティングする場合、1.0 や 2.0を指定しましょう。
なお、WSL2ではIPアドレスがホストの再起動ごとに変わってしまうため、WSL2のnameserverの内容からセットする方法を使用します。

```:WSL2
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0 >> ~/.profile
echo export LIBGL_ALWAYS_INDIRECT=1  >> ~/.profile
source ~/.profile
```

### Xサーバ対応アプリをインストールする
Xサーバの動作チェックのために、x11のユーティリティをインストールし、テストしましょう。

```
sudo apt install x11-apps
```

Xアプリ「xeyes」を実行してみます。

```:WSL2
xeyes
```
マウスポインタをトラックする眼のアプリウィンドウが表示されれば、Xサーバは動作していることが確認できます。
エラーが発生する場合は、原因を調べて修正しましょう。

# WSL2日本語化
WSL2は日本語対応していますが、QGISを起動した際、レイヤーツリーなどで日本語が表示されない場合があります。
これを修正するため、日本語フォント環境を追加する必要があります。他の言語環境（韓国語など）でも同様に言語パックを追加する必要があるかもしれません。

```:WSL2
sudo apt -y install language-pack-ja
sudo update-locale LANG=ja_JP.UTF8
sudo apt -y install manpages-ja manpages-ja-dev
```

### 日本語フォントインストール
WIndows側のフォントをUbuntu20.04でも使用するように設定を行います。

```:WSL2
sudo apt install fontconfig -y
```

/etc/fonts/local.conf を作成して、下記のコードをペーストして保存します。

```:local.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
 <dir>/mnt/c/Windows/Fonts</dir>
</fontconfig>
```

### その他のツールやライブラリのインストール

```:WSL2
sudo apt update
sudo apt upgrade -y
sudo apt-get install git build-essential libssl-dev libreadline-dev zlib1g-dev x11-apps x11-utils x11-xserver-utils libsqlite3-dev nodejs fonts-ipafont libxml2-dev libxslt1-dev -y
```
fonts-ipafontなど、一部はすでにインストールされているかもしれません。


## QGIS3のインストール
**2020/10/29 QGIS3のGPG変更にともない、インストール記述を修正しました。**

### パッケージリストにQGIS3のリポジトリを追加
QGIS3をインストールするために、WSL（Ubuntu20.04）のパッケージリストにQGIS3用のエントリを追加します。

### 最初にこの手順に必要なツールをインストールする

```
sudo apt install gnupg software-properties-common
```

### 公開鍵を追加する
パッケージリストにエントリを追加したら、リポジトリアクセス用の公開鍵をWSL環境に追加します。

```
wget -qO - https://qgis.org/downloads/qgis-2020.gpg.key | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/qgis-archive.gpg --import
sudo chmod a+r /etc/apt/trusted.gpg.d/qgis-archive.gpg
```

最新の安定版QGIS (3.16.x Hannover)の含まれるUbuntu GISレポジトリを追加します。

```
sudo add-apt-repository ppa:ubuntugis/ppa
```

公開鍵を追加したら、リポジトリを更新します。

```
sudo apt update
sudo apt upgrade -y
```

### QGIS3のインストール
QGIS3とツール等をインストールします。
必要なツールが他にあれば、コマンドラインに追加します。

```
sudo apt install -y qgis python3-qgis qgis-plugin-grass saga
```

**saga**を使用する場合、*saga*の指定は最後にした方が良いようです。
なお、sagaのバージョンはパッケージリストでは**2.3.1**になっています。


#QGISの起動と動作確認
WSLのshellからqgisを起動します。

```
$ qgis
```

WSL2でqgisを起動するとWindowsよりもキビキビと動作します。
![QGISonWSL2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23794/832b8173-6d0c-fc20-02bf-a4d5d0983713.jpeg)


ベンチマーク結果は、[OSGeo.krの Sanghee Shin さんのブログ](https://endofcap.tistory.com/1863)にあるとおりです。内容を抜粋して日本語訳しました。

QGISプログラムの起動速度とデータの読み込み速度は以下の通りです。

|  プラットフォーム  |  QGISプラログラムの起動<br>（初回）  |  QGISプラログラムの起動<br>（2回目）  |  データの読込 <br>（Windowsストア）  |  データの読み込み<br>（WSLストア）  |
| :----: | :----: | :----: | :----: | :----: |
|  Windows10  |  38.06秒  |  17.81秒  |  17.05秒  |  ロード不可  |
|  WSL2  |  4.38秒  |  4.11秒  |  17.75秒  |   6.85秒  |
				
* データがWSL2のファイルシステムにある場合QGISの処理速度は、Windows QGISを圧倒する。MSもWSL2のプログラムを利用してデータを処理する場合、Windowsではなく、WSL2のファイルシステムに直接保存することをお勧めします。				
* ちなみにWSL2からWindows上のファイルにアクセスする場合、WSL1より速度が遅くならない。（下のリンク参照）				
https://docs.microsoft.com/en-us/windows/wsl/compare-versions


#不具合など
1.QGISアプリ内のURLリンク遷移
QGISアップデートのリンクが下のステータスバーに出ることがありますが、クリックしてもリンクが開きません。
WSL上にChromeやFirefox等をインストールするか、シェル環境のブラウザを指定をする必要があります。
Windows側の既定のブラウザを起動するには、下記の指定をしておきます。

```:.bashrc
export BROWSER="explorer.exe"
```

2.QGIS起動時のワーニング
QGIS3.16を起動すると、WSL2シェルにワーニングが表示されます。

```:WSL2
Warning: QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-username'
        - 'VirtualXPath'        [XML Path Language - XPath]
        - 'VirtualXPath'        [XML Path Language - XPath]
        - 'VirtualXPath'        [XML Path Language - XPath]

Warning 4: Failed to open /usr/share/qgis/resources/data/world_map.gpkg: 許可がありません.
```
このワーニングはQGISのインストーラーのバグのようで、r+wアクセス権が設定されていないためのようです。


3.WSL2のホストメモリ枯渇対応
[@yoichiwo7](https://qiita.com/yoichiwo7/items/e3e13b6fe2f32c4c6120)さんの記事から引用させていただきます。
%USERPROFILE%\.wslconfigのコンフィグに以下の設定を行います。

- **%USERPROFILE%**はC:\Users\taroのようなホームディレクトリを指します。
- コンフィグが存在しない場合は作成してください。
- 設定した後はWSL2を再起動するか、OSを再起動してください。

```:.wslconfigファイル
[wsl2]
memory=6GB
swap=0
```
- memoryにはWSL2が最大確保するメモリサイズを指定します。PCの搭載メモリとWSL2の使用用途に応じてメモリサイズの値は変更してください。ちなみに未指定時のデフォルト値はPC搭載メモリの80%です。
- swapを0に設定してスワップを無効にします。（どちらでもよい。詳しくは記事を参照してください）

QGISは適当に動かしてチェックしているので、動作上の不具合を発見した方はご報告ください。


#参考ページ
WSLのインストールについてはこちらを参考にしました。
https://docs.microsoft.com/ja-jp/windows/wsl/install-win10

WSL1のWSL2コンバートについてはこちらを参考にしました。
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel


VcXsrvインストールについてはこちらを参考にしました。
https://www.atmarkit.co.jp/ait/articles/1812/06/news040.html

WSL2におけるVcXsrvの設定はこちらを参考にしました。
https://qiita.com/ryoi084/items/0dff11134592d0bb895c

LinuxへのQGISのインストールについてはこちらを参考にしました。
https://www.qgis.org/ja/site/forusers/alldownloads.html#debian-ubuntu
https://www.gis-blog.com/how-to-install-qgis-3-on-ubuntu/

ベンチマーク結果についてはOSGeo.krの Sanghee Shin さんのブログを引用させていただきました。
https://endofcap.tistory.com/1863

Linuxで使える日本語フリーフォントには次のものもあります。
http://note.kurodigi.com/free-font2019/

国際化フォント
https://wiki.ubuntulinux.jp/UbuntuTips/Desktop/InstallFont

WSL2のメモリコントロールについては @yoichiwo7 さんの記事から引用させていただきました。
https://qiita.com/yoichiwo7/items/e3e13b6fe2f32c4c6120