これは何?
- windows10 の CLI インターフェースとして ConEmu を常用しております(alphaレベルで。そうでないと全く更新が来ない…)
- その際にWindows Subsystem Linux(以下WSL)のタスクをいい感じに設定する方法を編み出したのですが、Conemu自体のノウハウがどこにも載っていなかったので、自分で書きだしてみるテストです。
- 試している環境は Windows 10 pro 1803 となりますが、多分 1709 でも大丈夫だと思われます。
ConemuのTaskとは
- (参考URL) https://conemu.github.io/en/Tasks.html
- 前提としてこれがないと全く理解されない予感があるので…マニュアルを読み込んでいないので自分的理解の範疇です。
- Conemuはタブごとに違うコンソールプログラムを実行することが可能なのですが、実行するコンソールプログラムの設定単位を指します。
- 大まかに設定するものとしては下記が存在します
|項目名|概要|sample値|備考|
|---|---|---|---|---|
|Name|Taskの名前を決める値「::」で区切ると階層を掘ることができる| Bash::Git bash
|GUIでポチポチやるときは階層があると便利なので纏められそうなグループは纏めておきましょう|
|Task Parameters(GuiArgs)|コマンド実行時につけるオプションの 「/icon」でアイコン表示などを行うのが主。| /icon "C:\Windows\system32\cmd.exe"
| 色々やれそうではありますが、基本アイコン表示のみでしか使っていない|
|Commands(Cmd1) | 実際にプログラムを立ち上げる時のコマンド。 | PATH=%ConEmuDir%\..\Git\usr\bin;%PATH%" & "%ConEmuDir%\..\Git\git-cmd.exe" --no-cd --command=%ConEmuBaseDirShort%\conemu-msys2-64.exe /usr/bin/bash.exe -l -i -new_console:p
| ここがプログラム立ち上げ時のミソ。 |
WSL の Task 作成の下準備
- WSL を作成するときにいくつか必要な情報があるので下準備としてコマンドを実行する必要があるのでここに記します。
WSLのディストリビューション毎のGUIDを取得
-
WSLにはダウンロードしたディストリビューション毎にGUIDが定められており、これは ユーザ毎&ダウンロード毎、毎回GUIDが変わります 。なのでダウンロードしなおしたら再度確認する必要がある模様です。(若干嘘かもしれません)
-
GUIDは レジストリ に書かれているので コマンドプロンプト or powershell プロンプトから下記コマンドを実行して取得します。
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss" /s
- 結果としては下記のようなものが出ます
> reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss" /s
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss
DefaultDistribution REG_SZ {7f3c093-cdd9-4867-854d-r43rf8fb8bb86}
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{f94rn1-9e39-472f-bf6e-25802845f1fd70b85}
State REG_DWORD 0x1
DistributionName REG_SZ Debian
Version REG_DWORD 0x1
BasePath REG_SZ C:\Users\Rask4\AppData\Local\Packages\TheDebianProject.DebianGNULinux_76v4gfsz19hv4\LocalState
PackageFamilyName REG_SZ TheDebianProject.DebianGNULinux_76v4gfsz19hv4
KernelCommandLine REG_SZ BOOT_IMAGE=/kernel init=/init ro
DefaultUid REG_DWORD 0x3e8
Flags REG_DWORD 0x7
DefaultEnvironment REG_MULTI_SZ HOSTTYPE=x86_64\0LANG=en_US.UTF-8\0PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games\0TERM=xterm-256color
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{7f3c093-cdd9-4867-854d-r43rf8fb8bb86}
State REG_DWORD 0x1
DistributionName REG_SZ Ubuntu
Version REG_DWORD 0x1
BasePath REG_SZ C:\Users\Rask4\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState
PackageFamilyName REG_SZ CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc
KernelCommandLine REG_SZ BOOT_IMAGE=/kernel init=/init ro
DefaultUid REG_DWORD 0x3e8
Flags REG_DWORD 0x7
DefaultEnvironment REG_MULTI_SZ HOSTTYPE=x86_64\0LANG=en_US.UTF-8\0PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games\0TERM=xterm-256color
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{485r34r-17f0-4e2c-4873-a297a85fjiofb28e6}
State REG_DWORD 0x1
DistributionName REG_SZ openSUSE-42
Version REG_DWORD 0x1
BasePath REG_SZ C:\Users\Rask4\AppData\Local\Packages\46932SUSE.openSUSELeap42.2_022rs5jcyhyac\LocalState
PackageFamilyName REG_SZ 46932SUSE.openSUSELeap42.2_022rs5jcyhyac
KernelCommandLine REG_SZ BOOT_IMAGE=/kernel init=/init ro
DefaultUid REG_DWORD 0x3e8
Flags REG_DWORD 0x7
DefaultEnvironment REG_MULTI_SZ HOSTTYPE=x86_64\0LANG=en_US.UTF-8\0PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games\0TERM=xterm-256color
WSLディストリビューションのEXEのありか取得(アイコン用)
- TODO
- 取りあえずこんなところにあったりします
%ProgramW6432%\WindowsApps\TheDebianProject.DebianGNULinux_1.0.0.0_x64__76v4gfsz19hv4\debian.exe
WSL 用の Task 作成
- 以上を踏まえて作成するTaskはこんな感じになります
項目名 | 値 | 備考 |
---|---|---|
Name | WSL::Debian |
。 |
Task Parameters(GuiArgs) | -icon "%ProgramW6432%\WindowsApps\TheDebianProject.DebianGNULinux_1.0.0.0_x64__76v4gfsz19hv4\debian.exe" |
。 |
Commands(Cmd1) | PATH=%ConEmuBaseDirShort%\wsl;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe --wsl -cur_console:pm:/mnt --distro-guid {f94rn1-9e39-472f-bf6e-25802845f1fd70b85} |
。 |
- Commandsのポイントは --distro-guid 後の中括弧の文字列。ここでGUIDを当てはめるとOK。その他は最新版のConemuを入れるとWSL用のデフォルト値が入るのですが、それの流用でOKです。
- Task Parametersのポイントは アイコンにWSLのコンソールを立ち上げるEXEそのものパスを書く というのがミソ。
その他知っておくべきこと
conemu-cyg-64.exe って?
wslbridge って?
直接 ディストリビューションのEXE指定したら駄目なの?
-
以下の不具合が確認されているので、conemu-cyg-64.exe + wslbridge 経由で利用したほうが良いです。
- vim等のエディタでカーソルが使えなくなる。
- 一部特殊なキーの受付が使えなくなる。
-
vimが使いにくくなるのは微妙ですよね…
-
あと conemy-cyg-64.exe 経由のWSL接続だと「コンソールログ取得」が可能なので、自分はこの方法で繋いでいます。