Visual Studio CodeでC++, LaTeX, Python(GUI)する(WSL2)

#目次
1. 概要
1. Windows Subsystem for Linux 2
1. Visual Studio Code
1. C++
1. LaTeX
1. Python

<a id="anchor1"></a>
#1.概要
WSLの環境はあったが, 

>__「WSL2で環境構築するぞ, うおお(無印と何が違うのかわかってない)」__

となった. 結構困ったので自分用にメモしておく. 

- [
WSL 2とVS CodeでC, Python, LaTeXを使えるようにした話
](https://event.phys.s.u-tokyo.ac.jp/physlab2021/advent-calendar/epexwm73p/)

をめちゃくちゃ参考にした.


<a id="anchor2"></a>
#2.Windows Subsystem for Linux 2
Windows機で仮想的にLinuxを使うのに必要な, __WSL__(Windows Subsystem for Linux)のVer.2を入れる. 
[Microsoft公式](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10)の手動インストールをやる.

##2.1.Windows側の設定をする. 
左下の窓マークを右クリック->「Windows PowerShell(管理者)(A)」で

```
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
```

をコピペしてEnter

```
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```

もコピペして実行(上のとちょっと違う). ウィンドウはまだ消さない.

##2.2.更新プログラムパッケージをダウンロード

x64用でダウンロード. 管理者許可もYes.

##2.3.WSL2を使う設定
さっきのPowerShellで

```
wsl --set-default-version 2
```

を実行. 

##2.4.Ubuntuをインストール
Microsoft Storeで「Ubuntu」と検索. 好きなバージョンを入手. ちな「Ubuntu 20.04 LTS」 にした. 

##2.5.Ubuntuの設定
~ここから実行はずっとUbuntu~

インストール出来たら, 起動(初回だけ時間がかかる). ユーザーネーム(適当に決める)を1回と, パスワード(__表示されない__)を2回入力する. 
そのままだと, 海外経由で遅いので, 

```
sudo sed -i -e 's%http://.*.ubuntu.com%http://ftp.jaist.ac.jp/pub/Linux%g' /etc/apt/sources.list
```
を実行して国内に変更する. 

```
sudo apt upgrade
```
を実行すると, 丁寧に時間をかけてアップグレードしてくれる. 続いて,
 
```
sudo apt update
```
も実行すると, 丁寧に時間をかけてアップデートしてくれる. これでWSL2は終わり!

<a id="anchor3"></a>
#3.Visual Studio Code
ヤバいメモ帳こと__Visual Studio Code__(VSCode)をいれます. 

##3.1.VSCodeインストール
[VSCode公式](https://code.visualstudio.com/)からVSCodeのWindows版をダウンロード, インストール. 起動する. 

##3.2.拡張機能
「Ctrl」+「Shift」+「x」で出る検索窓から,  

- Remote - WSL
- C/C++
- LaTeX Workshop
- Python

を検索して, それぞれインストール. 「再起動しろ！」といわれるので, 適宜してやる. 

##3.3.設定
「Ctrl」+「,」. 右上の紙がペロンとなっているアイコン「Open Settings (JASON)」を押す. 

```settings.json
{
    "files.eol": "\n",
    "terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\wsl.exe",
}
```

をコピペして保存. 

<a id="anchor4"></a>
#4.C++

```
sudo apt install build-essential
```
を実行するだけ. 詳しくは

- [Visual Studio Codeで競プロ環境構築(導入編)](https://qiita.com/AokabiC/items/e9312856f588dd9303ed)

<a id="anchor5"></a>
#5.LaTeX
詳しくは

- [[LaTex]VSCodeとWSLで作るLaTex環境構築の備忘録](https://qiita.com/uoyuki/items/c0b3feeb80f9a2699759)

```
sudo apt install texlive-full
```

を実行. ひたすら待つ. 「Ctrl」+「k」, 「Ctrl」+「o」で「Windows (C:)」を選択し, 開く. 「New File」のアイコンから, 名前が「latex-tools.sh」で, 中身が

```latex-tools.sh
#!/bin/bash
#Windows特有の c:/hoge/piyo → /mnt/c/hoge/piyo に書き換えてコマンドを実行するshellscript
newArgs=()
for arg in $@; do
      if [ ${arg:1:1} = : ]; then
          arg=/mnt/${arg:0:1}${arg#*:}
      fi
          newArgs+=( $arg )
      done
${newArgs[@]}
```

のファイルをC直下に保存. 「Ctrl」+「,」. 右上の紙がペロンとなっているアイコン「Open Settings (JASON)」を押す. 

```settings.json
{
    "files.eol": "\n",
    "terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\wsl.exe",

    "latex-workshop.latex.tools": [
        {
            "name": "latexmk",
            "command": "wsl.exe",
            "args": [
                "/mnt/c/latex-tools.sh",
                "latexmk",
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "-pdf",
                "%DOC%"
            ]
        },
        {
            "name": "pdflatex",
            "command": "wsl.exe",
            "args": [
                "/mnt/c/latex-tools.sh",
                "pdflatex",
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "%DOC%"
            ]
        },
        {
            "name": "bibtex",
            "command": "wsl.exe",
            "args": [
                "/mnt/c/latex-tools.sh",
                "bibtex",
                "%DOCFILE%"
            ]
        },
        {
            "name":"ptex2pdf",
            "command": "wsl.exe",
            "args": [
                "/mnt/c/latex-tools.sh",
                "ptex2pdf",
                "-l",
                "-ot",
                "-kanji=utf8 -synctex=1",
                "-interaction=nonstopmode",
                "%DOC%"
            ]
        },
        {
            "name":"ptex2pdf (uplatex)",
            "command": "wsl.exe",
            "args": [
                "/mnt/c/latex-tools.sh",
                "ptex2pdf",
                "-l",
                "-u",
                "-ot",
                "-kanji=utf8 -synctex=1",
                "-interaction=nonstopmode",
                "%DOC%"
            ]
        },
        {
            "name": "pbibtex",
            "command": "wsl.exe",
            "args": [
                "/mnt/c/latex-tools.sh",
                "pbibtex",
                "-kanji=utf8",
                "%DOCFILE%"
            ]
        }
    ],
    
    "latex-workshop.latex.recipes": [
        {
            "name": "ptex2pdf",
            "tools": [
                "ptex2pdf",
            ]
        },
        {
            "name": "ptex2pdf (uplatex)",
            "tools": [
                "ptex2pdf (uplatex)",
            ]
        },
        {
            "name": "latexmk",
            "tools": [
                "latexmk",
            ]
        },
        {
            "name": "pdflatex",
            "tools": [
                "pdflatex",
            ]
        },
        {
            "name": "pdflatex -> bibtex -> pdflatex",
            "tools": [
                "pdflatex",
                "bibtex",
                "pdflatex",
            ]
        },
        {
            "name": "ptex2pdf -> pbibtex -> ptex2pdf",
            "tools": [
                "ptex2pdf",
                "pbibtex",
                "ptex2pdf",
            ]
        },
        {
            "name": "ptex2pdf (uplatex) -> pbibtex -> ptex2pdf (uplatex)",
            "tools": [
                "ptex2pdf (uplatex)",
                "pbibtex",
                "ptex2pdf (uplatex)",
            ]
        },
    ],
    "explorer.confirmDelete": false,
    "[latex]": {

        "editor.formatOnPaste": false,
        "editor.suggestSelection": "recentlyUsedByPrefix"
    },
    "files.autoSave": "afterDelay",
    "workbench.startupEditor": "newUntitledFile"
}
```

に更新する. 


<a id="anchor6"></a>
#6.Python
[退屈なことはPythonにやらせよう](https://www.amazon.co.jp/E9-80-80-E5-B1-88-E3-81-AA-E3-81-93-E3-81-A8-E3-81-AFPython-E3-81-AB-E3-82-84-E3-82-89-E3-81-9B-E3/dp/4873119278/ref=dp_ob_title_bk). 

##6.1.Anaconda3のインストール

[anaconda公式](https://www.anaconda.com/products/individual)から, __Linux用__(Windows用でない)の「64-Bit (x86) Installer」をダウンロード. 
ubuntuで

```
bash /mnt/c/Users/XXXX/Downloads/Anaconda3-
```

(XXXXには, Windowsでのユーザー名が入る)まで入力して「Tab」を押すと, バージョンに合わせて

```
bash /mnt/c/Users/XXXX/Downloads/Anaconda3-2020.11-Linux-x86_64.sh
```

みたいな表示になるので実行. 指示に従ってAnaconda3をインストールする. 

##6.2.VcXsrvのインストール
画像の表示をする(今流行りの†GUI†)ために, __VcXsrv__をインストールする. [sourceforge公式](
https://sourceforge.net/projects/vcxsrv/)からダウンロードしたexeファイルを実行してインストール. 

##6.3.VcXsrvの設定
詳しくは

- [VcXsrv のインストール（Windows 上）](https://www.kkaneko.jp/tools/win/vcxsrv.html)
- [WSL2の導入とGUI環境の構築とsshfsしたものもgnome-openしたい!! [Ubuntu18.04/20.04]](https://qiita.com/momomo_rimoto/items/51d533ae9529872696ce)
- [VcXsrv（Win版Xサーバー）を自動起動する方法](https://rin-ka.net/windows-x-server-vcxsrv-start/)

Xlaunchを起動して, 「ファイアーウォールがなんたら！」と警告がでたら, __パブリック側__を解除する. 基本デフォルトでポチポチしていくが, __「Extra settings」では, 最後の「Additional parameters for VcXsrv」欄に「-ac」を追加する__. 毎回ポチるのは面倒なので, 自動化してしまう. 「Save configuration」をクリックして適当な場所に保存する. 「完了」. 左下の窓アイコンを右クリック「ファイル名を指定して実行(R)」で, 「shell:startup」を入力して「OK」. 右クリックから「新規作成」→「ショートカット」→「(さっき保存した場所)」で登録する. 

##6.4.パス設定
このままだといい感じに動かなかったので, 

```
cd
```

でホームディレクトリに移動し, 

```
vi .bashrc
```

を実行することで.bashrcを開く. 「i」を押すと編集モードになるので, 最後の行に

```
export PATH="/home/ZZZZ/anaconda3/bin:$PATH"
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0
```

(ZZZZにはubuntuのユーザー名が入る)を追加. 「Esc」で離脱し, 

```
:wq
```

を実行することで, 保存終了できる. 

```
source .bashrc
```

を実行しておく. 

##6.4.opencv

```
pip3 install opencv-python
```
した. 
もしかしたら

```

```