Windows Terminal's 設定 Git Bash, SSH, Docker, Anaconda


Windows Terminal 是 Windows 10 的一個免費 APP, 可以從 Microsoft Store 下載取得.

它自動認得 WSL 裡安裝的 Distro, 看起來相當不錯. 不過卻少了 git for windows 的 Git Bash, 和 SSH 的設定. 以下是如何設定讓它也可以直接啟動 Git Bash, 直接用 SSH 連上主機, 連上 Docker Container, 進入 Anaconda Prompt.

加入 Git Bash (git for windows) 設定


Update

從 v2.31.1(2021/03/27) 開始 git for windows 提供安裝選項支援與 Windows Terminal 整合的功能(2021/09/20). 其設定內容也變得非常簡單, 如下:

{
    "guid": "{2ece5bfe-50ed-5f3a-ab87-5cd4baafed2b}",
    "hidden": false,
    "name": "Git Bash",
    "source": "Git"
}

如果你發現安裝完成後, Windows Terminal 的設定裡沒有出現 "Git Bash" (可能是原因不明的 bug), 可以直接把上列設定依照下面的說明貼在 Windows Terminal 設定裡就會出現了. 下圖為 v2.33.0.2 的安裝選項畫面.

Support of Git Bash Profile

Git 安裝時可以選擇加裝 Windows Terminal 的整合設定.

  1. 使用快速鍵 Ctrl+, 開啟設定, 或者由 V 圖示 --> 設定 進入設定.(註一)
    這裡建議大家安裝 VS Code, 並將 .json 檔預設的 開啟檔案 程式設定為 VS code. 如果已經被其他程式註冊了, 也可以經由變更 .json 檔的預設 開啟檔案 的程式將它改成使用 VS Code 來開啟. (點選任意的 .json 檔, 按下滑鼠右鍵, 再點選 內容(R) 即可開啟變更設定頁面).
  2. 註一: 新版本 (v 1.7.1033.0) 已經預設成使用圖形介面來進行設定了. 不過我們還是可以經由設定畫面左下方開啟 JSON 檔案 來開啟設定檔. 設定檔路徑在: "%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json", 即使用者家目錄下的 AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json.

    Windows Terminal Settings

    進入 Windows Terminal 設定.

    Open Windows Terminal Settings.json

    開啟 Windows Terminal 設定檔. (version ≥ 1.7.1033.0)

  3. 將以下設定加到適當的設定段中 (你可以發現其他的較短的設定段落, 例如: 'Windows PowerShell' powershell.exe, '命令提示字元' cmd.exe, ... 等字眼). 插入後記得將 C:/Program Files/Git 改成你自己安裝 git for windows 的地方 (一共有二處)(註二)
  4. {   // 請將 'C:/Program Files/Git' 換成你安裝 'git for windows' 的路徑
        "name": "Git Bash",
        "tabTitle": "Git Bash",
        "commandline": "C:/Program Files/Git/bin/bash.exe --login -i",
        "startingDirectory": "%USERPROFILE%",
        "fontFace": "Consolas",
        "fontSize": 14,
        "acrylicOpacity": 0.95,
        "closeOnExit": true,
        "colorScheme": "Campbell",
        "cursorColor": "#FFFFFF",
        "cursorShape": "bar",
        "historySize": 9001,
        "icon": "C:/Program Files/Git/mingw64/share/git/git-for-windows.ico",
        "padding": "0, 0, 0, 0",
        "snapOnInput": true,
        "useAcrylic": true
    },
    
    Windows Termainl-Git Bash-2.png

    插入 git bash 設定

    註二: 圖片4和上面的設定有一點小差異, 這是因為已經不需要 "guid" 這一項設定了, stackoverflow 上有人的回答裡有 "guid" (上面的貼圖裡也有). 但是後來實測時, 發現是可以不要的. 應該是已經取消為必要項目的設定了吧?!

  5. 存檔, 重開 Windows Terminal 即可.
  6. 選項設定之一:
    當我們直接用 windows terminal 開啟 git-bash 會產生另一個令人不悅的狀況: 錯誤提醒音從 beep 變成整個螢幕一閃了, 如果你很在意這個改變可以在 git-bash 視窗裡執行下列指令, 然後重開 git-bash 即可.
    echo "set bell-style none" >> ~/.inputrc
    
    或者是在 Windows CMD 視窗裡, 以下指令效果也一樣:
    echo set bell-style none >> %USERPROFILE%\.inputrc
    
    bell-style 的值可以設定成 none, audible, visible 三個其中之一. 不過目前 (Windows Terminal v1.14) 實測是設成 audible 不 work. 在 profile 裡加了 "bellStyle":"audible" 設定也還是沒聲音 (這個 bug 會在 1.15 版修正. 因為使用 Windows Terminal Preview (v1.15) 是可以正常運作).
  7. 選項設定之二:
    我印象中, git-bash 預設在輸入檔案路徑時, 只要輸入少數幾個字元, 再按下 Tab 鍵就會不分大小寫幫們找到最相近的路徑, 後來 (不知是從哪一版開始) 卻是會分大小寫, 必需大小寫一致才行, 讓我這個被慣壞了的老人家不知如何是好, 好在這個也是可以設定的. 如果你也是很在意這個改變, 可以在 git-bash 視窗裡執行下列指令, 然後重開 git-bash 即可.
    echo "set completion-ignore-case On" >> ~/.inputrc
    
    或者是在 Windows CMD 視窗裡, 以下指令效果也一樣:
    echo set completion-ignore-case On >> %USERPROFILE%\.inputrc
    

加碼: Git Bash Here 和 Windows Terminal 的整合

Update(2022/03/09)

Git for windows 在檔案總管裡整合了二項滑鼠右鍵功能: Git Bash HereGit GUI Here.

我們也可以像 Git Bash Here 那樣新增一個 Git Bash Here in WinTerm (或者將 Git Bash Here 修改成在 Windows Terminal 裡打開). 這項設定我們要使用登錄編輯程式 (regedit). 請各位打開它並且找到 HKEY_CLASSES_ROOT\Directory 這個位置. 接著我們一共要新增二組機碼.

  • 一組在 shell 底下: 它管的是在檔案總管視窗裡, 滑鼠點選了一個目錄時的右鍵選單.
  • 一組在 background\shell 底下: 它管的是在檔案總管視窗裡, 滑鼠點選在目前目錄的空白處時的右鍵選單.

二組操作都一樣, 但貼上的指令內容有點小差異. 先在左邊視窗, 點選第一組機碼 shell.

  1. 點選該機碼, 按滑鼠右鍵選單, 新增(N)一組機碼 (叫 Git_WinTerm 或者自行命名).
  2. 點選新增的Git_WinTerm機碼, 在右邊視窗裡的(預設值)雙擊滑鼠, 修改其內容值為 Git &Bash Here in WT (&符號是為了方便按鍵操作的快捷鍵, 所以出現滑鼠右鍵選單時, 按一下B就會選到該功能).
  3. 在右邊視窗空白處, 再按滑鼠右鍵新增(N)一個字串值(S), 名稱為Icon, 內容是 C:\Program Files\Git\git-bash.exe. 如果你的 git for windows 是安裝到自訂位置, 記得把 C:\Program Files\Git 改成自訂位置.
  4. 再次點選新增的Git_WinTerm機碼, 按滑鼠右鍵選單, 新增(N)一組機碼名為command.
  5. 點選新增的command機碼, 在右邊視窗裡的(預設值)雙擊滑鼠, 修改其內容值為 wt -w 0 nt -d "%1" -p "Git Bash".

OK, 完成一組了. 再來在左邊視窗, 點選第二組機碼 backgriund\shell. 重複操作一次, 直最後一步內容值為 wt -w 0 nt -d "%v." -p "Git Bash".

請注意字串最後的 -p "Git Bash" 是指定開啟哪一個 Windows Terminal 的 Profile. 所以如果你在 Windows Terminal 的 Git Bash 設定是自己手動加上去的, 要注意一下二邊的 Profile Name 是否一致.

哦! 不知道操作對了沒? 好吧, 直接提供 registry 內容及下載點好了.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Git_WinTerm]
"Icon"="C:\\Program Files\\Git\\git-bash.exe"
@="Git &Bash Here in WT"

[HKEY_CLASSES_ROOT\Directory\shell\Git_WinTerm\command]
@="wt -w 0 nt -d \"%1\" -p \"Git Bash\""

[HKEY_CLASSES_ROOT\Directory\Background\shell\Git_WinTerm]
@="Git &Bash Here in WT"
"Icon"="C:\\Program Files\\Git\\git-bash.exe"

[HKEY_CLASSES_ROOT\Directory\Background\shell\Git_WinTerm\command]
@="wt -w 0 nt -d \"%v.\" -p \"Git Bash\""

加入 git for windows SDK (MSYS2) 設定


雖然新版的 git for windows 安裝時已經提供選項可以加裝 Windows Terminal 的整合設定. 不過 git for windows SDK 卻是沒有這個選項. 它的設定我們要參考一下 MSYS2 的終端機設定文件. 不然開出來的終端機是不會整合到 Windows Terminal 的視窗裡的. 以下是我使用的設定, 要抄的話記得把路徑 D:/git-sdk-64 改成你自己的安裝的路徑.

{   // 請將 'D:/git-sdk-64' 換成你安裝 'git for windows SDK' 的路徑
    "commandline": "D:/git-sdk-64/msys2_shell.cmd -defterm -here -no-start -mingw64",
    "font": 
    {
        "face": "Consolas"
    },
    "guid": "{17da3cac-b318-431e-8a3e-7fcdefe6d114}",
    "hidden": false,
    "icon": "D:/git-sdk-64/mingw64.ico",
    "name": "MINGW64 / MSYS2",
    "startingDirectory": "%USERPROFILE%"
},

加入 SSH 設定


Windows 預設有安裝 OpenSSH, 我們可以直接輸入 ssh 使用它.

它會在你的家目錄下建立一個名為 .ssh 的目錄, 裡面會有二個檔案.

  • known_hosts
    裡面有 ssh 曾經連過線的主機列表及設定. 除了刪除一些臨時測試的主機一般我們不會動這個檔案. 或者是發生類似下面的錯誤畫面:
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
    Someone could be eavesdropping on you right now (man-in-the-middle attack)!
    It is also possible that a host key has just been changed.
    The fingerprint for the ECDSA key sent by the remote host is
    SHA256:KWuQBLo2qjB18kY1iLl58wW1b0pl2T3vPz9aj6WDmHM.
    Please contact your system administrator.
    Add correct host key in /c/Users/user001/.ssh/known_hosts to get rid of this message.
    Offending ECDSA key in /c/Users/user001/.ssh/known_hosts:3
    ECDSA host key for 192.168.33.10 has changed and you have requested strict checking.
    Host key verification failed.
    
    這個訊息是說遠端主機的金鑰改變了, 這個平時是不應該發生的, 不過如果是還在建置/測試/設定中的主機那就另當別論了. 我們可以直接把它指出來的那一行刪除, 即可解決這個問題.
  • config
    裡面是主機的相關設定, 如: ip 地址, 連線的 port 號碼, 使用哪一個帳號等等
    • Host: 輸入的是我們在 ssh 指令輸入的主機代號 (不一定是主機域名, ip 也可以, 甚至同一部主機我們需要以不同的帳號連進去時, 也可以自己取一個代號)
    • User: 則指定連線這部主機時用什麼用戶帳號.
    • Port: 指定這部主機的 SSH port 號碼.
    • HostName: 則是輸入 DNS 域名, 或者直接輸入 ip 地址 (沒有 DNS 可以幫你 name 轉 ip 時. 例如: 區域網路 (LAN) 中的主機或者自己肚子裡的 VM).
    • IdentityFile: 指定私鑰檔 (private key) 的位置.

註三: 需要注意的是: 如果你在輸入 ssh 指令時, 偶而會用代號, 偶而又會用 ip (都沒有輸入 '用戶帳號') 那麼應該在設定檔中, 輸入二個設定. 如: 下面的例子裡的 第 2 和第 3 組設定.

.ssh/config 範例檔內容如下:

Host myVMS
  HostName 192.168.36.130
  User jackting

Host 192.168.33.10
  User vagrant

Host jupyter
  HostName 192.168.33.10
  User vagrant

接著是這一段的的重點: 如何設定 Windows Terminal 直接用 SSH 連到主機上.

{
    "name": "SSH Jupyter",
    "tabTitle": "vBox-Jupyter",
    "commandline": "ssh 192.168.33.10",
    "fontFace": "Consolas",
    "fontSize": 14,
    "icon": "%USERPROFILE%/Pictures/gnome_fs_ssh.ico"
},

  • "icon": 麻煩你自己上網找一個免費的下載下來用.
  • "commandline": ssh 後面的主機你可以用 ip, 或者是 sshconfig 設定檔裡的代號.
    • 如果對方用的是私鑰 (private key) 則可以在 config 檔裡登載私鑰檔的路徑.
    • 當然也可以直接在指令裡插入
      -i path/to/private_key_file
    • 例如: vagrant 開設出來的 VM privatekey 路徑是 .vagrant/machines/default/virtualbox/private_key"commandline" 的內容就會是
      "commandline": "ssh -i C:/Works/VM_A/.vagrant/machines/default/virtualbox/private_key 192.168.33.10"
      
      或者不改指令, 直接在設定檔裡加入指定私鑰檔的路徑.
      Host 192.168.33.10
        User vagrant
        IdentityFile "C:/Works/VM_A/.vagrant/machines/default/virtualbox/private_key"
      
      Host jupyter
        HostName 192.168.33.10
        User vagrant
        IdentityFile "C:/Works/VM_A/.vagrant/machines/default/virtualbox/private_key"
      

加入 Docker Container 連線設定


即然 Windows Terminal 自動認得 WSL 裡的 Distro 設定, 那...連線到 Docker 的 Container 應該也不是什麼太難的事.

{
    "name": "myAIlab bash",
    "tabTitle": "docker-Jupyterlab",
    "commandline": "docker exec -it myAIlab bash",
    "fontFace": "Consolas",
    "fontSize": 14,
    "icon": "C:/Program Files/Docker/Docker/resources/ddvp.ico"
},
  • icon 檔是 Docker Desktop for Windows 內建的.
  • 你只要把 commandline 裡的 myAIlab 換成自己要連上去的 docker container name 即可.

加入 Anaconda Command Prompt 設定


Anaconda 安裝好之後, Windows 的開始選單上有一個名為 Anaconda Prompt (Anaconda3) 的啟動連結. 它其實是啟動命令提示字元並執行 位於 Anaconda 安裝路徑下的 Scripts\activate.bat. 所以我們可以自行新增設定, 讓 Windows Terminal 模仿 Anaconda Prompt (Anaconda3) 的行為.

  1. 進入 WT 設定頁, 按下左邊最下方的+ 新增設定檔, 複製一份 "Command Prompt" 的設定.
  2. 名稱: 將它更改為 "Anaconda (base)" (或者任意你喜歡的名字)
  3. 命令列: 原設定應為 %SystemRoot%\System32\cmd.exe, 請在它的後面附加上
    • 系統安裝:
      /K %ALLUSERSPROFILE%\Anaconda3\Script\activate.bat
    • 個人安裝:
      /K %USERPROFILE%\Anaconda3\Scripts\activate.bat
  4. 圖示: 將圖示換成 Anaconda 提供的綠色圓形圖示.
    • 系統安裝:
      %ALLUSERSPROFILE%\Anaconda3\Menu\anaconda-navigator.ico
    • 個人安裝:
      %USERPROFILE%\Anaconda3\Menu\anaconda-navigator.ico
  5. 啟動時載入路徑: 原設定應為 %USERPROFILE%, 可以依自己的需要修改.

如果你在 Anaconda 裡新增了虛擬環境, 想要一開啟就是那個虛擬環境? 則在命令列的內容裡, 把虛擬環境名稱附加在最後面. 例如:
%SystemRoot%\System32\cmd.exe /k %ALLUSERSPROFILE%\Anaconda3\Script\activate.bat myenv

Anaconda WT integration

Windows Terminal 與 Anaconda Prompt (Anaconda3) 的整合設定.

修改預設的 Terminal session


Windows Terminal 原本預設的 terminal session 是 powershell

    "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",

將原本預設 powershell 改成 cmd, 如下:

    "defaultProfile": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",

defaultProfile 的設定值是 profile 的 guid, 如果沒有 guid 也可以改用 profile 的 name, 例如前面新增加的 git-bash 設定.

    "defaultProfile": "Git Bash",

arrow
arrow

    MagicJackTing 發表在 痞客邦 留言(2) 人氣()