Windows Subsystem for Linux(简称WSL)是一个为在Windows10上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层。
安装 WSL
要安装Linux需要先启用WSL。
启用
打开: 控制面板 -> 程序和功能 -> 启用或关闭windows功能
勾选“适用于Linux的Windows子系统”项
安装
打开Microsoft store,搜索Linux,选择Ubuntu,并安装。
WSL文件位置
WSL的Linux系统中,所有硬盘分区挂载到/mnt
下。
Windows中WSL文件的位置:C:\Users\用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu***\LocalState\rootfs
WSL配置
更改源
Ubuntu默认的apt源是国外的源,可换成国内的源(如ali等)以加快更新。
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
vi /etc/apt/sources.list // 修改,设定为国内源
lsb_release -a
// 可查看具体安装的Linux版本
sudo passwd root
// 设定root密码
更新并升级
sudo apt update
sudo apt upgrade
开发环境
安装所需的开发工具
sudo apt-get update
sudo apt-get install cmake gcc clang gdb build-essential
新建“clion_wsl_env.sh”,并运行以设定SSH环境:
sudo chmod +x clion_wsl_env.sh
./clion_wsl_env.sh
脚本内容
#!/bin/bash
set -e
SSHD_LISTEN_ADDRESS=0.0.0.0
SSHD_PORT=22
SSHD_FILE=/etc/ssh/sshd_config
SUDOERS_FILE=/etc/sudoers
# 0. update package lists
sudo apt-get update
# 0.1. reinstall sshd (workaround for initial version of WSL)
sudo apt remove -y --purge openssh-server
sudo apt install -y openssh-server
# 0.2. install basic dependencies
sudo apt install -y cmake gcc clang gdb valgrind build-essential
# 1.1. configure sshd
sudo cp $SSHD_FILE ${SSHD_FILE}.`date '+%Y-%m-%d_%H-%M-%S'`.back
sudo sed -i '/^Port/ d' $SSHD_FILE
sudo sed -i '/^ListenAddress/ d' $SSHD_FILE
sudo sed -i '/^UsePrivilegeSeparation/ d' $SSHD_FILE
sudo sed -i '/^PasswordAuthentication/ d' $SSHD_FILE
echo "# configured by CLion" | sudo tee -a $SSHD_FILE
echo "ListenAddress ${SSHD_LISTEN_ADDRESS}" | sudo tee -a $SSHD_FILE
echo "Port ${SSHD_PORT}" | sudo tee -a $SSHD_FILE
echo "UsePrivilegeSeparation no" | sudo tee -a $SSHD_FILE
echo "PasswordAuthentication yes" | sudo tee -a $SSHD_FILE
# 1.2. apply new settings
sudo service ssh --full-restart
# 2. autostart: run sshd
sed -i '/^sudo service ssh --full-restart/ d' ~/.bashrc
echo "%sudo ALL=(ALL) NOPASSWD: /usr/sbin/service ssh --full-restart" | sudo tee -a $SUDOERS_FILE
cat << 'EOF' >> ~/.bashrc
sshd_status=$(service ssh status)
if [[ $sshd_status = *"is not running"* ]]; then
sudo service ssh --full-restart
fi
EOF
# summary: SSHD config info
echo
echo "SSH server parameters ($SSHD_FILE):"
echo "ListenAddress ${SSHD_LISTEN_ADDRESS}"
echo "Port ${SSHD_PORT}"
echo "UsePrivilegeSeparation no"
echo "PasswordAuthentication yes"
测试SSH(username为安装Ubuntu时设定的用户名):
ssh username@localhost -p22
若使用的是root用户(SSH默认禁止root登录),需要在/etc/ssh/sshd_config
中添加以下配置:
PermitRootLogin yes
StrictModes yes
手动配置SSH
也可手动设定SSH。
ssh配置
配置ssh以便远程登录(默认的没有ssh_host_key,无法启动;需要先卸载,安装新的ssh):
sudo apt remove -y --purge openssh-server
sudo apt install -y openssh-server
sudo vi /etc/ssh/sshd_config,修改
PasswordAuthentication yes # 允许用户名密码方式登录
PermitRootLogin yes
sudo service ssh restart
设置ssh开机启动:
sudo systemctl enable ssh
ssh连接
MobaXterm是一种功能丰富、体积小巧且有免费版的SSH客户端软件。已自带WSL功能:
- 添加会话
- 选择WSL,并在‘Basic WSL settings’中设定Linux的发行版本和起始目录;
- 设定好后,双击即可启动。
在‘Advanced WSL Settings’中可以设定启动时执行的命令,如:sudo service ssh start
。
Clion远程调试
为使Clion可方便地远程联调WSL,需要先在WSL上开启SSH,并安装对应开发环境。
Ubuntu上安装开发环境
安装C++依赖环境
sudo apt install -y cmake gcc clang gdb build-essential
解决Unable to Correct Problems ‘You have Held Broken Packages’(安装Clang失败):
- aptitude why-not clang // 给出错误原因
- sudo aptitude install clang // 会给出解决方案,第一个方案选n,采用第二个方案,成功
Clion配置
配置SSH
File - Seetings 中 ‘Build,Execution…’ - ‘ToolChain’ 新增Remote Host Ubuntu:
在Credentials中配置SSH登录信息(推荐使用root账户,避免权限问题),其他让其自动检测
配置同步信息:
Tools - Deplyment - Configuration中配置:
Connection:
Type: SFTP
SSH: 选用前面配置的
RootPath:/ // 此处要填写根目录,否则会影响后面Deployment目录,然后导致CMake失败
Mappings:
Local Path: D:/project/svn/src // 工程目录
Deployment Path:/project/svn/src // 工程在Linux下的目录
完成后 Tools - Resync with remote host 进行同步
Terminal配置
在 Settings | Tools | Terminal ,修改“application settings”内的“shell path”为:
"C:\Users\username\AppData\Local\Microsoft\WindowsApps\ubuntu.exe" run
CMakeLists示例
示例程序为:
- 包含两个子目录json和glog
- 引用jansson和glog库(其头文件存放在lib目录下)
其对应的CMakeLists为:
cmake_minimum_required(VERSION 3.16)
set(BINNAME "cplusLearning")
PROJECT(${BINNAME})
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
MESSAGE(STATUS "BUILD Debug")
else ()
MESSAGE(STATUS "BUILD Release")
endif ()
#set(CMAKE_CXX_STANDARD 11)
# Compile options
add_compile_options(-std=c++11 -pthread -O2 -Wl,-Bsymbolic)
# Compile Control Macro
add_definitions(-DX86_64_PLATFROM)
FILE(GLOB SRC_LIST
"${CMAKE_SOURCE_DIR}/*.cpp"
"${CMAKE_SOURCE_DIR}/../thirdLib/mongoose-7.x/*.c"
)
INCLUDE_DIRECTORIES(
../thirdLib/spdlog-1.x/include
../thirdLib/mongoose-7.x
../thirdLib/json-3.10.x/single_include
../thirdLib/yaml-cpp-master/include
)
LINK_DIRECTORIES(
# /opt/jansson/lib
# /opt/glog/lib
)
#LINK_LIBRARIES(jansson)
#LINK_LIBRARIES(glog)
ADD_EXECUTABLE(${BINNAME} ${SRC_LIST})
set(EXECUTABLE_OUTPUT_PATH ./bin)
#TARGET_LINK_LIBRARIES(${BINNAME} jansson glog)
TARGET_LINK_LIBRARIES(${BINNAME})
其他
1、VMware虚拟机大小写无法切换(CapsLock键作用失效)解决方法:
修改虚拟机vmx文件(如Ubuntu64-V20.vmx),用notepad打开,然后添加:
mks.win32.useInjectedMagic = “FALSE”