暂时无法在飞书文档外展示此内容

  1. 发行版推荐

根据需求选发行版。

要跑ROS1就装Ubuntu20.04(推荐)

要跑ROS2就装Ubuntu22.04(推荐)或者24.04

想折腾个人推荐Fedora,可以用docker跑ROS1和ROS2(不推荐初学者)

本教程将涵盖Debian系和红帽系两大派系的配置。

Debian系本教程大部分都用Ubuntu当例子。

红帽系本教程大部分都用Fedora当例子。

  1. Linux装机教程

  2. 实体机(双系统,最推荐)

  3. 环境准备

  4. 至少留出160GB的硬盘空间(可以和Windows是同一块硬盘,也可以是单独的一块硬盘)

  5. 一个里面没存东西的大于8GB的U盘(也可以没有)

  6. 一个聪慧的大脑

  1. 关闭安全启动Secure Boot

如果下面没有,可以自行B站搜自己品牌的电脑如何关闭安全启动

  1. 联想拯救者

  2. 戴尔游匣Intel版

关机,然后在点开机的一瞬间,一直点摁F12(反复狂摁),直到进入一个白色的BIOS界面。

进入BIOS SETUP,找到Boot Configuration,然后往下滑,找到Enable Secure Boot这个选项,给他关闭就行了。

然后再点下面的Apply Changes按钮,再点右下角EXIT按钮重启即可。

  1. 惠普暗影精灵

  2. 华硕天选

开机狂按F2进入BIOS模式,右下角找到高级模式打开

关闭安全模式

  1. 开启核显

安装Linux的时候建议开着核显防止Linux图形显示出现问题。

可以通过打开任务管理器来看自己是否开着核显。(轻薄本不用管,轻薄本肯定开着核显的)

①像你如果是Intel的CPU,那么这里GPU0或者GPU1会显示intel xxxxxx。这样是正确的。

②如果你是AMD的CPU,那么这里GPU0或者GPU1会显示amd xxxxxx。这样是正确的。

③如果你发现,你的GPU0是NVIDIA开头的,而且没有GPU1,那么说明你关闭了核显,请按照下面的操作来关闭独显直连开启核显。(如果你是AMD独显,无所谓,开不开独显直连都一样,就不用管了,但是大部分人都不可能是AMD的独显,所以基本排除这一项了)

对于很多游戏本,支持独显直连,所以可能已经默认关闭了核显,只允许了独显运行,所以此时你需要关闭独显直连,开启核显(独显直连对于打游戏提升很大)

如果你确定你确实已经开启了独显直连,请看下方不同电脑品牌的解决方案。

如果下方没有,可以自行去B站搜自己品牌电脑如何切换到混合输出模式。

  1. 联想拯救者

进入联想电脑管家或者Lenovo Ventage,把图形输出模式切换为混合输出即可,

然后重启查看任务管理器确认是否核显已经被打开了。

  1. 戴尔游匣Intel版

关机,然后在点开机的一瞬间,一直点摁F12(反复狂摁),直到进入一个白色的BIOS界面。

进入BIOS设置,找到Display,然后往下滑,找到Enable Hybird Graphic这个选项这个选项,给他打开就行了。然后点Apply Changes,再退出EXIT

再重启后,打开任务管理器确认核显是否已经被打开了。

  1. 戴尔游匣AMD版

  2. 惠普暗影精灵

  3. 华硕天选

进入BIOS的高级设置模式

高级-显示模式-Dynamic

保存退出

  1. 安装ADK

https://learn.microsoft.com/zh-cn/windows-hardware/get-started/adk-install

下载之前可以关掉梯子,这样可能走的是国内的网,可能会加速下载。(如果你的节点够快,可能走外网下载更快)

同样下载下面这个

这样就安装结束了,可以重新打开傲梅。

  1. 下载DiskGenius

在Windows系统上打开百度搜索DiskGenius并下载。

找一个纯英文目录创建一个DiskGenius文件夹,建议在任意一个磁盘分区里的Program Files文件夹下新建DiskGenius文件夹。

将刚才压缩包里的所有文件解压到这个DiskGenius文件夹中。

右键拖住它,拖到桌面再放手。

点在这里创建快捷方式。

打开这个快捷方式

这样就安装成功了。

  1. 下载傲梅分区助手

https://www.disktool.cn/

下载完解压到一个地方(可以是桌面),双击打开。

如果想安装到C盘,直接点立即安装即可。

如果想安装到D盘,则将默认路径前面的C改成D就行了。

随后安装完毕就可以打开软件了。

把那个安装包.exe删掉就行了。

  1. 下载Ventoy

https://www.ventoy.net/cn/

如果进不去下面的界面,请你确保你的网络环境(使用能够绕过GFW的东西,懂得都懂)

找一个纯英文目录创建一个Ventoy文件夹,建议在任意一个磁盘分区里的Program Files文件夹下新建Ventoy文件夹。

把刚才下载的压缩包里的东西解压到这里。

右键拖住它,拖到桌面再放手。再点击创建快捷方式。

双击快捷方式打开。这样就是安装完毕了。

  1. 下载镜像

百度搜索 bfsu mirror

  1. X86_64(amd64)

  2. Ubuntu KDE 22.04(Kubuntu)更推荐

  1. Ubuntu Gnome 22.04

  1. Fedora KDE

依次点击下方的文件夹,那个42是版本号,选最新版即可。

  1. 硬盘分区安装方案

重点看红字。其他内容你不需要管。

td {white-space:nowrap;border:0.5pt solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;} | 场景分类 | 场景 | 硬盘分配情况 | EFI 分区来源 | Linux 分区方案 | 注意事项 | |:—|:—|:—|:—|:—|:—| | 同硬盘分区​ | ① 同一块硬盘,Win 已安装在硬盘前面 | 硬盘1:前半部分是Win的C盘,D盘等,在末尾新建分区给 Linux | 复用 Windows 已有 EFI 分区(通常 100–300MB,FAT32,/boot/efi 挂载) | 新建 /(ext4)+ swap(可选) | 安装 Linux 引导时要选现有 EFI 分区,避免覆盖 Windows 引导文件。 | | 异硬盘混合分区 | ② 两块硬盘,第二块硬盘末尾装 Linux,前面存放 Windows 数据,比如E盘 | 硬盘1:Windows 系统+EFI;硬盘2:前面是Win的数据区,末尾分给 Linux | 复用 硬盘1 的 EFI 分区 | 硬盘2 新建 / + swap | 引导还是写入硬盘1 的 EFI;安装时要特别小心不要把 EFI 装到硬盘2。 | | 异硬盘独立分区 | ③ 两块硬盘,第二块硬盘全空 | 硬盘1:Windows 系统+EFI;硬盘2:完全给 Linux | 复用 硬盘1 的 EFI 分区(推荐)或者在硬盘2 新建一个 EFI 分区(双 EFI 并存适合老鸟) | 硬盘2 新建 / + swap | 如果新建 EFI,需在 BIOS/UEFI 中手动调整启动顺序;更灵活,但稍复杂。 |

你需要确认你属于哪种情况,下方教程我将以场景一为例子,其他情况也类似。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
───────────────────────────────────────────────────
场景1:同硬盘分区(单硬盘)  
磁盘布局:  
[EFI(共享)] [Win C:] [空闲区域] [Linux Swap] [Linux /]  
        │      │               │             │  
        └──────┴───────────────┴─────────────┘  
        ↑ 所有系统共用此EFI分区(挂载至/boot/efi)
───────────────────────────────────────────────────
场景2:异硬盘混合分区(双硬盘)  
硬盘1: [EFI(共享)] [Win C:] [D: Win存储区]  
        │  
硬盘2: [E: Win存储区 [Linux Swap] [Linux /]  
        ↑  
        └─ Linux安装时挂载硬盘1的EFI至/boot/efi
───────────────────────────────────────────────────
场景3:异硬盘独立分区(双硬盘)  
硬盘1: [EFI_Win] [Win C:]  
        │  
硬盘2: [Linux Swap] [Linux /]  
        │          │  
        └──────────┘  
        ↑ 非独立EFI分区(Linux安装时挂载硬盘1的EFI至/boot/efi)
───────────────────────────────────────────────────
场景3:异硬盘独立分区(双硬盘)  
硬盘1: [EFI_Win] [Win C:]  
        │  
硬盘2: [EFI_Linux] [Linux Swap] [Linux /]  
        │          │  
        └──────────┘  
        ↑ 独立EFI分区(需手动配置UEFI启动顺序,适合老鸟)
───────────────────────────────────────────────────
  1. 创建安装介质

  2. 方法一:U盘法

(如果没有U盘请看本地法)

待肝,几乎和本地法差不太多。

  1. 创建Ventoy U盘

把一个大于8GB的U盘插入电脑,然后打开ventoy,选择好U盘,点击安装即可。(注意,此过程可能会格式化U盘,请把数据先备份,等安装完Ventoy后再把数据移动回来即可。)

  1. 安装微PE并下载WinPE的镜像

https://www.wepe.com.cn/

点击下载2.3版本

有钱可以捐赠,没钱可以先不捐赠,假装自己捐赠了也行点击已捐赠。

下载完把下载的exe复制到你想存放软件的盘(比如C盘)里的Program Files下,新建一个WePE文件夹存放。

双击打开exe文件

选择输出位置

选择桌面并保存

然后去桌面,把刚才生成的镜像复制到U盘里,不要放在U盘的某个文件夹,直接放在U盘里就行。

比如我的U盘是H盘。

  1. 复制Linux镜像iso

再把你上面下载好的Linux安装镜像也复制到U盘里。

  1. 设置启动项Ventoy

把U盘插在电脑上,重启电脑,然后打开DiskGenius.

点击导航栏上的工具选项,然后再点设置UEFI BIOS启动项

找到U盘,比如我的U盘是爱国者aigo的,所以应该选aigo。

然后点下次从该启动项启动,重启就可以了。

进入这个界面说明成功了。

  1. 在Ventoy里启动Linux安装介质镜像

找到你想装的linux的镜像,比如kubuntu22.04,回车进入

再点回车即可。

进入下面这个界面就说明成功了。

  1. 方法二:本地法

  2. 本地法创建

本方法是在本地开创一个存放安装介质(安装文件)的分区,为该分区设置上引导,从而安装Linux系统。

这里分的区不是放置Linux的分区。放置的是安装Linux的文件。(类似安装包)

  1. 查看自己想要放安装介质(也就是安装文件,大概8GB,建议在C盘)还剩多少空间。比如我是还有231GB.

  1. 然后打开傲梅分区助手,选中你想要放置8GB安装介质的磁盘分区(比如我选的是C盘),然后点击右边的调整/移动分区。

  1. 点击分区大小右边的按钮

  1. 计算分区后的未分配空间

①如果你不打算在这个磁盘分区(比如我这里是C盘)里安装Linux(也就是硬盘分区安装方案的场景②和3️⃣),

那么只需要在下图中的分区大小中减掉8GB,让分区后的未分配空间变为8GB即可。

(如果你打算在这个磁盘的分区安装Linux,也就是硬盘分区安装方案的场景①,那么往下看,用②的法)

②如果你打算在这个磁盘分区中安装Linux,那么需要计算一下到底要压缩多少空间。

分区后的未分配的空间=8GB+打算给Linux的空间大小。

比如我剩余的磁盘分区空间为231GB,打算给Linux分配100GB(这里我只是举例子,实际上给Linux的空间不要这么小,至少160GB吧),那么我需要的分区后的未分配的空间=8GB+100GB=108GB。那么就需要在分区大小上减去108GB,让分区后的未分配的空间=108GB.

  1. 然后点击确定进行分区,接着在主界面左上角点提交。

  1. 接着点执行。

  1. 因为我修改的是C盘,所以需要进入WinPE里进行操作, 如果你不是在C盘操作的,可能不用做这一步 。(如果你不能选择Windows PE这个按钮,请去上方教程看看ADK是否安装成功了?)

等待创建PE结束

他会自动进入PE进行分区操作。

勾上自动修复分区中的错误和勾上完成操作后自动关机,等待进度条结束即可。

  1. 然后开机就可以看到我压缩的磁盘分区变小了,我的是C盘,如下图。可以看到C盘后面多了一块未分配的空间。

  1. 点击这块未分配的空间,然后点击分区

  1. 给他分一个FAT32格式的8GB大小的磁盘分区。(记住盘符是多少,比如我的是D盘)

  1. 然后找到你下载的Linux安装介质.iso,双击打开。(或者右键点装载mount

  1. 然后去此电脑里找到这个被加载的镜像,点进去。

  1. 再打开FAT32格式的这个磁盘分区。

  1. 将镜像里的所有内容全部复制到FAT32的磁盘分区中。

  1. 右键镜像弹出Eject虚拟镜像。

  1. 然后打开DiskGenius,点击导航栏上的工具选项,然后再点设置UEFI BIOS启动项

  1. 点击添加启动项,文件路径选择刚才Fat32分区(比如我的是D盘)。

  1. 依次找到/EFI/boot/bootx64.efi

  1. 可以命名为Linux Install,点击保存,并选择下一次重启以这个引导当首选项。

  1. 重启,可以看到下方已经进入了Linux安装界面。

重启后是这个样子,说明进入安装界面了。(对于硬盘分区安装方案的场景①的此时已经可以开始安装了,对于还没给Linux预留安装空间的请按电源按键关机并重启回Windows)

如果你安装失败了,你还想进这个安装界面,则在DiskGenius里像上面那样在BIOS UEFI设置里选中引导,勾上下一次从该项启动,然后重启即可。

  1. 删除本地安装介质(安装完后再删)

当你使用本地法安装Linux的话,你完成Linux的安装需要删除掉开辟的这8GB的FAT32的空间。

打开傲梅分区助手。

然后再找到C盘,点调整分区。

然后把剩下的空闲空间全部还给C盘。

  1. Linux安装空间的预留

  2. 硬盘分区安装方案的场景①

1
2
3
4
5
6
7
8
───────────────────────────────────────────────────
场景1:同硬盘分区(单硬盘)  
磁盘布局:  
[EFI(共享)] [Win C:] [空闲区域] [Linux Swap] [Linux /]  
        │      │               │             │  
        └──────┴───────────────┴─────────────┘  
        ↑ 所有系统共用此EFI分区(挂载至/boot/efi)
───────────────────────────────────────────────────

如果你是本地法+场景一,则已经创建过这个地方了,(如下图)跳过本节。

但如果你是U盘法,则接着往下看。

场景一是和Windows装在一个硬盘里。

  1. 打开傲梅分区助手。找到你想安装Linux的Windows的硬盘。点移动分区。

  1. 分区后的未分配空间就是你要安装Linux的空间。设置分区大小,或者拖动下面的图形按钮都可以更改分区大小。

  1. 然后点击确定进行分区,接着在主界面左上角点提交。

  1. 接着点执行。

  1. 因为我修改的是C盘,所以需要进入WinPE里进行操作, 如果你不是在C盘操作的,可能不用做这一步 。(如果你不能选择Windows PE这个按钮,请去上方教程看看ADK是否安装成功了?)

等待创建PE结束

他会自动进入PE进行分区操作。

勾上自动修复分区中的错误和勾上完成操作后自动关机,等待进度条结束即可。

  1. 然后开机就可以看到我压缩的磁盘分区变小了,我的是C盘,如下图。可以看到C盘后面多了一块未分配的空间。

  1. 硬盘分区安装方案的场景②

1
2
3
4
5
6
7
8
───────────────────────────────────────────────────
场景2:异硬盘混合分区(双硬盘)  
硬盘1: [EFI(共享)] [Win C:] [D: Win存储区]  
        │  
硬盘2: [E: Win存储区 [Linux Swap] [Linux /]  
        ↑  
        └─ Linux安装时挂载硬盘1的EFI至/boot/efi
───────────────────────────────────────────────────

像场景一一样,把你第二个硬盘里的后半部分像场景一一样给压缩取消掉挂载就行。

  1. 硬盘分区安装方案的场景3️⃣

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
───────────────────────────────────────────────────
场景3:异硬盘独立分区(双硬盘)  
硬盘1: [EFI_Win] [Win C:]  
        │  
硬盘2: [Linux Swap] [Linux /]  
        │          │  
        └──────────┘  
        ↑ 非独立EFI分区(Linux安装时挂载硬盘1的EFI至/boot/efi)
───────────────────────────────────────────────────
场景3:异硬盘独立分区(双硬盘)  
硬盘1: [EFI_Win] [Win C:]  
        │  
硬盘2: [EFI_Linux] [Linux Swap] [Linux /]  
        │          │  
        └──────────┘  
        ↑ 独立EFI分区(需手动配置UEFI启动顺序,适合老鸟)
───────────────────────────────────────────────────

直接把整个第二个硬盘所有分区全部删除,格式化即可。

  1. 安装Linux

以Kubuntu 22.04(Ubuntu KDE 22.04)为例子,其他发行版差不多其实也。

  1. grub设置

在下面这个界面按E。

在这一行后面加上 noauto toram

这个noauto是必须要写的。那个toram如果你电脑内存大于等于16GB(小于8GB谨慎,可能会崩溃),则可以填,这样安装速度会提升200+%,甚至300+%,甚至无上限。

然后按crtl+X启动系统。

  1. 基础安装选项

这里语言一定选择English比较好。(这样/home分区底下所有文件夹都是英文,不会出现中文。)

然后选Install Kubuntu.

点continue

连接网络,先点connect to this network,然后找到wifi名,输入上密码,点右边的connect,出现connected后,点continue.

这里和我选的一样即可。

  1. 分区设置(重要!!!)

  2. 与Windows使用同一个EFI分区
  3. 初步设置

这里选Manual,咱们手动分区。

找到咱们之前预留给Linux的那块磁盘区域,比如我的是预留了100GB的那块区域,大概Size是107452MB,一定别找错磁盘区域了。如果你这里不是free space,那么左键选中,点delete.

  1. swap分区建立

选中这块区域,双击或者点击Add按钮。

use as选swap area.

给swap区域分区,这个Size请填写你的内存大小(运存大小)+2GB(单位MB),比如我电脑内存为32GB,那么32+2=34GB,再用34*1024=34816MB,所以填34816.

tips(可以不看):为何要这么做是为了开启Linux的休眠功能,如果你的swap分区大小设置有误,Linux休眠功能可能会出问题。

  1. 根目录/分区建立

再选中剩余的这块区域,双击或者点击Add按钮。

use as选 ext4

然后挂载点选/(也就是根目录)

Size使用默认的就行(默认就是把剩下的最大容量全给根目录

  1. 取消挂载其他无关分区

如下图,swap和/已经被创建成功了。

把上图除了efi和刚才创建的那俩分区 的其他分区全部点change更改为do not use the partition.

  1. 设置UEFI引导位置

把最下方那个bootloader设置为efi分区的磁盘号。

点击右下角Install Now,看看是不是下面只显示修改了swap和ext4俩分区,如果有其他的,说明有无关分区没被取消挂载。

  1. 独立的EFI分区(不推荐)

这种适用于你有一个空的硬盘(不是空的磁盘分区,是一整个硬盘全是空的),然后整个硬盘全分给Linux。(当然这种情况也适用于上面那个和Windows共用一个EFI分区的方法)

适合老鸟。

优点是崩了直接格掉整个硬盘,很干净。

  1. 初步设置

这里选Manual,咱们手动分区。

找到咱们预留的空硬盘。(整个硬盘全空,我单独找了个空的128GB的硬盘来写教程,如下图的nvme0n1)

  1. EFI分区建立(比前面的那种方法多一个EFI分区)

双击你的硬盘底下的free space,

然后size设置为1024,use as设置为EFI分区。

  1. swap分区建立

紧接着再点free space。

选中这块区域,双击或者点击Add按钮。

use as选swap area.

给swap区域分区,这个Size请填写你的内存大小(运存大小)+2GB(单位MB),比如我电脑内存为32GB,那么32+2=34GB,再用34*1024=34816MB,所以填34816.

tips(可以不看):为何要这么做是为了开启Linux的休眠功能,如果你的swap分区大小设置有误,Linux休眠功能可能会出问题。

  1. 根目录/分区建立

再选中剩余的这块区域,双击或者点击Add按钮。

use as选 ext4

然后挂载点选/(也就是根目录)

Size使用默认的就行(默认就是把剩下的最大容量全给根目录

  1. 取消挂载其他无关分区

把上图除了刚才创建的efi,swap,根目录/ 的其他分区全部点change更改为do not use the partition.

  1. 设置UEFI引导位置

把最下方那个bootloader设置为efi分区的磁盘号。比如我这里是nvme0n1p1。

点击右下角Install Now,看看是不是下面只显示修改了efi,swap和ext4仨分区,如果有其他的,说明有无关分区没被取消挂载。

  1. 最后设置

时区选个东八区的就行。默认应该是中国上海🇨🇳时间,也可以选中国香港🇭🇰,中国台湾🇨🇳时间都可以。

用户名设置为英文开头的就行,我这里是tungchiahui

密码选个简单点的,纯数字的,因为以后要经常输入,所以尽可能简单点。

电脑名字随便起,英文开头就行。

等着就行了,与网速,电脑性能都有关。

重启。

如果你是U盘法,请拔掉U盘(大部分情况不拔也行,只要你的开机首选项不是U盘),然后点回车重启

开机啦!

  1. 双系统切换

在点了开机键进入了grub(黑色的界面)

上面显示Ubuntu选项就是进Linux。

上面显示Windows选项就是进Windows。

  1. 彻底删除Linux

  2. 分区格式化

打开diskgenius,找到给Linux分的盘。

挨个选中,点删除分区。

点保存更改。

  1. 引导删除

  2. 和Windows共用EFI

      打开DiskGenius双击Windows的ESP分区。

进入EFI文件夹,找到ubuntu文件夹,右键强制删除

然后后面不管给你啥警告,一直点删除,和确定删除等字眼。

这样引导就删除完毕了。

  1. 独立的EFI

则直接格式化掉整个硬盘即可。

找到自己第二个盘。

右键选中整个硬盘,点删除所有分区

  1. 普通虚拟机(不推荐)

(不用教,自己百度解决)

  1. Windows Subsystem For Linux 2(Windows的Linux子系统2)(勉强的法子)

  2. 简介与优缺点

  3. 什么情况下推荐?

无多余硬盘,没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。

  1. 优缺点:

    1. 优点:

      1. WSL2是最好的Linux发行版;(bushi)

      2. 性能损耗极低。且比在Windows上跑深度性能 强非常非常多; (如下图,时间的数值越低证明性能越高)

      3. 非常方便调用USB设备,可以USB直通;

      4. 非常方便使用英伟达显卡的CUDA与cuDNN;

      5. 非常方便Win与WSL2互相传文件等协同操作;

      6. WSL2中甚至可以在Linux的终端中使用Windows软件;

      7. 非常方便使用Windows的VScode远程开发;

    2. 缺点:

      1. 无法调用本机摄像头,或说调用本机摄像头会巨麻烦。(虽无法调用本机摄像头,但是可以使用USB的摄像头)

  1. 安装教程

  2. 启动WSL2子系统和虚拟平台

  3. 方法一(图形界面)

用Win+R输入appwiz.cpl

点击OK进入 程序和功能/Programs and Features 界面,点击 启用或关闭Windows功能/Turn Windows features on or off

选择 适用于Linux的Windows子系统/Windows Subsystem for Linux虚拟机平台/Virtual Machine Platform 功能:

  1. 方法二(命令行)
# 开启 Linux 子系统
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# 开启虚拟机平台
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  1. 将WSL2设置为默认版本

用管理员权限打开powershell

升级WSL并设置默认版本为WSL2

# 更新 wsl
wsl --update
# 将 wsl 版本设置为 wsl2
wsl --set-default-version 2
  1. 安装Linux发行版

  2. 方式一(商店下载,推荐,网速快,不用翻)

直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 22.04 LTS)

要是跑ROS1建议20.04LTS.

ROS2的话更建议用22.04LTS,对于初学者来说,教程多才是最好的,ROS2 Humble和ROS2 Jazzy在gazebo上区别还是很大的,先学教程多的,以后可以慢慢再转Jazzy。

  1. 方式二(命令行安装)
# 列出可安装的 Linux 版本
#(需要科学手段)
wsl --list --online

选择对应发行版并安装

# Ubuntu安装完毕后(可以重启)
wsl --install -d Ubuntu-22.04
  1. 查看系统状态

# 查看 wsl
wsl -l
# 查看 wsl 运行版本或模式
wsl -l -v


# 设置发行版为使用 wsl 2 (如果版本为 2 则不需要)
wsl --set-version <distro> 2
# 选择要注销的版本 (如果想卸载再用此命令)
wsl --unregister <distro>

输出Version为2即正常

  1. 设置用户名与密码

直接在Powershell里输入wsl命令进入子系统

# 进入子系统
wsl

输入用户名(随便设置,建议字母+数字,或者纯字母)

输入密码(建议低于6位的数字,并且在输入密码时,终端上不会显示输入的字符,但是已经正常输入了)

  1. 卸载发行版

如果出现问题,就卸载wsl2出问题的发行版

第一步在powershell里输入下列命令查询发行版信息。

```Plain Text wsl -l -v

1
2
3
4
5
6
7
第二步在微软应用商店将Ubuntu卸载。(该步一般可以省略)

第三步要敲下方命令进行注销:

```Plain Text
wsl --unregister 发行版名称

第四步可以从安装发行版这步重新装。

  1. 配置各种环境

  2. 换源

(同实体机LINUX,往下找教程)

  1. 英伟达显卡

  2. 显卡驱动

不用安装,只要你的Windows安装了驱动,你的WSL2就已经安装好驱动了。

  1. CUDA

https://developer.nvidia.com/cuda/wsl

在下方的网站,选择合适的版本。

https://developer.nvidia.com/cuda-toolkit-archive

(同实体机LINUX,往下找教程,唯一与实体机不同的地方如下图)

挨行敲一遍

敲完后,输入nvcc -V检测是否安装成功,如果出现下图,证明没配置环境。

(请详看下方教程的安装CUDA的配置环境来看如何配置环境)

  1. cuDNN

(同实体机LINUX,往下找教程)

  1. 配置网络

WSL2默认是NAT模式,也就是拿Windows当网关,WSL2是Windows的下级设备,这样的话,WSL2和Windows并不处于同一网段,WSL2只能和Windows以及Windows的上游设备进行通信,无法与和Windows同局域网的同网段设备进行通信。想要和同网段的ROS、ROS2设备进行通信,只能要么端口转发,要么设置DDS,都是非常麻烦的。

WSL2还提供了好几种模式,有一个模式叫Mirrored模式 (Windows 10 22H2及以上才能开启) ,相当于Docker的--network host,这种方式是让WSL2和Windows使用相同的IP,这样的话,不论是WSL2还是Windows都可以访问同网段的局域网设备了。

重启WSL2

wsl --shutdown
wsl
  1. USB直通

https://learn.microsoft.com/zh-cn/windows/wsl/connect-usb

直通的USB设备只供WSL2使用,应该Windows是没法使用的,如果想使用,请解绑(关闭直通)。

首先现在电脑上安装usbipd,下面是github链接,进去点releases。

https://github.com/dorssel/usbipd-win

点击x64.msi下载并安装。

安装完后,然后开启你的WSL2

右键开始菜单,选择终端(以管理员身份运行)

列出设备

1
usbipd list

下图这个busid为2-1的就是我的目标。

绑定并链接设备,这个2-1要换成你对应的busid

1
2
usbipd bind --busid 2-1 --force
usbipd attach --wsl --busid 2-1

然后在wsl中的终端里查看设备。

1
2
3
lsusb

ls /dev

如果你中途插拔了USB,WSL2找不到了的话,请解绑设备。

1
usbipd unbind --busid 2-1

然后再像上方那样重新绑定即可。

  1. VScode远程开发

(一定要把工程放在Linux中开发,别放在Win磁盘中,否则I/O效率会很低)

安装该插件(WSL2有自己的远程开发插件,无需使用SSH)。

连接WSL2

远程开发成功。

  1. Linux终端使用Windows软件

  1. OpenGL有问题

1
2
3
4
5
sudo apt update
sudo apt upgrade
sudo apt install mesa-utils

#然后重启wsl2即可
  1. 安装必备配置

    1.   软件包换源(以Debian系的发行版为例)

      打开下方网站(注意,该Ubuntu仓库版本是X86、amd64的仓库,ARM的仓库并非该网站(99.9%的人的电脑是X86的,很多工控机是ARM的,但工控机也有X86的,请看Vinci机器人队单片机教程中讲的了解一下,或者自行百度。)

      下方这几个镜像源选一个即可。

    https://mirrors.bfsu.edu.cn/help/ubuntu/

    https://mirrors.cloud.tencent.com/help/ubuntu.html

    https://developer.aliyun.com/mirror/ubuntu

    https://mirrors.sustech.edu.cn/help/ubuntu.html#introduction

    https://mirrors.ustc.edu.cn/help/ubuntu.html

    https://help.mirrors.cernet.edu.cn/ubuntu/

      可以测速,选择出速度最快的源。

    1
    
    curl https://mirrors.cernet.edu.cn/oh-my-mirrorz.py | python3
    

      在北方(山东)测速如下:

      在南方(广东)测速如下:

      在南北都比较快的是北京外国语大学BFSU南方科技大学SUSTech,不想测速可以无脑选,也可以测速选择最好的源。

    1.   Ubuntu22.04(及Debian10)及以下版本

      输入以下命令

    1
    2
    3
    
    sudo apt update
    sudo apt install vim
    sudo vim /etc/apt/sources.list
    

      在以下界面,用键盘按ggdG(注意区分大小写)

      选择好Ubuntu版本后,

      粘贴进去

      按一下ESC,然后英文冒号,输入 :wq!然后回车

      输入以下命令

    1
    
    sudo apt update
    

      下方出现对应学校源网站则成功

      至此换源结束

    1.   Ubuntu24.04(及Debian12)及以上版本

    1
    2
    3
    4
    5
    6
    
    sudo apt update
    sudo apt install vim
    sudo rm -rf /etc/apt/sources.list
    sudo rm -rf /etc/apt/sources.list.d/**
        
    sudo vim /etc/apt/sources.list.d/ubuntu.sources
    

选择好Ubuntu版本后,复制下方的内容。

粘贴进去

按一下ESC,然后英文冒号,输入 :wq!然后回车

输入以下命令

1
sudo apt update

这里被替换成对应学校则成功

  1. Fedora41(DNF5)及之后

https://mirrors.bfsu.edu.cn/help/fedora/

https://help.mirrors.cernet.edu.cn/fedora/

1
2
3
4
5
sed -e 's|^metalink=|#metalink=|g' \
    -e 's|^#baseurl=http://download.example/pub/fedora/linux|baseurl=https://mirrors.bfsu.edu.cn/fedora|g' \
    -i.bak \
    /etc/yum.repos.d/fedora.repo \
    /etc/yum.repos.d/fedora-updates.repo
  1. 卸载恶心的snap(Ubuntu的衍生版)

⚠️官方默认原版Ubuntu Gnome不要卸载snap,会g.原版Ubuntu只能继续让snap恶心你,没办法。(现在貌似非原版ubuntu也不允许卸载了,恶心坏了)

所以我一直都推荐Ubuntu KDE(也就是Kubuntu)。

  1. 安装非firefox浏览器

卸载snap前,请先安装一个浏览器(以Google Chrome为例)(这里是因为Ubuntu默认安装的是snap版本的FireFox)

以下是Google上海服务器的Chrome官网(无需挂梯)

https://www.google.cn/chrome/index.html

咱们这里是Ubuntu所以是Debian系的系统,所以选deb扩展名的程序包。(也就是红色框框)

红帽系则需要安装的是rpm扩展名程序包。(也就是蓝色框框)

1
2
3
4
#某些发行版中,可能Downloads是中文下载,所以就需要  cd ~/下载
cd ~/Downloads
#下方chrome安装包名不一定是这个,根据名字来看
sudo apt install ./google-chrome-stable_current_amd64.deb

  1. 查看snap包应用数量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 老版
sudo apt update
sudo apt install neofetch
neofetch

# 新版
sudo add-apt-repository ppa:zhangsongcui3371/fastfetch
sudo apt update
sudo apt install fastfetch
fastfetch

# windows 想看系统信息的话
winget install fastfetch
#重启 powershell
fastfetch

这里显示,一共有3162个debian的程序,7个snap程序

  1. 移除snap应用

系统在启动时,会自动启动Snap相关服务,我们先禁用掉这些服务

1
2
3
sudo systemctl disable snapd.service
sudo systemctl disable snapd.socket
sudo systemctl disable snapd.seeded.service

然后查看snap应用列表

根据你安装的选择不同(最小安装或普通安装),有不同的Snap软件会被预装到系统,在删除Snap服务之前,我们需要移除Snap安装的这些

1
2
# 查询当前系统上snap安装了哪些app
snap list

卸载掉图中所有应用,按照先删除应用软件,再删除非应用软件的顺序进行删除

1
2
3
4
5
6
7
8
9
10
#移除snap-store,如果是Kubuntu,则没有这个东西,测不需要卸载
sudo snap remove snap-store
#移除firefox浏览器 gnome-42-2204 gtk-common-themes(可以一次性移除多个)
sudo snap remove firefox gnome-42-2204 gtk-common-themes
#移除其它...
 
#移除core22,bare以及snapd(下面这些需要最后再移除,否则会报错)
sudo snap remove core22
sudo snap remove bare
sudo snap remove snapd

输入以下命令查看是否还有snap包

1
2
3
4
5
snap list
# 老版
neofetch
# 新版
fastfetch

  1. 移除snap

在删除掉Snap安装的软件后,下一步就是把Snap本身也删除掉,这里需要使用Apt来实现(谨慎卸载,可视化页面容易崩)

1
2
3
4
5
 #使用apt移除掉snap
sudo apt autoremove --purge snapd
#移除snapd的一些目录
sudo rm -rf /var/cache/snapd
sudo rm -rf ~/snap

至此,其实snap已经被删除掉了。但是这个并不足够,如果你使用apt安装一些软件 sudo apt install firefox时,会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本,而非deb版本,下载snap版本时,会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)

  1. 禁止系统自动安装snap

我们可以利用APT可配置禁用安装哪些依赖的特性,来实现禁止重新自动安装Snap服务

1
sudo vim /etc/apt/preferences.d/nosnap.pref

按insert进入编辑模式,然后复制以下内容,最后按ESC,切换为英文输入法模式,然后敲 :wq 回车

1
2
3
Package: snapd
Pin: release a=*
Pin-Priority: -10

  1. 测试是否成功

1
2
sudo apt update
sudo apt install firefox

这里提示snapd无法被安装,就证明成功了

  1. 重新安装FireFox浏览器(没大有必要)

我个人其实更偏好Google Chrome浏览器,浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了,就没必要安装火狐浏览器了,

但如果你确实喜欢Firefox,在删除掉Snap后,其实没法再通过Snap或Apt来安装Firefox了,而Firefox官网提供的下载,又没有deb包,没有桌面快捷方式,不是非常方便。

所以,你可以考虑使用Mozilla提供的源来安装debian版本的Firefox

1
2
3
4
5
# 添加Mozilla提供的源
sudo add-apt-repository ppa:mozillateam/ppa
# 安装Firefox
sudo apt update
sudo apt install firefox
  1. 跨Ubuntu大版本更新

跨Ubuntu大版本更新,是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。

跨Ubuntu大版本更新时,建议恢复snap,等更新完毕后再删掉snap,以防止Canonical公司从中作妖。

1
2
3
4
5
#删掉禁止安装snap的配置文件
sudo rm -rf /etc/apt/preferences.d/nosnap.pref
sudo apt update

sudo apt dist-update
  1. 切换系统语言到中文

(实在不喜欢英文的可以切换,以KDE6为例子,其他类似)

  1. 中文输入法

  2. 搜狗(不建议)(Ubuntu22.04 以下)

官网下载搜狗输入法

打开终端输入如下

1
2
cd ~/Downloads/
sudo apt install ./sogoupinyin_4.2.1.145_amd64.deb

打开Fcitx

添加搜狗输入法

将搜狗输入法设置为唯一输入法

  1. Fcitx5(Ubuntu22.04 以上、Debian12及以上、Fedora)

  2. 卸载旧输入法
1
2
3
4
5
# Ubuntu或者Debian
sudo apt purge fcitx* ibus*

# Fedora
# 应该不用干任何事,fedora41基本都移除了
  1. 安装Fcitx5
1
2
3
4
5
6
7
8
9
10
# Ubuntu22.04及以上、Debian12及以上
sudo apt install fcitx5 fcitx5-chinese-addons

# Ubuntu20.04
sudo add-apt-repository ppa:zhsj/fcitx5
sudo apt update
sudo apt install fcitx5 fcitx5-chinese-addons

# Fedora
sudo dnf install fcitx5 fcitx5-chinese-addons fcitx5-autostart
  1. Reboot System重启系统

  2. 启动Fcitx5

  1. 修改一些设置

将Pinyin和Keyboard - English US加入到左边。(如果找不到,不要勾选右边的仅显示当前语言)

添加快捷键以便于更好切换中英文

  1. 如果你是KDE6+Wayland,则还需要下面这个步骤(Kubuntu26.04及以上,Debian13及以上,Rocky10及以上,Fedora等)

  1. 重启
1
sudo shutdown -r now
  1. 使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)

https://github.com/debuggerx01/fcitx5_customizer

```Plain Text

Ubuntu

直接在线执行工具箱优化

curl -sSL https://fcitx5.debuggerx.com/fcitx5_customizer.sh | bash -s – recommend

Fedora

直接在线执行工具箱优化

curl -sSL https://fcitx5.debuggerx.com/fcitx5_customizer.sh | bash -s – recommend

1
2
3
4
5
6
7
8
  

9.  再重启
    

```bash
sudo shutdown -r now
  1. pip3源替换

非Debian系发行版需要做。

像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。

使用dnf的系统(如Fedora,RHEL,RockyLinux)也可能可以不用做。

https://mirrors.tuna.tsinghua.edu.cn/help/pypi/

按图中顺序敲,但是不出意外的话,会报错,因为大部分发行版不自带pip,所以请接着往下看。

1
2
3
4
5
6
7
8
9
10
11
12
#安装pip3
sudo apt update
sudo apt-get install python3-pip

#更新pip3
python3 -m pip install -i https://mirrors.bfsu.edu.cn/pypi/web/simple --upgrade pip

#设置pip源为北京外国语大学镜像源
pip3 config set global.index-url https://mirrors.bfsu.edu.cn/pypi/web/simple

#测试
python3 -m pip install --upgrade pip

成功的话,会看到Looking后面是bfsu字样。

  1. RPMFusion安装并换源

(仅红帽系,即Ubuntu等Debian系的不用弄)

https://mirrors.bfsu.edu.cn/help/rpmfusion/

  1. 先用下方命令查询你是否开启了rpmfusion.
1
rpm -qa | grep rpmfusion

  1. 如果开启了的话,就先卸载rpmfusion
1
sudo dnf remove rpmfusion-free-release rpmfusion-nonfree-release

  1. 安装北京外国语大学的rpmfusion

    1. Fedora
    1
    2
    
    # 安装免费仓库非免费仓库
    sudo dnf install --nogpgcheck https://mirrors.bfsu.edu.cn/rpmfusion/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.bfsu.edu.cn/rpmfusion/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
    
    1. RHEL、RockyLinux
    1
    2
    
    # 安装免费仓库非免费仓库
    sudo dnf install --nogpgcheck https://mirrors.bfsu.edu.cn/rpmfusion/free/fedora/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm https://mirrors.bfsu.edu.cn/rpmfusion/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm
    
  2. 把其他rpmfusion仓库也改为bfsu源

1
2
3
4
5
sudo sed -e 's!^metalink=!#metalink=!g' \
         -e 's!^mirrorlist=!#mirrorlist=!g' \
         -e 's!^#baseurl=!baseurl=!g' \
         -e 's!https\?://download1\.rpmfusion\.org/!https://mirrors.bfsu.edu.cn/rpmfusion/!g' \
         -i /etc/yum.repos.d/rpmfusion*.repo
  1. 检查修改好的仓库
1
grep "mirrors.bfsu" /etc/yum.repos.d/rpmfusion*.repo

可以看到不止free和nonfree的源换了,英伟达和steam也换了。

  1. 刷新仓库缓存
1
2
sudo dnf clean all
sudo dnf makecache
  1. 时间不同步

双系统会导致Ubuntu比Windows的时间快8小时,而Windows的时间比Ubuntu慢8小时,所以需要解决系统时间同步的问题。还是第一次分享的那个视频,后面有一节讲到了时间同步的问题。

建议:打开字幕观看,因为有些莫名出现的问题,会在弹幕里有解答

https://www.bilibili.com/video/BV1554y1n7zv/?vd_source=ceb9c29ca8792358f229b53eef0c1448

  1. 显卡驱动安装

  2. 卸载显卡驱动(卸载干净)

1
2
3
4
5
6
7
8
# 如果使用了.run文件进行安装的,再使用下面命令卸载干净
sudo /usr/bin/nvidia-uninstall

# 如果是使用apt安装的驱动
sudo apt-get remove --purge nvidia*

# 如果是使用dnf安装的驱动
sudo dnf remove nvidia*
  1. 常见问题(遇到问题再翻上来看这里)

  2. 禁用开源驱动nouveau,nouveau经常会引起卡顿黑屏花屏,所以要禁用
1
sudo vim /etc/modprobe.d/blacklist-nouveau.conf

blacklist-nouveau.conf文件内容如下:

1
2
3
4
5
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
lias nouveau off
alias lbm-nouveau off

接着运行下方命令

1
2
3
4
# debian系选这个(Ubuntu等)
sudo update-initramfs -u
# 红帽系选这个(Fedora,Rocky等)
sudo dracut --force

```Plain Text

重启

sudo reboot

1
2
3
4
5
重启后,查询nouveau是否还开着,如果什么都不出现,说明禁用成功。

```bash
lsmod | grep nouveau
  1. 无法调节屏幕亮度,无法使用HDMI插口(这是因为xorg文件和grub没配置)( 仅X11 ,例如Ubuntu24.04及以下,像Fedora等使用wayland的不能用下方的配置。)

先配置xorg

1
sudo vim /usr/share/X11/xorg.conf.d/10-nvidia.conf

并把10-nvidia.conf里的内容修改为下方内容并保存,然后重启即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Section "OutputClass"
   Identifier "nvidia"
   MatchDriver "nvidia-drm"
   Driver "nvidia"
   Option "AllowEmptyInitialConfiguration"
   Option "PrimaryGPU" "yes"
   ModulePath "/usr/lib/x86_64-linux-gnu/nvidia/xorg"
EndSection


# 或者

Section "OutputClass" 
    Identifier     "nvidia" 
    MatchDriver    "nvidia-drm" 
    Driver         "nvidia" 
    Option         "RegistryDwords" "EnableBrightnessControl=1;PrimaryGPU=1" 
    Option         "Backlight" "nvidia_0" 
    ModulePath     "/usr/lib/x86_64-linux-gnu/nvidia/xorg" 
EndSection

再配置grub

1
sudo vim /etc/default/grub

grub参数添加上下面这些参数,注意是添加啊,可不是改为这样,原来的参数要保留。

1
GRUB_CMDLINE_LINUX_DEFAULT="nvidia.NVreg_EnableBacklightControl=1 acpi_backlight=native video.use_native_backlight=0"

1
2
3
4
5
6
7
8
9
10
11
12
# debian系选这个(Ubuntu等)
sudo update-initramfs -u
#或
sudo update-grub


# 红帽系选这个(Fedora,Rocky等)
sudo dracut --force



sudo reboot

重启即可

  1. 安装N卡驱动提示错误

```Plain Text Unable to find the kernel source tree for the currently running kernel. Please make sure you have installed the kernel source files for your kernel and that they are properly configured; on Red Hat Linux systems, for example, be sure you have the ‘kernel-source’ or ‘kernel-devel’ RPM installed.If you know the correct kernel source files are installed, you may specify the kernel source path with the ‘–kernel-source-path’ command line option.

1
2
3
4
5
6
7
8
1.  检查当前运行的内核版本:
    

运行以下命令以查看你当前正在使用的内核版本:

```bash
uname -r
  1. 安装内核开发文件:

确保你已经安装了与当前内核版本相匹配的 kernel-devel 包。运行以下命令来安装:

1
sudo dnf install kernel-devel-$(uname -r)

这将自动安装与你当前内核版本匹配的内核开发包。

  1. 安装内核源代码(可选):

如果需要访问完整的内核源代码,你可以运行以下命令来安装它:

1
sudo dnf install kernel-headers kernel-source
  1. 检查安装:

安装完成后,确认路径是否正确。内核源文件通常位于 /usr/src/kernels/ 目录下,你可以使用以下命令来检查该目录是否存在:

1
ls /usr/src/kernels/

如果仍然遇到问题,可以通过 --kernel-source-path 选项手动指定内核源文件路径。

  1. 安装方式推荐

下面有三个方式安装驱动,教程基本都写了,分别是通用方式,APT方式,DNF方式。

新手建议使用APT方式(Ubuntu或者Debian)或者DNF方式(Fedora或者RockyLinux)安装 NVIDIA驱动 ,然后CUDA用通用方式安装,CUDNN依然用APT或者DNF方式安装。

(你是新手的话,老老实实按照下方的表格推荐的方式进行安装,别瞎整活)

td {white-space:nowrap;border:0.5pt solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;} | 各发行版推荐使用的方式 | |:—| | | Ubuntu | Debian | Fedora | RockyLinux | | NVIDIA驱动 | APT | APT | DNF | DNF | | CUDA | 通用或APT | 通用或APT | 通用或DNF | 通用或DNF | | cuDNN | APT | APT | DNF | DNF |

  1. APT安装(方式一:适合Debian,Ubuntu等)

  2. 安装显卡驱动

这种方式安装的显卡驱动,以后更新内核后都不用再重新安装显卡驱动了。

  1. Ubuntu
1
2
3
4
5
6
# 安装英伟达驱动
sudo apt install nvidia-driver-版本号
# 重启 (必须重启)
sudo shutdown -r now
# 检查驱动是否安装成功
nvidia-smi
  1. Debian
1
2
3
4
5
6
7
8
9
# 安装内核头文件和编译工具
sudo apt install -y linux-headers-amd64 build-essential

# 安装英伟达驱动
sudo apt install nvidia-driver
# 重启
sudo shutdown -r now
# 检查驱动是否安装成功
nvidia-smi
  1. 安装CUDA

(请使用方式一通用法)

  1. 安装cuDNN

选择CuDNN v9版本(该版本安装和CUDA差不多,可以看着官网教程来安装)

https://developer.nvidia.com/cudnn-archive

  1. DNF安装(方式二:适合Fedora,Rocky等)

  2. 安装显卡驱动

如果我们使用通用方式安装显卡驱动,会发现每次Feodra更新内核后,显卡驱动都会掉,如何解决这个办法呢?请采用DNF安装显卡驱动。

这种方式安装的显卡驱动,以后更新内核后都不用再重新安装显卡驱动了。(安装新内核后,重启时会自动触发 akmod 的构建流程。此时,系统会生成与新内核匹配的 NVIDIA 驱动模块。)

注意,安装驱动之前,要确定自己没用.run等方式安装了驱动。可以用nvidia-smi命令查看,如果提示没安装驱动就可以。如果提示当前已经安装了驱动,请先卸载驱动(卸载教程上面应该有)或者等下一次内核更新(内核更新会掉.run安装的驱动)

  1. Fedora
1
2
3
4
5
6
7
8
9
10
# 启用 RPM Fusion 仓库(北京外国语源)
sudo dnf install --nogpgcheck https://mirrors.bfsu.edu.cn/rpmfusion/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.bfsu.edu.cn/rpmfusion/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

# 安装驱动和内核工具
sudo dnf install akmod-nvidia  # 自动适配内核的驱动(重点)
sudo dnf install xorg-x11-drv-nvidia-cuda  # 包含 CUDA 支持

# 重启并验证(这种方式必须重启)
sudo reboot
nvidia-smi  # 检查驱动版本(如 570.86.16)
  1. 安装CUDA

通过dnf安装完显卡驱动后,也可以使用通用法安装CUDA,这种方法也很方便(CUDA在更新内核后不会掉的)。

也可以使用下面这种dnf的方式进行CUDA安装。

(此教程以Fedora41和RTX3060Laptop为例)(Rocky,RHEL也类似)

  1. 先查看显卡驱动所支持的最高CUDA版本
1
nvidia-smi

左边是英伟达驱动版本,右边是所支持CUDA的最高版本,注意是最高版本,比这个版本低的CUDA都是可以安装的。(不用追求最高,稳定即可,虽然都很稳定)

  1. 下载CUDA并安装CUDA

https://developer.nvidia.com/cuda-toolkit-archive

选择一个版本,这里以CUDA12.4为例(绿色框住的都是我这台电脑对应可安装的版本,而红色框则不能)

我这里是Intel CPU(X86_64架构或者叫amd64架构),所以选择X86_64。(AMD和Intel全是X86的,如果分不清,请看Vinci机器人队单片机教程

我是Fedora41,所以选择了Fedora41 ,(你是RockyLinux要选择RockyLinux)如下图所示:

https://developer.nvidia.com/cuda-toolkit-archive

按照网站对应的部分敲,如我上图里是这样的:

1
2
3
4
wget https://developer.download.nvidia.com/compute/cuda/12.8.0/local_installers/cuda-repo-fedora41-12-8-local-12.8.0_570.86.10-1.x86_64.rpm
sudo dnf install ./cuda-repo-fedora41-12-8-local-12.8.0_570.86.10-1.x86_64.rpm
sudo dnf clean all
sudo dnf -y install cuda-toolkit-12-8

进行环境配置:

1
sudo vim ~/.bashrc

复制下面这一串到~/.bashrc文件中,并保存,不会用vim编辑器的请自行百度。

1
2
export PATH=/usr/local/cuda-12.4/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH

或者(更建议下方这个)

1
2
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

1
2
3
4
# 刷新当前终端的环境变量
source ~/.bashrc
# 验证CUDA是否安装成功
nvcc -V

出现下图这种则安装成功。

  1. 安装cuDNN

选择CuDNN v9版本(该版本安装和CUDA差不多,可以看着官网教程来安装)

https://developer.nvidia.com/cudnn-archive

  1. 通用方式(方式三:脚本或压缩包方式)

遇到问题请看 常见问题 那节,看看有没有对应解决方案。(对于Ubuntu,Debian,Fedora,Rocky的常见问题应该是全的)

  1. 安装显卡驱动

使用这种方式安装,需要先禁用掉nouveau,请先往下翻,找到常见问题(在上面一两小节)那节内容里的禁用nouveau,将nouveau禁用。

先下载N卡驱动,下载.run扩展名的

https://www.nvidia.cn/drivers/lookup/

用以下命令停止可视化桌面环境(用ctrl alt f*也可以)(也可以不禁用桌面环境,直接进行下一步。)

1
2
3
4
5
6
# 通用的命令(sudo telinit 5是打开图形界面)
sudo telinit 3
# ubuntu 使用下方命令
sudo service lightdm stop
# Fedora 使用下方命令
sudo systemctl isolate multi-user.target

之后会进入一个新的命令行会话,使用当前的用户名密码登录。(不用使用root用户)

1
2
3
4
5
6
7
8
9
10
# 编译环境+准备工作
sudo apt install build-essential
# 进入到.run目录中
cd /home/tungchiahui/Downloads/
# 给驱动文件增加可执行权限:
sudo chmod a+x NVIDIA-Linux-x86_64-550.107.02.run
# 然后执行安装:
sudo ./NVIDIA-Linux-x86_64-550.107.02.run
# 如果有异常则:(一般不用下方这条,会导致OPENGL没法被安装,这样ROS有些功能无法使用)
sudo ./NVIDIA-Linux-x86_64-550.107.02.run  --no-opengl-files

安装完毕重启即可

1
2
3
4
# 重启 
sudo reboot
# 检查驱动是否安装成功
nvidia-smi
  1. 安装CUDA

(此教程以Debian 12 Bookworm和RTX3060Laptop为例)(Ubuntu,Fedora也类似)

  1. 先查看显卡驱动所支持的最高CUDA版本
1
nvidia-smi

左边是英伟达驱动版本,右边是所支持CUDA的最高版本,注意是最高版本,比这个版本低的CUDA都是可以安装的。(不用追求最高,稳定即可,虽然都很稳定)

  1. 下载CUDA并安装CUDA

https://developer.nvidia.com/cuda-toolkit-archive

选择一个版本,这里以CUDA12.4为例(绿色框住的都是我这台电脑对应可安装的版本,而红色框则不能)

我这里是Intel CPU(X86_64架构或者叫amd64架构),所以选择X86_64。(AMD和Intel全是X86的,如果分不清,请看Vinci机器人队单片机教程

我是Debian12,所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示,建议选择runfile文件进行安装。

将最下方框框里的命令敲入终端

1
2
3
4
5
6
7
8
9
10
# 在当前文件夹下创建一个ttt的子文件夹
mkdir -p ./ttt
# 进入ttt文件夹
cd ttt
# 输入复制的第一条命令(用来下载cuda的runfile文件)
wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run
# 给予权限
sudo chmod a+x ./cuda_12.4.0_550.54.14_linux.run
# 运行脚本
sudo ./cuda_12.4.0_550.54.14_linux.run

正在加载中:

输入accept接受即可

因为我们已经安装了驱动,所以删掉该项,Install即可。( 一定不要勾选安装驱动 ,新手避免非必要的麻烦)

等待片刻后,一般不出红色字体就是安装成功了,可以读读英语确认一下。(顺便确定一下位置)

  1. 配置环境

根据上方确认一下路径,比如我上面红色框起来的为

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

如果刚才忘记查看了,也可以使用下方命令查看路径:

1
which nvcc

所以我进行以下操作:

1
sudo vim ~/.bashrc

复制下面这一串到~/.bashrc文件中,并保存,不会用vim编辑器的请自行百度。

1
2
export PATH=/usr/local/cuda-12.4/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH

或者

1
2
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

1
2
3
4
# 刷新当前终端的环境变量
source ~/.bashrc
# 验证CUDA是否安装成功
nvcc -V

出现下图这种则安装成功。

  1. 安装cuDNN(基本废弃,请往下看apt和dnf安装CuDNN的方式)

  2. 据安装好的CUDA版本选择合适的cuDNN版本进行下载,注意这里是需要注册登录的:

https://developer.nvidia.cn/rdp/cudnn-archive#a-collapse805-111

因为我是CUDA12.4,所以下方红圈版本都是可以安装的,越新越好。(上方网站最高版本也就v8.9.7,还有更新的版本,可以直接往下看apt和dnf方式安装)

红色是X86架构的所有Linux通用的,所以我选择红色的。

绿色的是X86架构的Ubuntu,是Ubuntu且CPU为X86架构的可以选择下载。

蓝色的是arm64(aarch64)架构的Ubuntu,是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。

我这里选择所有Linux X86_64最通用的办法:

下载好的:

  1. 安装cuDNN

找到该文件所在目录,并打开终端,cd到该目录。

解压文件,并复制到对应位置完成安装

1
2
3
4
5
6
7
8
9
10
11
12
13
# 解压cuDNN文件
tar -xvf ./cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
# cd进文件夹
cd ./cudnn-linux-x86_64-8.9.7.29_cuda12-archive
# 复制cuDNN文件到CUDA目录
sudo cp include/cudnn*    /usr/local/cuda/include
sudo cp lib/libcudnn*    /usr/local/cuda/lib64
# 对比一下有没有缺文件
ls /usr/local/cuda/include/cudnn*
ls /usr/local/cuda/lib64/libcudnn*
# 给予权限
sudo chmod a+r /usr/local/cuda/include/cudnn*
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
  1. 检查是否安装成功
1
2
# 检查cuDNN版本命令
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

出现下图这样的就是安装成功了

  1. 软链接
1
2
# 运行 ldconfig 以更新库缓存:(如果运行 ldconfig 后没有出现任何错误,说明配置已经完成。)
sudo ldconfig

如果出现下列提示,则需要软链接(如果没有下列提示,则什么都不需要做)

```Plain Text ldconfig: /usr/local/cuda-12.4/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8 is not a symbolic link
ldconfig: /usr/local/cuda-12.4/targets/x86_64-linux/lib/libcudnn_ops_train.so.8 is not a symbolic link
ldconfig: /usr/local/cuda-12.4/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8 is not a symbolic link
ldconfig: /usr/local/cuda-12.4/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8 is not a symbolic link
ldconfig: /usr/local/cuda-12.4/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8 is not a symbolic link
ldconfig: /usr/local/cuda-12.4/targets/x86_64-linux/lib/libcudnn.so.8 is not a symbolic link
ldconfig: /usr/local/cuda-12.4/targets/x86_64-linux/lib/libcudnn_adv_train.so.8 is not a symbolic link

1
2
3
4
5
6
7
8
运行下方的命令

```bash
# cd进入CUDA路径
cd /usr/local/cuda/targets/x86_64-linux/lib
 # 查看本路径下的需要软链接的文件名
 ls

如上图,我需要将libcudnn_xxx_xxxxx.so.8.9.7libcudnn_xxx_xxxxx.so.8libcudnn_xxx_xxxxx.so软链接

1
2
3
4
5
6
7
8
9
10
11
12
# 创建符号链接。对于每个 .so.8 文件,需要创建一个指向该文件的符号链接,通常链接的名称是不包含 .8 的文件名。
sudo ln -sf libcudnn_cnn_train.so.8.9.7 libcudnn_cnn_train.so.8
sudo ln -sf libcudnn_adv_infer.so.8.9.7 libcudnn_adv_infer.so.8
sudo ln -sf libcudnn_adv_train.so.8.9.7 libcudnn_adv_train.so.8
sudo ln -sf libcudnn_cnn_infer.so.8.9.7 libcudnn_cnn_infer.so.8
sudo ln -sf libcudnn.so.8.9.7 libcudnn.so.8
sudo ln -sf libcudnn_ops_infer.so.8.9.7 libcudnn_ops_infer.so.8
sudo ln -sf libcudnn_ops_train.so.8.9.7 libcudnn_ops_train.so.8
# 运行 ldconfig 以更新库缓存:(如果运行 ldconfig 后没有出现任何提示,说明配置已经完成。)
sudo ldconfig
# 使用 ls -l 来确认符号链接是否创建成功:(再次确认链接)
ls -l /usr/local/cuda/targets/x86_64-linux/lib/libcudnn_*.so*
  1. 命令教程(长期积累)

  2. 大多数命令

https://www.runoob.com/linux/linux-tutorial.html

  1. 包管理工具命令

常见的有apt,dnf,yum,pacman,pkcon等等。

  1. KDE Dolphin 以root打开

kde5

1
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin

kde6

1
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin

kde6.3.3及以上

直接图形化就可以了。

  1. 各种环境配置

电控组环境搭建大全

  1. 其他可选配置

根据自己是否有需求再选择对应的功能进行配置

  1. KDE的Wayland和X11互相切换

1
2
3
4
5
# Ubuntu
sudo apt install plasma-workspace-x11 plasma-workspace-wayland

# Fedora,Rocky
sudo dnf install plasma-workspace-x11 plasma-workspace-wayland

然后重启,在kde的登陆界面的左下角可以选择X11还是Wayland!

  1. 修改DNS

使用 NetworkManager(最推荐,适用于大多数现代发行版)这是最灵活的方法,NetworkManager 是 Ubuntu、Fedora、CentOS 等大多数主流发行版的默认网络管理工具。

  1. 修改全局配置文件(对所有连接生效):创建或编辑 /etc/NetworkManager/conf.d/dns.conf文件:
1
sudo nano /etc/NetworkManager/conf.d/dns.conf

添加以下内容:

1
2
[main]dns=none
systemd-resolved=falserc-manager=unmanaged

这告诉 NetworkManager 不要管理 DNS 设置。

  1. 创建静态 resolv.conf 文件:编辑 /etc/resolv.conf文件(如果文件不存在则创建):
1
sudo nano /etc/resolv.conf

添加您想要的 DNS 服务器,例如:

1
2
3
nameserver 223.5.5.5
nameserver 119.29.29.29
options timeout:1 attempts:2
  1. 防止文件被覆盖:为防止系统其他服务覆盖此文件,将其设置为不可更改:
1
sudo chattr +i /etc/resolv.conf

(如需修改此文件,先使用 sudo chattr -i /etc/resolv.conf解除锁定)

重启 NetworkManager:

1
sudo systemctl restart NetworkManager
  1. 使用 resolvectlsystemd-resolve查看是否成功(最推荐)

这是最直接的方法,可以查看系统默认的 DNS 配置。

1
resolvectl status

或者(对于旧版系统)

1
systemd-resolve --status

  1. 截图快捷键

KDE自带的截图工具贼好用,同时这个截图工具同样可以录屏,但是OBS比截图工具更加专业,所以我们一般只用这个截图工具进行截图。

QQ和微信的截图在Wayland下截至2025年还都有些小问题,所以我们选择KDE自带的截图工具。

这里在捕获矩形区域的自定义快捷键在这里输入自己想用的快捷键即可。

  1. 搜索工具

KDE自带的搜索工具也很好用,可以快速打开自己想打开的应用。就像这样,所以我们也设置一个快捷键进行呼出。

Meta这个按键就是Win键,上面是一个微软LOGO。

  1. 关闭SELinux

这玩意在个人电脑没必要开,纯给自己找麻烦,Android倒是可以开。

这个目前Feodra是默认开的(enforcing模式),所以需要关一下。

禁用有俩方式,disabledpermissive模式,下面是这俩模式的区别:

td {white-space:nowrap;border:0.5pt solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;} | ​​特性​​ | ​​Disabled 模式​​ | ​​Permissive 模式​​ | |:—|:—|:—| | ​​SELinux 内核模块状态​​ | 完全禁用 SELinux,内核模块不运行137。 | SELinux 内核模块正常运行,但仅记录违规行为,不阻止访问126。 | | ​​访问控制策略​​ | 不执行任何策略,所有访问均被允许29。 | 检查策略并记录违规行为,但不会阻止操作36。 | | ​​日志记录​​ | 不生成 SELinux 相关的审计日志37。 | 记录所有违反策略的行为到 /var/log/audit/audit.log26。 | | ​​安全性​​ | 最低,完全依赖传统 Linux DAC(自主访问控制)28。 | 高于 Disabled 模式,提供调试环境,同时保留日志分析能力36。 | | ​​切换方式​​ | 必须修改配置文件 /etc/selinux/config 并重启系统34。 | 可通过命令 setenforce 0 临时切换,无需重启34。 | | ​​适用场景​​ | 仅用于彻底规避 SELinux 兼容性问题(如老旧软件),不推荐长期使用19。 | 用于调试策略、排查权限问题,或在开发阶段测试 SELinux 规则367。 |

由于Disabled模式,SELinux 完全关闭,内核模块未加载。所有进程和文件的访问仅受传统 Linux 用户/组权限控制(如 rwx),所以我们选择Permissive模式,该模式下SELinux 策略正常加载,但仅记录违规行为(如进程尝试访问未授权文件)。

下面是修改模式的教程:

1
sudo vim /etc/selinux/config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
# This file controls the state of SELinux on the system. 
# SELINUX= can take one of these three values: 
#     enforcing - SELinux security policy is enforced. 
#     permissive - SELinux prints warnings instead of enforcing. 
#     disabled - No SELinux policy is loaded. 
# See also: 
# https://docs.fedoraproject.org/en-US/quick-docs/getting-started-with-selinux/#getting-started-with-selinux-selinux-states-and-modes 
# 
# NOTE: In earlier Fedora kernel builds, SELINUX=disabled would also 
# fully disable SELinux during boot. If you need a system with SELinux 
# fully disabled instead of SELinux running with no policy loaded, you 
# need to pass selinux=0 to the kernel command line. You can use grubby 
# to persistently set the bootloader to boot with selinux=0: 
# 
#    grubby --update-kernel ALL --args selinux=0 
# 
# To revert back to SELinux enabled: 
# 
#    grubby --update-kernel ALL --remove-args selinux 
# 
SELINUX=permissive 
# SELINUXTYPE= can take one of these three values: 
#     targeted - Targeted processes are protected, 
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection. 
SELINUXTYPE=targeted
 

SELINUXTYPE是修改selinux的策略,targeted 策略是 SELinux 的 默认策略,主要对 高风险的网络服务(如 Apache、MySQL、SSH)进行强制访问控制,其他非关键进程沿用传统的 Linux 用户/组权限(DAC)。这种设计在安全性和易用性之间取得了平衡,所以无需修改。

重启即可

1
sudo reboot
  1. UEFI启动界面rEFInd

https://www.bilibili.com/video/BV1qh411Q7d4

  1. 安装rEFInd

1
2
3
# Ubuntu
sudo apt update
sudo apt install refind
1
2
3
# Fedora
sudo dnf makecache
sudo dnf install rEFInd

注:如果安装了三系统,尽量把refind安装到Linux盘的第一个系统上。

  1. 确认refind是否安装成功

如图在/boot/efi/EFI文件夹里,有个refind.

如果你没有这个refind文件的话,需要手动进行安装。

手动安装方式一:

找到/usr/share/rEFInd/文件夹,看看里面是否有refind-install,直接运行下方命令即可。

1
2
3
cd /usr/share/rEFInd/
sudo ./refind-install
sudo reboot

手动安装方式二:

1
2
3
cd /usr/share/rEFInd/
sudo cp -r /usr/share/rEFInd/refind /boot/efi/EFI/
sudo reboot

安装完毕后,可以看看/boot/efi/EFI文件夹里,是否有refind了.

  1. 配置 refind.conf

1
2
cd /boot/efi/EFI/refind
sudo vim ./refind.conf

最后一行加上(vim编辑器不会用自己百度)

1
dont_scan_dirs ESP:/EFI/boot,EFI/ubuntu,EFI/boot,EFI/deepin_os,EFI/UOS,EFI/fedora

1
2
sduo reboot
#如果使用refind-install安装的refind,默认自动将rEFInd启动项作为第一项,如果没有进BIOS手动配置

完成!!!

  1. 美化

rEFInd-glassy主题:https://pan.baidu.com/s/1HgfXG3m4j57VIk4k6inI-g

提取码:zimo

记得解压出来。

1
2
3
4
5
cd /boot/efi/EFI/refind
mkdir -p ./themes
# 你把美化包解压到哪里了,就cd到哪里
cd ~/Downloads
sudo cp -r ./rEFInd-glassy /boot/efi/EFI/refind/themes

然后

1
2
cd /boot/efi/EFI/refind
sudo vim ./refind.conf

最后一行加上(vim编辑器不会用自己百度)

1
include themes/rEFInd-glassy/theme.conf
1
2
# 重新启动电脑
sudo reboot

  1. KDE主题

先从kde store下载一个心仪的主题,然后解压出来。

https://store.kde.org/

1
2
3
4
# cd进主题的文件夹
cd ~/Downloads
# 把主题文件复制到KDE的主题
sudo cp -r ./Apple.BigSur.Dark.P6 /usr/share/plasma/look-and-feel

进入设置就可以看到啦,如果看不到,就重启下电脑。

  1. 自启应用与脚本

在右上角可以添加脚本和应用,添加脚本前先要确认脚本是否拥有可执行权限。也可以选择开机时运行脚本和关机时运行脚本。

例子:拿docker_x11的命令xhost +local:docker为例。

先找到一个存放脚本的文件夹,你自己在home分区创一个就可以了。

1
2
3
touch docker_x11.bash
sudo chmod a+x ./docker_x11.bash
sudo vim ./docker_x11.bash
1
2
3
#!/bin/bash
# 允许本地 docker 容器访问 X server
xhost +local:docker

在vim编辑器里用:wq保存并退出

在kde6设置里找到autostart,然后添加登陆脚本,而不是登出脚本。

🟢 Login Script(登录脚本)

  • 什么时候执行? 当用户登录系统时(例如通过终端、TTY 或 SSH)自动执行。

🔴 Logout Script(登出脚本)

  • 什么时候执行? 当用户退出 shell 或注销登录会话时自动执行。

找到脚本文件添加进去即可。

重启即可

  1. 从Bash切换到Zsh

  2. 什么是shell?

简单说,shell是你与应用程序交互的媒介。 通常情况下,你将你想要使用的应用程序和参数输入到shell,shell在PATH中查找你希望调用的应用程序,对参数进行解析,并传入参数。最终将结果返回给你。

如果你使用的是bash shell,那么你大概率正在使用某个linux发行版。 目前,大部分linux发行版使用的默认shell仍然是bashWindows默认使用Powershell。 从Catalina开始,MacOS已经将默认shell从bash切换到了zsh

  1. zsh有什么优势?

相比bashzsh有庞大的插件社区和成熟的插件管理框架如oh my zsh,这使得zsh的功能扩展变得极为容易,你可以向管理vim插件一样管理zsh插件。

  1. zsh安装与配置

先查看自己现在是啥shell?(一般是bash)

1
2
3
echo $SHELL  # 应该会显示/usr/bin/bash
# 或
echo $0      # 应该显示 "-bash"

现在让我们来安装zsh吧。

1
2
3
4
5
# Debian系
sudo apt install zsh

#红帽系
sudo dnf install zsh

确认一下自己是否安装成功

1
2
3
# 查看shell版本
bash --version
zsh --version

如何配置zsh呢?

bash差不多。

zsh的全局配置文件位于/etc/zsh.zshc, 单用户配置文件位于~/.zshrc

但不推荐你现在修改任何一个文件,因为我们有更加优雅的配置方式:

  1. oh my zsh!

项目地址:

https://github.com/ohmyzsh/ohmyzsh

oh my zsh是当下最流行的zsh插件管理工具,相当于vim中的vim-plug或vundle。

安装oh my zsh

1
2
3
4
5
# 方式一(可能需要科学上网)
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# 方式二
sh -c "$(curl -fsSL https://install.ohmyz.sh/)"

下图可选是否现在就把zsh设置成默认的。

如上图即安装成功。

  1. 配置oh my zsh

现在查看.zshrc文件,你会发现oh my zsh已经几乎帮你配置好了。

如果你想使用插件,可以找到plugins,在其中添加即可。

这里给出我的.zshrc供你参考。

  1. 定制独一无二的zsh

还记得上文中我提到不建议修改.zshrc,这是因为我们在使用oh my zsh框架后,oh my zsh会建立一个~/oh-my-zsh目录用于存放相关文件,其中有一个名为custom的文件夹,我们可以将我们的配置脚本放在此处,oh my zsh会自动加载这一目录下的vim脚本。

基本支持bash的配置命令。以博主为例,bashrc脚本迁移到zsh未作任何改动。

我创建了一个名为myshrc.zsh的脚本以存储配置,文件如下供你参考。

1
2
3
cd /home/用户名/.oh-my-zsh/custom
touch ./myshrc.zsh
vim ./myshrc.zsh

将自己~/.bashrc里自己多添加的设置全部复制到该文件中即可。

例如我的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 配置CUDA
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

# 配置ROS-DISTRO
export ROSDISTRO_INDEX_URL=https://mirrors.bfsu.edu.cn/rosdistro/index-v4.yaml

# 配置ROS1 Noetic
# source /opt/ros/noetic/setup.zsh
# export ROS_MASTER_URI=http://localhost:11311
# export ROS_HOSTNAME=localhost
# export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/home/tungchiahui/UserFloder/MySource/ROS_WS/gazebo_models:/home/tungchiahui/UserFloder/MySource/ROS_WS/ign_models

# 配置ROS2 Humble
source /opt/ros/humble/setup.zsh
export ROS_DOMAIN_ID=6
export IGN_GAZEBO_RESOURCE_PATH=$IGN_GAZEBO_RESOURCE_PATH:/home/tungchiahui/UserFloder/MySource/ROS_WS/gazebo_models:/home/tungchiahui/UserFloder/MySource/ROS_WS/ign_models

接着可以刷新当前终端环境

1
2
3
4
# 刷新环境
source ~/.zshrc
# 检查自己的配置是否生效
echo $LD_LIBRARY_PATH 

对应着我上面我的配置,会对应echo打印出下列即为成功。

1
/usr/local/cuda/lib64:/usr/local/cuda/lib64: 
  1. 切换默认shell

如果在下图选择了yes,就不用再重新设置了。

1
chsh -s $(which zsh)
1
2
echo $SHELL  # 应输出 "/usr/bin/zsh"
echo $0      # 若显示 "-zsh",表示已生效

完毕!

如果这里发现无法设置成默认,如下图:

那么使用下方命令强制修改:

1
2
3
4
5
6
7
# 强制修改
sudo usermod -s /usr/bin/zsh tungchiahui(用户名)
# 验证
grep tungchiahui(用户名) /etc/passwd  # 检查是否显示 "/usr/bin/zsh"

# 重启
sudo reboot

重启后验证

1
2
echo $SHELL  # 应输出 "/usr/bin/zsh"
echo $0      # 若显示 "-zsh",表示已生效

再次完毕!

  1. 添加插件教程

  2. powerlevel10k

这个插件是美化zsh的,优点是不会怎么影响终端性能,速度比较快。

https://github.com/romkatv/powerlevel10k

安装powerlevel10k

1
2
3
4
5
6
7
# 国外用户
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc

# 国内用户
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ~/powerlevel10k
echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc

下载字体

下面的任选其一

1
2
# 刷新当前环境变量
source ~/.zshrc

这里需要检查图标是否都显示正常,显示不正常就证明字体有问题,关闭终端再重新打开看看字体还有问题吗?

没问题就一直y.

建议参考这个教程的配置。

https://www.bilibili.com/video/BV1dX4y127JL

下面是配置好的样子:

如果想重新配置就输入:

1
p10k configure

VScode如果图标显示不全的话,如下操作即可。

  1. 搜索 Terminal › Integrated: Font Family

输入支持 Nerd Font 的字体名称,例如:

```Plain Text MesloLGS NF

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
(注意 `MesloLGS NF` 必须放在首位)

2.  **用基础连字支持**
    

搜索 `Terminal › Integrated: Font Ligatures`

勾选 `Enabled`(允许字体渲染特殊连字符号)

3.  **确保 GPU 加速开启**
    

*   搜索 `Terminal › Integrated: Gpu Acceleration`
    
*   设置为 `on`(提升渲染性能)
    

**若 GPU 加速导致问题**

*   尝试设置为 `off` 后重启终端
    
*   检查 Fallback Ligatures 是否生效
    

![](https://cdn.eo.r2.tungchiahui.cn/tungwebsite/assets/images/2024-03-30/image308.png)

再重开终端即可(GPU设置必须重启终端)

![](https://cdn.eo.r2.tungchiahui.cn/tungwebsite/assets/images/2024-03-30/image309.png)

  

  

10.  ## Flatpak软件管理工具
    

flatpak类似于apt和dnf等包管理工具,可以安装软件,但安装的不是最基础的软件,是QQ,QQ音乐这种软件。

当你的apt或者dnf没有某个软件时,可以去flathub上去看看是否有这个软件。

1.  ### flatpak安装
    

https://flatpak.org/

1.  Ubuntu
    

```bash
# 安装flatpak
sudo apt update && sudo apt install flatpak

# 先添加官方国外源
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

# 再修改为中科大镜像源
sudo flatpak remote-modify flathub --url=https://mirrors.ustc.edu.cn/flathub

# 查看仓库详情
flatpak remotes --show-details

  1. Fedora

Fedora已经自带。

1
2
3
4
5
6
7
8
# 先添加官方国外源
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

# 再修改为中科大镜像源
sudo flatpak remote-modify flathub --url=https://mirrors.ustc.edu.cn/flathub

# 查看仓库详情
flatpak remotes --show-details

  1. 安装软件

https://flathub.org/

去上面的官网搜索软件+下载软件。

1
flatpak install flathub com.obsproject.Studio

  1. 运行软件

方法一(官方)

1
flatpak install flathub com.obsproject.Studio

方法二(直接当普通软件运行即可)

  1. Appimage

比如说,QQ音乐只提供deb,appimage.并不提供rpm格式的安装包(1.1.7版本是这样的,以后估计rpm会给。纯纯开发者欠C了,连rpm都不给。)所以说我想在Fedora上安装QQ音乐要么用appimage,要么选择用flatpak.(这里使用appimage)

先下载appimage

https://y.qq.com/download/download.html

再去google下载个QQ音乐图标(因为google可以下载透明图标)

给他们放在/home/用户名的某个文件夹中(这个自己定,比如我是/home/tungchiahui/UserFloder/Applications/qqmusic/文件夹)

先给QQ音乐执行权限

1
2
cd ~/UserFloder/Applications/qqmusic
sudo chmod +x ./qqmusic-1.1.7.AppImage

给QQ音乐配置 快捷方式

1
2
3
4
cd ~/.local/share/applications/
touch ./qqmusic.desktop
vim ./qqmusic.desktop
sudo chmod +x ./qqmusic.desktop

内容如下

1
2
3
4
5
6
7
[Desktop Entry]
Name=QQ音乐
Exec=/home/tungchiahui/UserFloder/Applications/qqmusic/qqmusic-1.1.7.AppImage
Icon=/home/tungchiahui/UserFloder/Applications/qqmusic/QQ_Music2023.svg
Type=Application
Categories=Audio;Music;Player;
Comment=QQ Music Client for Linux

此时找到软件就可以打开了,如果找不到,请重启,部分不先进的发行版刷新图标列表不会很快。

如果QQ音乐闪退,这个只是QQ音乐自己软件的问题,按下图这样做。

如果你用的不是KDE,那么也可以直接修改qqmuic.desktop:在exec的末尾加上--no-sandbox

1
2
3
4
5
6
7
[Desktop Entry]
Name=QQ音乐
Exec=/home/tungchiahui/UserFloder/Applications/qqmusic/qqmusic-1.1.7.AppImage --no-sandbox
Icon=/home/tungchiahui/UserFloder/Applications/qqmusic/QQ_Music2023.svg
Type=Application
Categories=Audio;Music;Player;
Comment=QQ Music Client for Linux

  1. 修改HOSTNAME

例如我要修改为Dell-G15-5511

1
2
3
4
5
6
7
8
9
sudo hostnamectl set-hostname "Dell-G15-5511"

hostnamectl | grep "Static hostname"      # 验证静态主机名

sudo systemctl restart systemd-hostnamed  # 重启主机名服务
sudo systemctl restart NetworkManager      # 重启网络服务
sudo reboot

echo $HOSTNAME           # 验证主机名

  1. 删掉应用配置

有的应用配置有问题,可以删掉他的缓存。

缓存在~/.config文件夹下。

比如VScode出问题了:

这样删掉他就结束了。

而下面的这个~/.vscode是扩展。

  1. QEMU-KVM虚拟机

QEMU-KVM是一个高性能的虚拟机,以下是以安装RockyLinux9为例.

  1. 安装必备软件

确保主机已经安装了 QEMU、KVM 和相关工具。以基于 Debian/Ubuntu 的系统为例,执行以下命令:

1
2
sudo apt update
sudo apt install qemu-kvm qemu-img virt-manager virt-install virt-viewer libvirt libvirt-daemon libvirt-daemon-qemu bridge-utils virglrenderer

对于基于 Fedora/CentOS/Rocky Linux 的系统,命令可能是:

1
sudo dnf install qemu-kvm qemu-img virt-manager virt-install virt-viewer libvirt libvirt-daemon libvirt-daemon-qemu bridge-utils virglrenderer

安装完成后,确保当前用户在 kvm 组中(否则可能没有权限使用 KVM 加速):

1
sudo usermod -aG kvm $USER

注意: 修改组后可能需要注销重新登录才能生效。

  1. 打开KVM硬件加速

运行以下命令检查 KVM 是否启用:

1
egrep -c '(vmx|svm)' /proc/cpuinfo

如果输出 0,说明 CPU 不支持 KVM 或未开启 VT-x(Intel)/ SVM(AMD),需要在 BIOS 里开启 Intel VT-xAMD SVM

然后检查 KVM 模块是否加载:

1
2
3
4
5
# 验证 KVM 加速可用
lsmod | grep kvm

# 验证当前用户有权限访问 /dev/kvm
ls -l /dev/kvm

如果没有输出,加载 KVM 模块:

1
2
sudo modprobe kvm_intel  # Intel 处理器
sudo modprobe kvm_amd    # AMD 处理器
  1. 创建虚拟硬盘文件

你需要为虚拟机创建一个硬盘镜像文件。这里以 qcow2 格式、100GB 为例(你可以根据需要调整大小)。在终端中运行:

1
qemu-img create -f qcow2 disk.qcow2 100G

这将在当前目录下生成一个名为 disk.qcow2 的虚拟硬盘文件。

  1. 准备 OVMF(UEFI 固件)文件

安装 OVMF 包。例如,在 Ubuntu 上可通过以下命令安装:

1
2
3
# 一般电脑都默认安装过了
sudo apt install ovmf # Debian/Ubuntu
sudo dnf install edk2-ovmf # RHEL/CentOS/Fedora

安装后,查找文件路径,通常位于 /usr/share/OVMF/OVMF_CODE.fd/usr/share/ovmf/OVMF.fd。直接在命令中使用正确路径。(下方脚本中有例子,你只需要确保你的/usr/share/OVMF/下有这俩文件即可)

也可以下载下面这个文件:

暂时无法在飞书文档外展示此内容

  1. 编写或调整 run.sh 脚本

将下面的内容写入你的 run.sh 文件(你可以使用文本编辑器)。

1
sudo vim ./run.sh

下面的脚本示例使用 QEMU 启动虚拟机并加载 ISO 镜像:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/bash

qemu-system-x86_64 \
    -machine q35,vmport=off,kernel_irqchip=on \
    -accel kvm \
    -cpu host,kvm=on,vmx=on,migratable=on,+invtsc \
    -smp 8,sockets=1,cores=4,threads=2 \
    -m 8G,slots=4,maxmem=32G \
    -device virtio-gpu-gl-pci,max_outputs=1 \
    -vga none \
    -display sdl,gl=on \
    -audiodev pa,id=pa1,server=unix:/run/user/1000/pulse/native \
    -device ich9-intel-hda \
    -device hda-micro,audiodev=pa1 \
    -device qemu-xhci,id=xhci \
    -device virtio-tablet-pci \
    -device usb-kbd,bus=xhci.0 \
    -bios OVMF-pure-efi64.fd \
    -boot d \
    -blockdev driver=qcow2,node-name=disk1,file.driver=file,file.cache.direct=on,file.aio=io_uring,file.filename=disk.qcow2 \
    -device virtio-blk-pci,drive=disk1 \
    -drive file=kubuntu-20.04.6-desktop-amd64.iso,media=cdrom,if=none,id=cdrom \
    -device usb-storage,drive=cdrom,removable=on \
    -nic user,model=virtio-net-pci,hostfwd=tcp::8022-:22 \
    -monitor stdio \
    -parallel none \
    -serial none \
    -msg timestamp=on

保存后给脚本执行权限:

1
sudo chmod +x run.sh
  1. 启动虚拟机

确保当前目录下有以下文件:

  • run.sh

  • disk.qcow2(刚刚创建的虚拟硬盘)

  • Rocky-9.4-x86_64-dvd.iso(Rocky Linux 9 安装 ISO)

  • OVMF-pure-efi64.fd文件

然后在终端中运行脚本:

1
./run.sh

此时,QEMU 应该会启动一个窗口,并加载 ISO 镜像进入安装界面。

  1. 安装系统

在虚拟机窗口中,你会看到 Linux 的安装界面。按照安装向导的步骤进行安装。安装完成后,你可能需要调整启动项,将硬盘作为启动介质(如果默认还是从 CD 启动)。

建议: 安装好系统后,关闭虚拟机,再修改 run.sh 将 ISO 镜像移除或改为可选启动设备,这样下次启动时就会直接从硬盘启动。

例如,将 -drive file=Rocky-9.5-x86_64-dvd.iso,media=cdrom 移除,或者更换为启动顺序参数。

  1. 其他操作

  2. 显卡直通(谨慎,不懂不要乱搞)

此操作的意思是把显卡完全给虚拟机用,实体宿主机就没法用显卡了.

  1. 主机和 IOMMU 配置

(1) 启用 IOMMU(以 Intel 为例)

编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX_DEFAULT 中加入:

1
intel_iommu=on iommu=pt

对于 AMD 主机则设置 amd_iommu=on

更新 grub 后重启:

1
2
3
sudo grub2-mkconfig -o /boot/grub2/grub.cfg   # CentOS/Fedora/Rocky 系列
# 或者
sudo update-grub   # Ubuntu/Debian 系统

可以在重启后用下面命令确认 IOMMU 是否启用:

1
dmesg | grep -e DMAR -e IOMMU

如果看到类似“DMAR: IOMMU enabled”之类的信息,就说明生效了。

(2) 查找你的 NVIDIA 显卡设备 ID 使用 lspci -nn | grep NVIDIA 查找显卡,例如:

1
2
3
4
5
tungchiahui@Dell-G15-5511:~/Downloads$ lspci -nn | grep NVIDIA 
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA106M [GeForce RTX 3060 Mobile / M
ax-Q] [10de:2560] (rev a1) 
01:00.1 Audio device [0403]: NVIDIA Corporation GA106 High Definition Audio Controller [10de:228
e] (rev a1)

记下上面的 PCI 地址和设备 ID。

显卡 PCI 地址:01:00.0 设备 ID:10de:2560

显卡音频 PCI 地址:01:00.1 设备 ID:10de:228e

(3) 绑定设备到 vfio 驱动

另一种方式是创建一个 modprobe 配置文件,让 vfio-pci 在加载时绑定这些设备。

  1. 创建文件(例如 /etc/modprobe.d/vfio.conf):
1
sudo vim /etc/modprobe.d/vfio.conf
  1. 在文件中写入:
1
options vfio-pci ids=10de:2560,10de:228e
  1. 保存文件后,更新 initramfs:
1
2
3
4
# debian系选这个
sudo update-initramfs -u
# 红帽系选这个
sudo dracut --force
  1. 重启系统。

  2. 检查设备绑定情况

重启后,你可以用下面命令检查设备是否已经被 vfio-pci 驱动接管:

1
lspci -nnk | grep -A3 "10de:2560"

你应该能看到类似:

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA106M [GeForce RTX 3060 Mobile / Max-Q] [10de:2560]
        Subsystem: ...
        Kernel driver in use: vfio-pci

同样用相似的命令检查音频设备(10de:228e)。

1
lspci -nnk | grep -A3 "10de:228e"

如果看到 Kernel driver in use: vfio-pci,说明绑定成功。

(4) 启动选项

在run.sh里添加上下面两行

1
2
3
    # 直通 NVIDIA 显卡
    -device vfio-pci,host=01:00.0,multifunction=on,x-vga=on \
    -device vfio-pci,host=01:00.1 \
  1. 拓展功能

  2. Wine

  3. Android

  4. I卡、A卡

  5. Wayland-Waydroid(体验超级好)

https://waydro.id/

  1. N卡(So Nvidia Fxxk U!)

  2. QEMU-KVM虚拟机 + BlissOS-X86

    https://www.bilibili.com/video/BV1aS411P7Wh

    1. 比较推荐的配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    qemu-system-x86_64 \
            -M q35,vmport=off \
            -accel kvm \
            -cpu qemu64,+sse3,+sse4.2 \
            -smp 8,cores=4 \
            -m 6G \
            -usb \
            -device virtio-tablet \
            -device virtio-keyboard \
            -device usb-tablet \
            -bios OVMF-pure-efi64.fd \
            -net user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022 \
            -net nic,model=virtio \
            -audio sdl,model=hda \
            -display sdl,gl=on,show-cursor=on \
            -device virtio-vga-gl,xres=1920,yres=1080 \
            -drive file=disk.qcow2,media=disk,if=virtio,cache=writeback \
            -drive file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom \
            -monitor stdio \
            -serial none
    
    1. 常用操作:

      1. 全屏:Ctrl+Alt+F

      2. adb调试

        1. 使Linux与Android用ADB连接。
        1
        2
        3
        4
        5
        6
        
        # 连接安卓
        adb connect 127.0.0.1
        # 打开shell
        adb -s 127.0.0.1:5555 shell
        # 使用root权限
        su
        
      3. 中文输入法

        1. 可以下载google输入法:按Shift+space进行中英文切换(这样有效防止与linux本机的中英文切换冲突)
  3. 其他操作

  4. 工控机如何连wifi

当我们工控机从一个环境移动到另一个环境,且新的环境的wifi我们没有连接过,我们没有屏幕如何让工控机连上网呢?

进入工控机的硬盘目录,进入/etc/netplan/,底下有很多yaml,找到一个最符合下方格式的yaml:

network: 
  version: 2 
  wifis: 
    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96: 
      renderer: NetworkManager 
      match: 
        name: "wlan0" 
      dhcp4: true 
      dhcp6: true 
      access-points: 
        "EMIS_Vinci_Robocon_5G": 
          auth: 
            key-management: "psk" 
            password: "vinci666" 
          networkmanager: 
            uuid: "6f414fe0-2658-48ff-89ee-c7981b87bc96" 
            name: "EMIS_Vinci_Robocon_5G" 
            passthrough: 
              wifi-security.auth-alg: "open" 
              ipv6.addr-gen-mode: "default" 
              ipv6.ip6-privacy: "-1" 
              proxy._: "" 
      networkmanager: 
        uuid: "6f414fe0-2658-48ff-89ee-c7981b87bc96" 
        name: "EMIS_Vinci_Robocon_5G"
 

将其改为新wifi的名和密码:

network:
  version: 2
  wifis:
    wlan0:
      dhcp4: true
      dhcp6: true
      access-points:
        "EMIS_Vinci_Robocon_5G":
          password: "vinci666"

工控机开机即可连上网。

  1. SSH远程开发

  2. 环境准备

1.硬件准备

首先要有一台工控机(X86小型电脑,专业工控机,树莓派等等)。

控制系统的硬件载体是具有多样性的,常用的多是基于ARM、x86等架构的处理器,比如:PC、工控机、树莓派、NVIDIA Jetson…。不同的处理器都存在一定的优缺点,PC和工控机,处理器性能强大,但是功耗高、体积大、灵活性差,嵌入式系统则反之。对于我们而言,可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。

无论选用何种处理器,只要是要进行机器人的开发,安装了ROS或者ROS2,那么对于开发人员而言,在使用上,没有任何本质的区别,或者换言之,作为软件工程师,部分场景下无需关注于硬件的选型。

2.设置固定IP

远程连接时,不管使用何种工具,需要根据IP地址定位到被连接的主机,再通过账号和密码登录该主机,因此,我们需要先获取该IP地址。并且每次连接时,都需要使用到IP,为了保证连接的便利性和稳定性,最好将被连接主机的IP地址设置为固定IP,具体操作如下。

1.进入设置界面

启动被连接的主机(启动时需要连接显示器或使用HDMI采集卡,并且配置完SSH远程访问之后,可以不再使用显示器或HDMI采集卡),并进入设置界面。

2.配置所连接的网络

3.设置固定IP

查看当前IP地址。

设置固定IP。

至此,IP配置完毕。

  1. 环境搭建

概念

SSH(Secure Shell)是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时,SSH都会自动对其进行加密。数据到达目的地时,SSH自动对加密数据进行解密。整个过程都是透明的,使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。

实现

SSH实现架构上分为客户端和服务器端两大部分,客户端是数据的发送方,服务端是数据的接收方,当前场景下,我们需要从本地主机发送数据到远程主机,那么本地主机需要安装并启动SSH客户端,而远程主机则需要安装并启动SSH服务端,整个实现具体流程如下:

  1. 本地主机安装SSH客户端,远程主机安装SSH服务端;

  2. 远程主机启动SSH服务;

  3. 本地主机登陆远程主机;

  4. 实现数据传输。

1.安装SSH客户端与服务端

默认情况下,Ubuntu系统已经安装了SSH客户端,因此只需要在远程主机安装SSH服务端即可,安装命令如下:

```Plain Text sudo apt install openssh-server

1
2
3
4
5
如果SSH客户端需要自行安装,那么调用如下命令:

```Plain Text
sudo apt install openssh-client

2.远程主机启动SSH服务

远程主机启动 ssh 服务命令如下:

```Plain Text sudo /etc/init.d/ssh start

1
2
3
4
5
启动后可使用如下命令查看服务是否正常运行:

```Plain Text
ps -e | grep ssh

如果启动成功,会包含 sshd 程序。

以后需要频繁的使用ssh远程登录,为了简化实现,可以将远程主机的ssh服务设置为开机自启动,命令如下:

```Plain Text sudo systemctl enable ssh

1
2
3
4
5
6
7
3.本地远程登录

登录远程主机可以调用如下命令:

```bash
ssh -X 用户名@ip地址

然后根据提示,录入登陆密码,即可成功登录。

如果退出,可以调用exit命令:

```Plain Text exit

1
2
3
4
5
6
7
8
9
**4.实现数据传输**

通过SSH在本地主机只需调用相关指令,便可方便的实现与远程主机的数据上传或下载,指令格式如下所示:

上传文件指令格式如下:

```Plain Text
scp 本地文件路径 账号@ip:路径

上传文件夹指令格式如下:

```Plain Text scp -r 本地文件夹路径 账号@ip:路径

1
2
3
4
5
下载文件指令格式如下:

```Plain Text
scp 账号@ip:路径 本地文件夹路径

下载文件夹指令格式如下:

```Plain Text scp -r 账号@ip:路径 本地文件夹路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
**优化**

每次远程登录时,都需要输入密码,使用不方便,可以借助密钥简化登录过程,实现免密登录,提高操作效率。实现思想是:生成一对公钥私钥,私钥存储在本地,公钥上传至服务器,每次登录时,本地直接上传私钥到服务器,服务器有匹配的公钥就认为是合法用户,直接创建SSH连接即可。具体实现步骤只有两步:

1.  本地生成密钥对;
    
2.  将公钥上传至远程主机。
    

**1.生成密钥对**

本地客户端生成公私钥:(一路回车默认即可)

```Plain Text
ssh-keygen

上面这个命令会在用户目录.ssh文件夹下创建公私钥:

  1. id_rsa (私钥);

  2. id_rsa.pub (公钥)。

2.公钥上传

上传指令如下:

```Plain Text ssh-copy-id -i ~/.ssh/id_rsa.pub 账号@ip

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
上面这条指令是将本地公钥上传到远程主机的ssh目录下,该目录下有文件authorized\_keys保存了公钥内容。

以后再远程登录就无需录入密码了。

3.  ### 使用VScode优化
    

上一节,我们介绍了ssh远程连接的使用,但是如果只是纯粹使用ssh也存在一些不足,比如:编辑文件内容时,需要使用vi编辑器,且在一个终端内,无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发,这使我们可以以图形化的方式实现远程开发,比ssh的使用更方便快捷,可以大大的提高程序开发效率。

**1.准备工作**

VScode远程开发依赖于ssh,请首先按照上一节内容配置ssh远程连接。

**2.为VScode安装远程开发插件**

启动VScode,首先点击侧边栏的扩展按钮,然后在`扩展:商店`的搜索栏输入`Remote Development`并点击同名插件,最后在右侧显示区中点击`安装`。

![](https://cdn.eo.r2.tungchiahui.cn/tungwebsite/assets/images/2024-03-30/image336.png)

  

**3.配置远程连接**

步骤1:使用快捷键`ctrl + shift + p`打开命令输入窗口,并输入`Remote-SSH:Connect to Host...`,弹出列表中选择与之同名的选项。

![](https://cdn.eo.r2.tungchiahui.cn/tungwebsite/assets/images/2024-03-30/image337.png)

步骤2:步骤1完成将弹出一个新的命令窗口如下,选择下拉列表中的 `Add New SSH Host`。

![](https://cdn.eo.r2.tungchiahui.cn/tungwebsite/assets/images/2024-03-30/image338.png)

步骤3:步骤2完成又将弹出一个新的命令窗口,在其中输入:`ssh -X ubuntu@192.168.43.164`,其中,`ubuntu`需要替换为你的登录用户名,`192.18.43.164` 则替换为被远程连接主机的ip地址。

![](https://cdn.eo.r2.tungchiahui.cn/tungwebsite/assets/images/2024-03-30/image339.png)

步骤4:选择步骤3完成后的弹窗列表中的第一个选项(或直接回车),即可完成配置,配置成功后会有提示信息。

![](https://cdn.eo.r2.tungchiahui.cn/tungwebsite/assets/images/2024-03-30/image340.png)

![](https://cdn.eo.r2.tungchiahui.cn/tungwebsite/assets/images/2024-03-30/image341.png)

**4.使用**

步骤1:继续使用快捷键`ctrl + shift + p`打开命令输入窗口,并输入`Remote-SSH:Connect to Host...`,此时列表中将显示步骤3中配置的ip地址,直接选择,选择后,VScode将打开一个新的窗口。

![](https://cdn.eo.r2.tungchiahui.cn/tungwebsite/assets/images/2024-03-30/image342.png)

或者,也可以点击侧边栏的`远程资源管理器`,在弹出的服务器列表中选择要连接的服务器,并右击,选择在本窗口或新窗口中实现远程连接。

![](https://cdn.eo.r2.tungchiahui.cn/tungwebsite/assets/images/2024-03-30/image343.png)

步骤2:选择菜单栏的`文件`下的`打开文件夹`,在弹窗列表中选择需要打开的文件夹并点击确定即可。

![](https://cdn.eo.r2.tungchiahui.cn/tungwebsite/assets/images/2024-03-30/image344.png)

最终,我们就可以像操作本地文件一样实现远程开发了。

  

3.  ## 远程桌面
    

因为用X11转发效率太低太低,所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等(如果有需求的话)

我们选择使用VNC来看。

1.  安装VNC服务器:
    

这里以TigerVNC为例进行安装:

```bash
sudo apt install tigervnc-standalone-server tigervnc-common
  1. 设置VNC密码:

为VNC用户设置密码,运行以下命令:

1
vncpasswd
  1. 配置VNC启动脚本:

创建VNC配置文件,在用户家目录内的.vnc文件夹中创建启动文件:

1
2
mkdir -p ~/.vnc
nano ~/.vnc/xstartup

在打开的编辑器里面输入以下内容(以GNOME为例):

1
2
3
4
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
gnome-session

保存并退出(在nano中按Ctrl + O保存,然后按Ctrl + X退出)。

  1. 给予执行权限:

为xstartup文件设置执行权限:

1
chmod +x ~/.vnc/xstartup
  1. 启动VNC服务器:
1
vncserver -geometry 1920x1080 -localhost=0

geometry 选项指定窗口大小,localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)

你将看到类似于:1的输出,这表示VNC会话的显示编号。例如,如果输出为:1,则VNC监听的端口为5901(5900 + 显示编号)。

  1. 查看已开启的VNC服务器:
1
vncserver -list

  1. 连接到VNC服务器:

使用VNC客户端(如vncviewer)连接到VNC服务器,输入你的服务器IP和端口。例如,如果服务器IP为192.168.31.10,且显示编号为1,你应该连接到192.168.31.10:1,或者直接输入192.168.31.10:5901。

  1. 停止VNC服务器:

如果需要停止VNC服务器,可以使用以下命令:

1
vncserver -kill :1

将:1替换为你实际使用的显示编号。

  1. USB端口设置

首先先配置好权限

1
2
3
4
5
# 将用户权限提高
sudo usermod -aG dialout $USER
newgrp dialout
# 查看下面命令是否输出dialout(若输出才正常)
groups

因为我们插拔USB设备,他的端口号可能会一直变,所以我们要给他的tty起一个固定的别名。

  1. 根据USB设备绑定端口(多个不同设备)

需求: Ubuntu系统中现接入雷达和智能小车,请为二者绑定端口。

实现原理: 可以通过USB设备本身的“标识”实现端口绑定。

流程如下:

(1).查找设备idVendor和idProduct

接入两个USB设备,在终端调用指令lsusb查看显示系统中以及连接到系统的USB设备信息。

如上图所示,红色方框内数据为USB设备,ID后面的1a86:7523分别为USB的idVendor和idProduct(两个参数之间使用”:“分隔)。

另外:可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。

(2).编写映射规则

/etc/udev/rules.d目录下新建文件xxx.rules(文件名自定义)

1
sudo vim /etc/udev/rules.d/xxx.rules

输入如下内容:

1
2
KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", SYMLINK+="mylidar"
KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0777", SYMLINK+="mycar"

代码解释:

  • KERNEL是内核固定名称,这里统一是“ttyUSB*”;

  • MODE是节点权限,通常改为“0777”,表示可读写可运行;

  • SYMLINK是符号连接,即绑定的别名;

  • ATTRS是设备厂商的唯一标识,idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。

小提示:一般的USB设备供应商都会提供类似的脚本文件,对于调用者而言,直接复制该文件到/etc/udev/rule.d目录即可。

td {white-space:nowrap;border:0.5pt solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;} | 设备类型 | 内核名称示例 | 说明 | |:—|:—|:—| | USB 串口设备 | ttyUSB* | USB 转串口设备,如 /dev/ttyUSB0 | | 串口设备 | ttyS* | 物理串口设备,如 /dev/ttyS0 | | 存储设备 | sd* | SCSI 磁盘设备,如 /dev/sda | | 网络设备 | eth* | 以太网设备,如 /dev/eth0 | | 输入设备 | event* | 输入事件设备,如 /dev/input/event0 | | 蓝牙设备 | rfcomm* | 蓝牙串口设备,如 /dev/rfcomm0 |

(3).使规则生效

在终端下输入如下指令:

1
2
3
4
5
6
7
# Ubuntu用下方命令
sudo service udev reload
sudo service udev restart

#Fedora用下方命令
sudo udevadm control --reload
sudo udevadm trigger

再重新插拔设备即可。

(4).测试

终端下输入如下指令

1
ll /dev | grep ttyUSB

运行结果如下:

也可以多次插拔USB设备,会发现设备端口ttyUSBn中的n编号会变动,但是别名是始终可以指向对应的USB设备的。至此,就可以使用别名来关联所需使用的USB设备了。

缺点:

上述实现也存在一定的局限性,当Ubuntu接入两台或多台相同型号的USB设备时,由于设备ID是一样的,该种实现方式只会对其中的一台设备生效,这种情况下,就需要通过第二种策略来实现端口的绑定了。

  1. 根据主机硬件绑定端口(多个相同设备)

需求: 无人车中现接入一前一后两台相同型号的雷达,请为二者绑定端口。

实现原理: USB设备所连接主机的USB接口也是有其“标识”的,可以通过这个标识实现端口绑定。

流程如下:

(1).查看所连接的主机USB接口的KERNELS

调用如下指令查看第一台雷达的USB信息:

1
2
udevadm info --attribute-walk --name=/dev/ttyUSB0 | grep KERNELS
udevadm info --attribute-walk --name=/dev/ttyACM0 | grep KERNELS

调用如下指令查看第二台雷达的USB信息:

1
udevadm info --attribute-walk --name=/dev/ttyUSB1 | grep KERNELS

运行结果相比较不同的KERNELS,第一台雷达端口地址为KERNELS==1-1.3:1.0,第二个雷达端口地址为KERNELS==1-1.4:1.0。可以使用此数据作为不同端口的“唯一性标识”。

(2).编写映射规则

/etc/udev/rules.d目录下新建文件xxx.rules(文件名自定义),输入如下内容:

1
sudo vim /etc/udev/rules.d/xxx.rules
1
2
KERNEL=="ttyUSB*", KERNELS=="1-1.3:1.0", MODE:="0777", SYMLINK+="rplidar_front"
KERNEL=="ttyUSB*", KERNELS=="1-1.4:1.0", MODE:="0777", SYMLINK+="rplidar_back"

(3).使规则生效

在终端下输入如下指令:

1
2
3
4
5
6
7
# Ubuntu用下方命令
sudo service udev reload
sudo service udev restart

#Fedora用下方命令
sudo udevadm control --reload
sudo udevadm trigger

再重新插拔设备即可。

(4).测试

终端下输入如下指令,运行结果如下:

1
ll /dev | grep ttyUSB

至此,就可以使用别名来关联所需使用的USB设备了。

缺点: USB设备必须连接在主机的指定端口上,否则,会导致端口绑定失败,或产生逻辑错误。(而且增加新设备可能会导致端口改变)

  1. 根据其他属性绑定端口

(1).查看所连接的主机USB接口的信息

1
2
udevadm info -a -p $(udevadm info -q path -n /dev/ttyACM0)
udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)

这些数据都是不会变的,所以可以拿这些数据来做标识

(2).编写映射规则

/etc/udev/rules.d目录下新建文件xxx.rules(文件名自定义),输入如下内容:

1
sudo vim /etc/udev/rules.d/xxx.rules
1
2
3
KERNEL=="ttyACM*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55d4", ATTRS{serial}=="0001", MODE:="0777", SYMLINK+="ttyACM_Lidar"
KERNEL=="ttyACM*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55d4", ATTRS{serial}=="0002", MODE:="0777", SYMLINK+="ttyACM_MCU"
KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0777", SYMLINK+="ttyUSB_IMU"

(3).使规则生效

在终端下输入如下指令:

1
2
3
4
5
6
7
# Ubuntu用下方命令
sudo service udev reload
sudo service udev restart

#Fedora用下方命令
sudo udevadm control --reload
sudo udevadm trigger

再重新插拔设备即可,或者 直接重启系统。

(4).测试

终端下输入如下指令ll /dev | grep ttyUSB,运行结果如下:

至此,就可以使用别名来关联所需使用的USB设备了。

缺点: 一些设备可能没有串口号等。

  1. 其他注意事项

并非所有的USB设备端口号都是ttyUSBn的格式,比如Arduino的端口号可能是ttyACMn,而对于USB摄像头而言,一台设备则对应两个端口号,分别是videonvideo(n+1),并且启用摄像头设备一般使用的是videon端口,绑定时需要关联的也是该接口。

但是无论是外接何种USB设备,也不管采用上述两种方案的哪一种进行端口绑定,其原理都是类似的,只是实现细节不同而已。如果是外接的Arduino设备,那么需要在rules文件中的将KERNEL=="ttyUSB*"修改为KERNEL=="ttyACM*",如果外接的是USB摄像头,那么则需要在rules文件中的将KERNEL=="ttyUSB*"修改为类似于KERNEL=="video[0,2,4,6]"的格式,其中video[0,2,4,6]表示可以绑定的端口为video0video2video4video6

  1. Linux分区Gui工具

```Plain Text sudo apt install gparted sudo dnf install gparted

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  

  

6.  ## 挂载内网网页
    

可以把本地的网页挂载到路由器端,或者同内网段其他设备上,甚至可以挂载在本地。

下面以安卓设备为例子,由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器,再通过浏览器查看。

由于安卓系统基于Linux内核,所以我们可以下载一个叫termux的app来敲一些Linux命令:

https://github.com/termux/termux-app

首先打开app后,先更新软件缓存:

```bash
pkg update

然后换源

1
nano $PREFIX/etc/apt/sources.list

将该文件内容替换为下面:

1
deb https://mirrors.bfsu.edu.cn/termux/termux-packages-24 stable main
  • 如果你使用的是nano编辑器:

    • Ctrl+O 保存文件。

    • Enter 确认文件名。

    • Ctrl+X 退出编辑器。

  • 如果你使用的是vim编辑器:

    • Esc 退出编辑模式。

    • 输入 :wq 保存并退出。

接下来重新更新软件源:

1
pkg update && pkg upgrade

安装python:

1
pkg install python3

通过Termux访问设备存储

如果文件在安卓设备上,可以使用Termux的文件管理器访问设备的存储:

1
termux-setup-storage
  1. 进入HTML文件所在的目录

    1. 使用cd命令进入HTML文件所在的目录:
1
cd ~/your_html_folder
  1. 启动Python HTTP服务器

    1. 运行以下命令启动一个简单的HTTP服务器:
    1
    
    python3 -m http.server 8000
    
    1. 这会在端口8000上启动一个Web服务器。
  • 启动服务器后,Termux会显示日志信息,例如:

Plain Text Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

  • 这表示服务器已成功启动。

在浏览器中访问HTML文件

  1. 在同一设备上访问

    1. 打开安卓设备上的浏览器(如Chrome),输入以下地址:
    http://localhost:8000
    
    1. 如果HTML文件中有index.html,它会自动加载;否则,你需要手动点击文件链接。