基于WSL2的ubuntu(Windows 子系统)安装及开发环境搭建

2023-11-13

  WSL 是 Windows Subsystem for Linux 的缩写,译为适用于Linux 的 windows 子系统。使用WSL让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。如果你是Windows用户的话,觉得使用Linux很不方便,那么这篇文章可以给你提供一个还算舒适的Windows10下Linux开发的环境,并且不需要多高的配置,也可以很顺畅的使用。

        接下来我们就开始配置 Windows 终端 & WSL 开发环境。

1 系统要求

  • Windows 版本大于1903,运行 win+R 后执行winver进行确认。
  • 支持 Hyper-V 虚拟化。

         本机配置:

              Operating System  : Windows 11 Professional

              Operating System  : Chinese (Simplified) (Regional Setting: Chinese (Simplified))

  Operating system version  : 22621.1848
                           Processor  :12th Gen Intel(R) Core(TM) i7-12700   2.10 GHz
                              Memory  : 32.0 GB RAM

                          Card name  : NVIDIA GeForce GTX 3080

2 设置 WSL

· 开启window10开发者模式

        设置->更新与安全->开发者选项->开发人员模式

· 启用或关闭windows功能

        1) 打开「控制面板」>「程序」>「启用或关闭 Windows 功能 」,然后在「适用于 Linux 的 Windows 子系统」选项前面打勾。

        2)  使用快捷键 Win+s 打开搜索功能,在搜索框中输入关键字 Windows 功能,可以快速打开「启用或关闭 Windows 功能」。

· 下载 Linux 内核更新包

        适用于 x64 计算机的 WSL2 Linux 内核更新包

  1. 运行上一步中下载的更新包。 (双击以运行 - 系统将提示你提供提升的权限,选择“是”以批准此安装。)

        安装完成后,请继续执行下一步 - 在安装新的 Linux 分发时,将 WSL 2 设置为默认版本。 (如果希望将新的 Linux 安装设置为 WSL 1,请跳过此步骤。)

· 安装 WSL 发行版

        本文以 Ubuntu 20.04 LTS为例,之后的所有内容也是基于 WSL Ubuntu 编写。

        重启电脑,然后打开Microsoft Store,搜索Ubuntu并选择对应的版本安装。安装完成后打开,设置初始的用户名和密码即可。

安装在非C盘

        首先在目标盘创建一个文件夹,比如D:\Linux ,进到这个文件夹下载ubuntu20.04:

Invoke-WebRequest -Uri https://wsldownload.azureedge.net/Ubuntu_2004.2020.424.0_x64.appx -OutFile Ubuntu20.04.appx -UseBasicParsing

 然后执行如下命令:

Rename-Item .\Ubuntu20.04.appx Ubuntu.zip
Expand-Archive .\Ubuntu.zip -Verbose
cd .\Ubuntu\
.\ubuntu2004.exe

        可以在powershell里面 , 看看自己安装的版本:

        

wsl -l -v

3 安装GPU环境

        在英伟达下载与安装支持WSL的GPU驱动。

        按照自己的GPU产品选择对应的驱动(该步骤需要Nvidia账户),下载后安装即可。·

        无需在 WSL 中安装 Linux 显示驱动程序,Windows 显示驱动程序将同时安装本机 Windows 和 WSL 支持的常规驱动程序组件。

        1)安装cuda toolkit

        进入官网: https://developer.nvidia.com/cuda-toolkit-archive,选择自己需要的版本。

wget https://developer.download.nvidia.com/compute/cuda/11.5.0/local_installers/cuda_11.5.0_495.29.05_linux.run
sudo sh cuda_11.5.0_495.29.05_linux.run

        安装完成后显示:

$ sudo sh cuda_11.5.0_495.29.05_linux.run
[sudo] password for ubuntu2004:
===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-11.5/
Samples:  Installed in /home/ubuntu2004/

Please make sure that
 -   PATH includes /usr/local/cuda-11.5/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-11.5/lib64, or, add /usr/local/cuda-11.5/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-11.5/bin
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 495.00 is required for CUDA 11.5 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
    sudo <CudaInstaller>.run --silent --driver

Logfile is /var/log/cuda-installer.log

        安装完成后,在~/.bashrc中加入环境变量:

export PATH=/usr/local/cuda-11.5/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.5/lib64:$LD_LIBRARY_PATH

        输出如下命令,立即生效。

source ~/.bashrc

        2)  安装cuDNN

        进入官网:https://developer.nvidia.com/zh-cn/cudnn,下载选择对应版本,点击 cuDNN Library for Linux(x86_64) 下载,解压:

$ tar -zxvf cudnn-11.5-linux-x64-v8.3.0.98.tgz
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-11.5/lib64/
sudo cp cuda/include/cudnn.h /usr/local/cuda-11.5/include/
sudo cp cuda/include/cudnn_version.h /usr/local/cuda-11.5/include/ 
sudo chmod a+r /usr/local/cuda-11.5/include/cudnn.h 
sudo chmod a+r /usr/local/cuda-11.5/lib64/libcudnn*

4 安装图形界面

        要想使用Linux的图形用户界面通常有两种方法,一种是使用X-Windows安装使用图形化界面,另一种是通过本机远程桌面连接。

        这里以第二种方法为例

        1)安装xorg

sudo apt-get install xorg

        2)安装xfce4(运行在类Unix操作系统上,提供轻量级桌面环境)

sudo apt-get install xfce4

        3)安装xrdp(一种开源的远程桌面协议(RDP)服务器)

sudo apt-get install xrdp

        4)配置xrdp(配置端口)

sudo sed -i 's/port=3389/port=3390/g' /etc/xrdp/xrdp.ini

        5)向.xsession中写入xfce4-session

sudo echo xfce4-session >~/.xsession

        6)重启xrdp服务

sudo service xrdp restart

        在Cortana中搜索远程桌面连接,点击进入,计算机栏输入【主机IP:端口】,用户名栏输入子系统用户名,点击连接。

        xrdp每次电脑重启后都需要命令行sudo service xrdp restart后远程连接。

        wsl2在windows类似于文件夹,可以直接操作。

5 Win下的PyCharm调用WSL2的python环境

        Settings->Project: Your Project Name->Project Interpreter->右边齿轮->Add,选择WSL,添加Python解释器路径

        同理,在wsl中也可以使用win的Python环境。

参考:

        搭建Pycharm+Wsl深度学习平台 | Zihang Zhang (ustczhzhang.github.io)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于WSL2的ubuntu(Windows 子系统)安装及开发环境搭建 的相关文章

  • %config(noreplace) 文件上出现意外的 RPM 冲突

    我正在创建我自己的RPM using rpmbuild My RPM 包含配置文件哪个应该永远不会被覆盖 即使 RPM 包含这些配置文件的新版本 为了存档这个 我用以下标签标记了它们 config noreplace opt mypacka
  • 如何获取 bash 中从 Ping 接收到的数据包的百分比?

    当 ping 主机时 我希望输出仅显示收到的数据包 已发送 5 个 的百分比 我想我需要使用grep不知怎的 但我不知道如何 我是 bash 编程的新手 这是我所在的地方 ping c 5 q host grep grep 中应该包含什么
  • 如何清理 Runtime.exec() 中使用的用户输入?

    我需要通过命令行调用自定义脚本 这些脚本需要很少的参数并在 Linux 机器上调用 当前版本容易出现各种shell注入 如何清理用户给出的参数 参数包括登录名和路径 Unix 或 Windows 路径 用户应该能够输入任何可能的路径 该路径
  • _dl_runtime_resolve -- 共享对象何时加载到内存中?

    我们有一个对性能要求很高的消息处理系统 最近我们注意到第一条消息比后续消息花费的时间要长很多倍 当它通过我们的系统时 会发生大量转换和消息增强 其中大部分是通过外部库完成的 我刚刚描述了这个问题 使用 callgrind 将仅一条消息的 运
  • 如何更改 Kubernetes 中的文件系统观察程序限制 (fs.inotify.max_user_watches)

    我在用着pm2 https github com Unitech pm2查看保存我的应用程序服务器的 NodeJS 程序源代码的目录 该程序在 Kubernetes 集群中运行 但是 我收到此错误 ENOSPC System limit f
  • shell中基于正则表达式的颜色突出显示输出

    我想知道是否可以用颜色突出显示与某些字符串匹配的 shell 命令的输出 例如 如果我运行 myCommand 输出如下 gt myCommand DEBUG foo bar INFO bla bla ERROR yak yak 我希望所有
  • 如何修复 /usr/bin/env 参数处理?

    我遇到了一个奇怪的问题 usr bin env 我设计了一个简单的脚本来显示问题 该脚本使用 Ruby 编写 但使用 Python 编写的类似脚本也会发生同样的情况 这是脚本 usr bin env ruby p ARGV 还有一个没有 u
  • Tk 初始化失败:无显示名称且无 $DISPLAY 环境变量

    我试图从 Ubuntu 终端调用 Centos 服务器上的工具 我收到以下错误 Tk 初始化失败 没有显示名称 也没有 DISPLAY 环境变量 请帮我解决这个问题 提前致谢 连接到你的 CentOS 机器ssh Y其中 每man ssh
  • 有没有办法改变vim的默认模式

    有谁知道如何更改vim的默认模式 它的默认模式是命令模式 但是我可以将其更改为插入模式吗 只需将以下行添加到您的 vimrc 中 start Vim s default mode will be changed to Insert mode
  • BlueZ D-Bus C,应用 BLE

    我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信 我的应用程序将用 C 语言编写 并打算在 Linux 下工作 是否有通过 C 中的 D Bus 使用 BlueZ 的教程或示例 此应用程序的目的是从 BLE 中的文件发送数据 你能
  • 在 shell 脚本中将脚本目录更改为用户的 homedir

    在我的 bash 脚本中 我需要将当前目录更改为用户的主目录 如果我想更改为用户的foo主目录 从命令行我可以执行以下操作 cd foo 效果很好 但是当我从script它告诉我 bar sh line 4 cd foo No such f
  • 无法使用 tar -cvpzf 解压完整目录

    把我的头敲在这上面 I used tar cvpzf file tar gz压缩一个完整的目录 我将文件移动到另一台服务器 并尝试解压缩复制存档的目录 无法使其发挥作用 bash 3 2 tar xvpzf news tar gz tar
  • 在linux中使用setcap [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 要将 cap net raw 功能添加到 例如 bin ping 我们使用以下命令 setcap cap net raw ep bin ping ep
  • gnutls_handshake() 失败:握手失败 GIT

    一切都工作正常 但突然我收到错误 致命 无法访问 https 电子邮件受保护 cdn cgi l email protection name repo name git gnutls handshake 失败 握手失败 我在我的计算机和 E
  • 第一次如何配置postgresql?

    我刚刚安装了 postgresql 并在安装过程中指定了密码 x 当我尝试做的时候createdb并指定我收到消息的任何密码 createdb 无法连接到数据库 postgres 致命 用户密码身份验证失败 同样适用于createuser
  • AMD OpenCL 在 Linux 上工作所需的最小必要文件子集是什么?

    我已经使用 buildroot 构建了 Linux 内核 我已将开源 amdgpu 驱动程序和所需的固件合并到其中 驱动程序很好 检测 GPU 模式设置运行良好 调整 小文本 的分辨率 启动后会显示命令行 现在我需要运行 OpenCL 程序
  • 如何使用 bash 粘贴来自单独文件的列?

    我想用分隔符 合并不同的列表 第一个列表有 2 个单词 cat first one who 第二个列表有 10000 个单词 cat second languages more simple advanced home expert tes
  • 导出多个 LD_LIBRARY_PATH 的正确方法

    对于linux的使用 我是一个新手 根据有关我的项目的指南 我必须多次导出 LD LIBRARY PATH 并且我不确定是否不覆盖它们 Cupti Tensorflow CUDAit export LD LIBRARY PATH LD LI
  • 使用inotify监控文件

    我正在使用 inotify 来监视本地文件 例如使用 root temp inotify add watch fd root temp mask 删除该文件后 程序将被阻止read fd buf bufSize 功能 即使我创建一个新的 r
  • 如何像C99一样使用make和编译?

    我正在尝试使用 Makefile 编译 Linux 内核模块 obj m main o all make C lib modules shell uname r build M PWD modules clean make C lib mo

随机推荐

  • 使用WTGAHRS2(JY-GPSIMU)在ROS中读取数据并发布话题

    目录 IMU简介 驱动程序 IMU串口通信协议 程序 效果 IMU简介 十轴惯性导航传感器WTGAHRS2传感器集成高精度的陀螺仪 加速度计 地磁场传感器 GPS 模块 采用高性能的微处理器和先进的动力学解算与卡尔曼动态滤波算法 能够快速求
  • nodejs性能优化——多进程

    1 引言 现在在准备毕设 打算还是使用nodejs作为后端 遇到了一些知识上的瓶颈 主要是想要写出一个高性能点的爬虫 由于每次请求的http数量上万 经常挂了 要么是他人的服务器终止了连接 要么是node经不起密集CPU 毕竟请求完成之后还
  • MySQL(DDL)

    1 了解主流的数据库和数据库分类 1 1数据库概念 数据库 按照数据结构来组织 存储和管理数据的一种建立在计算机存储设备上的仓库 数据库的优势 1 可以持久化存储大量的数据 方便我们进行检索 2 可以保证数据的安全和数据的一致性 事物 3
  • printk的使用

    参考文章 https blog csdn net wwwlyj123321 article details 88422640 https blog csdn net m0 46170433 article details 105263694
  • FTP-----局域网内部远程桌面

    此文包含详细的图文教程 有疑问评论区留言 博主第一时间解决 目录 一 被远程桌面的电脑 1 开启远程权限 2 添加账户 有本地账户跳过这步 3 帐号隶属于 远程桌面 4 帐号隶属于 本地用户组 二 本地电脑连接远程桌面 前提条件 1 两台电
  • buffer_head数据结构

    内核版本 5 9 0 数据结构 Historically a buffer head was used to map a single block within a page and of course as the unit of I O
  • Spring boot new对象,通过上下文实例化对象

    import org springframework beans BeansException import org springframework beans factory NoSuchBeanDefinitionException i
  • 类的设计与实现 设计一个游戏的某个简单过程

    大作业1 类的设计与实现 一 实验目的 掌握类的设计与实现 了解如何根据描述发现类及其成员 具备初步的面向对象分析与设计能力 二 实验内容 请选择一个你所熟悉的游戏 分析其中的某个场景所涉及的类 及其各个类的属性和行为 完成类的定义 请选择
  • Java基础学习之函数式编程Predicate接口(JDK8)

    前言 今天继续来学习函数式编程接口之Predicate接口 1 上源码 package javax persistence criteria import java util List public interface Predicate
  • MyEclipse 服务器Tomcat v8.5无法在45秒内启动

    目录 前言 一 问题描述 二 解决方案 1 图形界面修改 2 配置文件修改 总结 前言 大家在使用 MyEclipse 开发时有遇到过 Tomcat 无法在45秒内启动的问题吗 一 问题描述 由于工作需要 要在 myeclipse 中使用
  • 认知科学和认知神经科学_认知增强的时代到了

    认知科学和认知神经科学 Ever since humans fell out of trees we ve been creating tools to help us survive One of the most important o
  • 浅谈JavaScript如何运行中断或停止

    在js运行过程中 在某些情况下想中断程序的运行 在网上查过 没有找到有这样的函数 一般情况下 大多数都是用return代替的 因为js脚本很多都是基于函数的运行 return的作用是中断函数的执行 提前退出该函数 所以在执行某个函数内部的时
  • Golang学习 - sync 包

    临时对象池 Pool 用于存储临时对象 它将使用完毕的对象存入对象池中 在需要的时候取出来重复使用 目的是为了避免重复创建相同的对象造成 GC 负担过重 其中存放的临时对象随时可能被 GC 回收掉 如果该对象不再被其它变量引用 从 Pool
  • Pycharm怎么去查找替换?Pycharm查找替换快捷方法是什么

    在使用python编辑器pycharm编写代码时 有时候需要去查找一些指定的代码或者是文件进行修改 但是一个个去翻太繁琐了 那这篇文章就来教大家怎么在pycharm中去实现快捷方便的查找替换方法 一起看看吧 1 当前文件 如果要在当前文件内
  • nginx 配置监听多个端口有什么问题

    Nginx 可以通过配置文件监听多个端口 在配置文件中使用 listen 指令来设置监听端口 在多个 listen 指令中使用不同的端口号即可实现监听多个端口 这种方式可以让 Nginx 同时支持 HTTP 和 HTTPS 协议 在配置多个
  • @WebServlet

    一 Servlet简介 Java Servlet 是运行在 Web 服务器或应用服务器上的程序 它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层 B S开发的基础 Servlet
  • C++中Vector实现,一维转二维,再将二维数组作为元素进行保存(vector、显式实例化)

    在实际工作中 我们可能需要将类似 vector pt1 2 1 2 2 2 3 2 4 2 5 结构的一维数组 转换为类似 vectorptVec 2 1 2 2 2 3 2 4 2 5 的二维数组 内的值分别代表x y坐标值 这样还不算完
  • Linux中docker常用命令大全

    一 docker命令 docker启动与关闭 启动docker systemctl start docker 关闭docker systemctl stop docker 重启docker systemctl restart docker
  • shell第3次练习

    要求 1 ping主机测试 2 判断一个用户是否存在 3 判断当前内核主版本是否为3 且次版本是否大于10 4 判断vsftpd软件包是否安装 如果没有则自动安装 5 判断httpd是否运行 6 判断指定的主机是否能ping通 必须使用 1
  • 基于WSL2的ubuntu(Windows 子系统)安装及开发环境搭建

    WSL 是 Windows Subsystem for Linux 的缩写 译为适用于Linux 的 windows 子系统 使用WSL让开发人员按原样运行 GNU Linux 环境 包括大多数命令行工具 实用工具和应用程序 且不会产生传统