1. 程式人生 > 實用技巧 >VScode遠端連線Docker容器實現X11轉發

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轉發正常