LoginSignup
3
2

More than 3 years have passed since last update.

苦労して構築する Windows10 + WSL2 + Visor ターミナル環境

Last updated at Posted at 2020-09-12

はじめに

Windows のターミナル環境は選択肢が多くて、業務だと TeraTerm や PuTTY あたりがよく使われていると思うけれど、他にも多数( Rlogin, Poderosa, Hyper, mRemoteNG, etc... )のターミナルエミュレータが存在するし、最近は Microsoft 純正の Windows Terminal というのも出ているよね。

個人用途ではターミナルは PuTTY を使い続けてきて、最近は Mac の iTerm2 の使用感に近付けている。

  • ホットキーでターミナルを Visor 表示できる。
  • ターミナルを立ち上げると WSL2 環境のシェル ( zsh ) が立ち上がる。
  • ウィンドウは透過させて、タブもある。

みたいな感じ。

Visor とは

Visorと言っているのは、こういう挙動のこと。
visor-sample
最近は「Quake-style」と呼ぶみたい。

ホットキーを押下するとターミナルの表示/非表示を切り替えられる。これが、頻繁にターミナルと他のアプリケーションを行き来する時(Webで調べながらCUI作業するとか)なんかには、めちゃ便利なわけ。

準備するもの

  • Windows 10 Pro 64bit
  • Ubuntu on WSL2
  • ConEmu
  • PuTTY
  • AutoHotkey

Visor するだけなら ConEmu だけでいい。

これに加え、ぼくの場合は

  • cmd.exe や PowerShell ではなく WSL2 のシェルを立ち上げるために WSL2Ubuntu
  • さらに、普段の使用感(フォントとか)で操作するために PuTTY
  • さらに、ConEmu が起動していない時でもホットキーで ConEmu を呼び出すために AutoHotkey

を組み合わせて使っている。

ConEmu

  • ConEmu
    ( 想定のインストール先:C:\App\ConEmu\ConEmu64.exe )

タブ付きターミナルエミュレータ。Quake style として、Visor の機能が搭載されている。
ターミナルエミュレータの中では自由度が高く、かなり細かくカスタマイズができる。

ここまで読んで ConEmu だけでいいや!って人は Cmder の方がオススメかも。

WSL2 + Ubuntu

WSL2 環境を有効に出来たら Microsoft Store で Ubuntu をインストールする。

PuTTY

  • PuTTY => iceiv+putty
    ( 想定のインストール先:C:\App\PuTTY\putty.exe )

昔から好きで使っているのだけれど、不満はある。

  • UTF-8 の Emoji がまともに表示できない。
  • 端末タイプとキー割り当ての対応がおかしい?

PuTTY で SSH 設定の端末タイプを xterm-256color にして ssh -> zsh -> ( tmux -> ) neovim とした環境だと Home, End が期待通りに動作しなくて、screen-256color にすると期待通りに動作する。
(環境が複雑すぎて原因の切り分けができない…)

という挙動があって、PuTTY 自身はターミナルマルチプレクサでも無いのに今は screen-256color を指定して使っている。この状態には違和感があるし、なにより対応する zsh 側の設定が気持ち悪くなる。

この件については今回は無視する。

AutoHotkey

Powerful. Easy to learn.
The ultimate automation scripting language for Windows.

こいつがあればキーボードだけで生きていける。

各種設定

さあ、ここからが本番だ。

PuTTY

iceiv 版の PuTTY をダウンロードしたなら、ja-JP の中の *.lng ファイルを putty.exe と同じフォルダにコピーすると日本語になるよ。

以降の画像は日本語化前の英語表記のものです。

  1. puttygen.exe を実行。
  2. Ubuntu には公開鍵認証方式でSSHログインしたいので、鍵を生成するよ。
    今回はちょっと意識高く ECDSA 521bit を選んで、「Generate」をクリック。
  3. カーソルをグルグル動かすと生成が進む。
  4. 公開鍵を生成する。
  5. ファイル名は「id_ecdsa.pub」とでもしておく。
  6. 秘密鍵を生成する。
  7. 警告が出るが、「はい」でOK。今回は「パスフレーズ無し」で鍵を作る。
  8. ファイル名は「id_ecdsa.ppk」とでもしておく。
  9. ウィンドウ右上の「☓」をクリックして閉じる。

次!

  1. putty.exe を実行。
  2. Connection > SSH > Auth を開いて、秘密鍵として先ほど生成した id_ecdsa.ppk を指定する。
  3. Connection > Dataユーザ名に Ubuntu をインストールした時に指定したユーザ名を入れる。 ぼくの場合は諸事情で端末タイプを「screen-256color」というものに変更しているけれど、詳しくはググってくれ!
  4. Session で、接続先を 127.0.0.1、設定名を wsl で、保存する。
  5. ウィンドウ右上の「☓」をクリックして閉じる。

次!

ConEmu

ホットキーは「左Win + 半角/全角」にするよ

  1. ConEmu64.exe を実行。

  2. 「OK」をクリック。

  3. こんなウィンドウが表示されたら、「Win + Alt + P」で設定画面を出す。

  4. Startup > Tasks と進んで、PuTTY用の設定を追加する。(並び順は何でもOK)

  5. Features > Transparency と進んで、ウィンドウ透過を有効にする。

  6. あとは関係ありそうな設定画面をそのまま貼っていく。(適宜自分好みに変えてください。)




  7. 「Save settings」をクリックして閉じる。

  8. ウィンドウ右上の「☓」をクリックして、一度 ConEmu を終了させる。

  9. C:\App\ConEmu\ConEmu.xml が生成されているので、サクラエディタか何かで開く。


    45行目辺りにある、

    • MinimizeRestore の値を 00005bf4
    • MinimizeRestore2 の値を 00005bf3

    に、それぞれ書き換えて保存する。

次!

WSL2 + Ubuntu (前半)

  1. WSL2 でインストールした Ubuntu を起動する。

  2. 管理者権限に昇格して SSHサーバ(openssh-server パッケージ)をインストールする。

    $ sudo su -
    # apt update && apt install openssh-server
    
  3. 作業ユーザで sudo する際のパスワード確認を省略するように設定する。

    # EDITOR=vim visudo
    
    .. (以下を変更。「%sudo」の行に「NOPASSWD: 」を追記して保存する。)
    %sudo>--ALL=(ALL:ALL) ALL
    ↓
    %sudo>--ALL=(ALL:ALL) NOPASSWD: ALL
    
  4. SSHサーバで公開鍵認証を有効にする。

    # cd /etc/ssh/
    # ssh-keygen -A
    # vim sshd_config
    
    .. (以下を変更。2箇所のコメントアウトを外して保存する。)
    #PubkeyAuthentication yes
    ↓
    PubkeyAuthentication yes
    ..
    #AuthorizedKeysFile     .ssh/authorized_keys .ssh/authorized_keys2
    ↓
    AuthorizedKeysFile     .ssh/authorized_keys .ssh/authorized_keys2
    
  5. 設定反映のため、SSHサーバを再起動して、管理者権限を抜ける。

    # service ssh restart
    # exit
    
  6. ユーザ権限に戻ったら、PuTTY から公開鍵認証でログインできるようにする。
    前準備として puttygen.exe を起動して、File > Load private key から先ほど生成した秘密鍵(id_ecdsa.ppk)を開いて、画像の赤い囲い部分のテキスト(公開鍵)をコピーする(改行されて見えるけれど、コピーすると1行だよ!)。

    公開鍵をコピーしたらコマンド入力に戻って、公開鍵をサーバ上に登録する。

    $ cd
    $ mkdir .ssh/
    $ chmod 700 .ssh/
    $ touch .ssh/authorized_keys
    $ chmod 600 .ssh/authorized_keys
    $ vim .ssh/authorized_keys
    .. (コピーしためちゃ長い公開鍵1行分を追記して保存する。)
    ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1M...== ecdsa-key-20200912
    
    
  7. 一旦サーバから抜ける。

    $ exit
    

サーバ上の作業終わり!
次!

WSL2 + Ubuntu (後半)

ここまでの設定では WSL の仕様で Windows を再起動しても sshd が自動で立ち上がらない。
なので、以下の手順で Windows 起動時に Ubuntu の sshd を起動するように設定する。

  1. 以下の内容で C:\App\startup_for_wsl.ps1 を作成。

    startup_for_wsl.ps1
    $wsl_is_available = $FALSE
    
    while( ! $wsl_is_available )
    {
        ubuntu.exe run sudo service ssh restart
        $wsl_is_available = $?
        if( $wsl_is_available ) {
            break
        }
        else {
            Start-Sleep -Seconds 5
        }
    }
    

    ubuntu.exe に関しては Microsoft Store で

    • Ubuntu をインストールした人は ubuntu.exe のまま。
    • Ubuntu 18.04 をインストールした人は ubuntu1804.exe
    • Ubuntu 20.04 をインストールした人は ubuntu2004.exe

    に適宜読み替えてください。

  2. Winキー + Rキー でファイル名を指定して実行で「shell:startup」を開く。
    image.png

  3. 何もないところを右クリック -> 新規作成 -> ショートカット、「項目の場所」として

    %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy RemoteSigned -File C:\App\startup_for_wsl.ps1
    

    を指定して「次へ」、適当に名前を付けて「完了」。
    image.png

※ 改めて調べていたら WSL2 からはこんなことしなくても、systemd を PID 1 で動かすハックが存在するみたい

AutoHotkey

ホットキーは「左Win + 半角/全角」とする。
AutoHotkey上では

  • LWin が「左Windowsキー」
  • vkf4 が「半角/全角キー」

を意味する。

  1. 以下の内容で C:\App\AutoHotkey\MyHotkey.ahk を新規作成。

    MyHotkey.ahk
    #WinActivateForce
    #HotkeyInterval 2000
    #HotkeyModifierTimeout 100
    #MaxHotkeysPerInterval 100
    #InstallKeybdHook
    #UseHook
    
    ; ConEmu
    LWin & vkf4::
    Process, Exist, ConEmu64.exe
    if ErrorLevel <> 0
    {
        IfWinActive, ahk_class VirtualConsoleClass
        {
            Send, #{vkf4}
        }
        else
        {
            IfWinExist, ahk_class VirtualConsoleClass
            {
                WinActivate, ahk_class VirtualConsoleClass
            }
            else
            {
                Send, #{vkf4}
                WinActivate, ahk_exe ConEmu64.exe
            }
        }
    }
    else
    {
        run, C:\App\ConEmu\ConEmu64.exe, C:\App\ConEmu
    }
    return
    
    
  2. AutoHotkey 自体にスタートアップで起動する機能は無いので、タスクスケジューラで設定する。
    スタートメニューから「タスクスケジューラ」を起動する。

  3. 左ペインの「タスクスケジューラ ライブラリ」を右クリックして「新しいフォルダー(N)」で
    「App」とか適当に作成して、右ペインの「タスクの作成」をクリック。

  4. 名前に「AutoHotkey」、お好みで「最上位の特権で実行する」にチェック。

  5. トリガータブに移って、「新規」をクリック。

  6. 上部のプルダウンを「ログイン時」に変更して、「OK」をクリック。

  7. 操作タブに移って、「新規」をクリック。

  8. それぞれ以下のように入力して、「OK」 をクリック。

    • プログラム/スクリプト(P):C:\App\AutoHotkey\AutoHotkeyU64.exe
    • 引数の追加 オプション(A):C:\App\AutoHotkey\MyHotkey.ahk
    • 開始 (オプション)(T): C:\App\AutoHotkey
  9. 条件タブに移って、「AC電源で使用している場合のみ」のチェックを外す。

  10. 設定タブに移って、「タスクを停止するまでの時間」のチェックを外して、OKをクリック。

  11. あとちょっとだ!
    AutoHotkeyのタスクが保存されていることを確認して、右ペインの「実行」をクリック!

動作確認

長かった!
ここまで正しく設定されていれば、「左Winキー + 半角/全角キー」をホットキーとして ConEmu のターミナルが現れたり消えたりするはずだ!
しかも、PuTTY を通じて WSL2環境の Ubuntu のシェルが表示されているはずだ!
それに、Windows を再起動しても何もしなくてもホットキーは動作するはずだ!
ヤッター!

さいごに

スクリーンショットに写っている秘密鍵/公開鍵に関しては、破棄しており実際には使用していないのでご心配なく。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2