VScode遠端連線Docker容器實現X11轉發
需求
一般在Windows做Linux下C++開發都會用虛擬機器解決,進階一點可能會想到VScode remote + WSL
這些方案終究沒有擺脫效能限制,對於龐大工程本地編譯動輒十分鐘以上的make嚴重影響體驗
希望利用遠端高效能Linux伺服器的多核心與大記憶體加速開發
同時除錯用到OpenCV的imshow需要打通Docker容器的X11轉發
準備
Windows
Windows這邊需要安裝X11程式,常見商業軟體Xmanager,XMing和VcXsrv這裡選擇微軟的開源VcXsrv
https://sourceforge.net/projects/vcxsrv/
安裝後進行簡單配置,保留預設Multiple windows和Display number -1
第二步選start no client
這一步比較重要,勾選Disable acccess control
完成配置可在右下角托盤內看到服務已經啟動
開啟VScode安裝Remote-SSH外掛
在PowerShell內使用ssh-keygen生成公鑰(一路回車)
複製~/.ssh/id_rsa.pub
內容
Linux
下載安裝docker並將當前使用者加入docker組
sudo apt install docker.io
sudo usermod -aG docker $USER
替換國內伺服器加速下載
sudo vim /etc/docker/daemon.json
# Add following content
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}
重啟Docker服務生效
sudo service docker restart
拉取基礎映象(以Ubuntu 18.04為例)
docker pull ubuntu:18.04
啟動容器並開啟埠對映
docker run -it -p 8022:22 --name remote ubuntu:18.04 bash
更換apt源並安裝常用工具(至少安裝openssh-server)
sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list apt update apt install -y vim git openssh-server camke autoconf build-essential libopencv-dev
確保/etc/ssh/sshd_config
中已配置X11Forwarding yes
啟動ssh服務端
/etc/init.d/ssh start
預設不允許root使用者使用密碼連線,需要建立公鑰認證檔案
cd
mkdir .ssh
chmod 700 .ssh
cd .ssh
vi authorized_keys
# paste content from Windows id_rsa.pub and save
chmod 600 authorized_keys
準備就緒,按下Ctrl+PQ斷開容器連線
連線
點選VScode左側Remote選擇新增,輸入容器所在宿主機ip與對映埠號ssh [email protected] -p 8022
選擇預設ssh配置檔案C:/Users/XXX/.ssh/config
進行更新
點選右下角Connect進行連線
等待VScod自動下載安裝code-server完成,最後在容器終端內配置X11轉發地址(修改10.0.1.51為Windows內網ip)
export DISPLAY=10.0.1.51:0.0
測試
在VScode內建terminal中安裝xeyes
apt install x11-apps
xeyes
X11轉發正常