我想了解更多关于 Linux 的信息。还有什么比让它成为我的日常司机更好的方法呢?

现在才一个多月,所以我想我会分享我使用和安装 Linux 的经验以及我在此过程中遇到的一些惊喜。

现在,作为记录,我以前使用过 Linux,但主要用于工作中的 Docker 构建系统,但我从未将它用作我台式机上的日常驱动程序。

Guru or nooby - 我希望你觉得这篇文章在某种程度上有用或有趣。

我的设置的快速摘要

发行版:无效 Linux 基础映像

2022 年 3 月更新: 我切换到 NixOS

我选择了 Void Linux 作为我的第一个镜像。这是一个非常简单的发行版,类似于 Arch 和 Gentoo。我喜欢在允许将包添加到注册表之前由其他开发人员审核的想法。它还运行 runit 作为它的 init 系统,我喜欢它的哲学(小代码库,单一责任)。这就是我要说的。

如果您正在寻找的只是准系统发行版,但不知道选择什么/如何选择,我建议您从 Arch Linux 开始,因为它有大量的文档和一个非常大的社区。

其余设置

好的闪电回合,这是我设置的其他一些有趣的部分:

要点:

  • _文件系统格式:_带有zstd压缩的F2FS(基准测试非常快)

  • _默认外壳:_鱼

用户界面的东西:

  • Window manager: Swaywm with Waybar

  • _Shell主题:_潮

  • GTK UI 主题: Adwaita Dark

  • San-serif 字体: Inter

  • Serif font: ... Inter...我会挑选一个好的衬线字体,最终我保证:3

  • Monospace 字体: Jetbrains Mono

  • Cursor 主题: Elementary OS

应用:

  • 文件管理器: Nautilus

  • VM for Windows: QEMU/KVM with virt-manager

  • 媒体播放器: Haruna

  • 终端模拟器: Alacritty

  • VM 软件:KVM、QEMU、libvirt、virsh 和窥镜

好吧,让我们继续。

您可以使用任何发行版的文档

在尝试配置 Linux 时,几乎所有发行版的 doco 都可以。您只需要了解发行版之间的差异,我相信,至少从用户的角度来看,发行版之间的差异远远少于您所相信的。

在使用 Arch Linux 的 wiki 时,情况确实如此。我最终使用 Arch wiki 而不是 Void Linux 文档!

发行版之间存在一些哲学差异(例如滚动与点发布,已审核的软件包存储库与未经审计的软件包存储库等),但一般而言,在库和软件方面没有太多技术差异发行版。但是,我发现在设置 Void 时需要注意两个主要区别:

包管理器: Void Linux 使用“X Binary Package Manager”,而 Arch 使用“pacman”。一般来说,这主要归结为不同的 CLI 语义。此外,有时 AUR(Arch 的包存储库)中不太流行的包在 Void 的包存储库中没有任何等价物。

初始化系统: Void Linux 使用“runit”,而 Arch 使用“systemd”。在过去的一个月里,当我试图设置swaywm时,这只让我绊倒了一次,它提取了大多数软件依赖于工作的“systemd”部分,尽管你可以争辩说它有点违背了使用的目的一个轻量级的初始化系统开始。请参阅座位作为 elogind 的轻量级替代品。

无论如何,根据我的经验,我说只需选择一个发行版并运行它。如果需要,您可以随时切换发行版。只需确保在某种存储库或存储系统中跟踪您的设置/配置(这里是mine)。

让 Linux 启动是最令人沮丧的部分

我花了整整一周的时间才让 Linux 启动。部分原因是因为我想避免使用GRUB来支持EFI Stub。

事实证明,除非您创建一个名为/EFI/boot/bootx64.efi的引导加载程序文件,否则某些主板的 UEFI(包括我的)将无法正常工作。

就我而言,我对efibootmgr所做的任何更改都会在我重新启动机器后立即消失。当我创建一个bootx64.efi文件时,它才开始工作。它甚至不必是一个有效的 EFI 文件,该文件只需_存在_。

所以...我的桌面现在有两个 GPU

2022 年 3 月更新:Nvidia 现在有开源驱动程序!

2021 年 9 月更新:Nvidia 驱动程序可能在其下一次更新中完全支持 Sway

有些读者可能知道这是怎么回事。

我有一块英伟达显卡。

英伟达在 Linux 社区的很多人那里得到了相当糟糕的评价。从字面上看,我需要使用带有--my-next-gpu-wont-be-nvidia的标志来运行我的窗口管理器。

[Linux Torvald 的名言。图片来自 https://i2.wp.com/itsfoss.com/wp-content/uploads/2012/09/Linus-Torvalds-Fuck-You-Nvidia.jpg?wu003d600&sslu003d1](https:// /res.cloudinary.com/practicaldev/image/fetch/s--vS2zghgb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ jb28pz8x7r8asi8ruyz3.png)。

这个话题读起来很刺激🌶️🌶️🌶️🌶️🌶️,但长话短说,在撰写本文时(2021 年 8 月 22 日),Nvidia 的专有驱动程序并不完全支持称为通用缓冲区管理 (GBM) 的 API ) - 一个或多或少普遍认可的 API 需要大多数 Wayland 合成器库(如 swaywm 使用的wlroots的官方版本),并且或多或少地受到所有其他硬件制造商的驱动程序的支持。这意味着当您使用 Nvidia GPU 时,不能正确支持很多现代桌面环境。

我已经链接了一些总结整个 Nvidia<>Linux 情况的帖子:

  • “Nvidia 很烂,我厌倦了”,作者 Drew Devault

  • Linus Torvald 的名言

  • Phoronix 关于 Nvidia 的 Wayland 支持的文章

幸运的是,有一种叫做PRIME的东西可以让您在不同应用程序的显卡之间切换。存在这样的事情对我来说非常令人兴奋——我从未见过 GPU 切换如此简单。

我仔细检查了旧硬件盒的深处,找到了一个 AMD GPU,我现在将它用作我的日常驱动程序来渲染我的桌面环境,我只需运行prime-run <application>即可切换到我较新的 Nvidia 显卡,用于需要更强大的 GPU 加速的应用程序,如游戏和Krita。

Nvidia 最近一直在努力通过他们最近的驱动程序来支持原生 Wayland,所以让我们希望我们能看到 Nvidia GPU 与 Wayland 上的其他 GPU 一样工作的那一天。

在 Windows 虚拟机中玩游戏

我还想玩游戏。

“我们有质子!!!”尖叫 Linux 游戏玩家的宝库。

是的,是的,降低你的音叉。安装 Wine+Proton,您就可以在 most 游戏中获得即插即用的游戏体验。

[来自 ProtonDB的屏幕截图](https://res.cloudinary.com/practicaldev/image/fetch/s--knJExo5u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/yviitddcquxxsotgage6.png)

但是,通过 Wine 支持 UWP 应用程序并不容易。这是通过 Microsoft Store 或 Xbox Game Pass 安装的每款游戏。在这种情况下,我发现双引导或使用 VM 是非常好的解决方案。

如果您只想要一个简单的解决方案,我建议您在您的机器上设置双启动,它非常简单且有据可查。

对于那里的黑暗之魂粉丝(即熟悉痛苦和苦难),请继续阅读。

GPU直通

如果你想玩游戏,你需要通过将 GPU 直接传递给 VM 来消除 GPU 的虚拟化开销。

我决定走虚拟机路线,因为我真的不想为了玩游戏而重新启动系统。

然而,事实证明这比我想象的要困难得多。

VFIO 驱动程序

“VFIO”驱动程序允许 GPU PCI 直通到您的 VM。这一点非常简单,您安装了一些驱动程序,在您的引导中添加了一些内核参数,向您的 VM 管理器添加了一些设置,然后......瞧! GPU直通!

除了它并不总是那么容易......

不良 IOMMU 团体的诅咒

为了简化问题:您的主板将您的 PCI 设备分配到“IOMMU”组中。如果要通过单个 PCI 设备,IOMMU 组中的_everything_ 必须通过。

如果我们使用以下脚本,取自Arch wiki:

#!/bin/bash
shopt -s nullglob
for g in `find /sys/kernel/iommu_groups/* -maxdepth 0 -type d | sort -V`; do
    echo "IOMMU Group ${g##*/}:"
    for d in $g/devices/*; do
        echo -e "\t$(lspci -nns ${d##*/})"
    done;
done;

进入全屏模式 退出全屏模式

我们得到了一份格式精美的 IOMMU 组列表以及其中的所有设备。

让我们看看我的一些 IOMMU 组好吗?

IOMMU Group 1:
    00:01.0 PCI bridge [0604]: Intel Corporation 6th-9th Gen Core Processor PCIe Controller (x16) [8086:1901] (rev 07)
    00:01.1 PCI bridge [0604]: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x8) [8086:1905] (rev 07)
    01:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Barts PRO [Radeon HD 6850] [1002:6739]
    01:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Barts HDMI Audio [Radeon HD 6790/6850/6870 / 7720 OEM] [1002:aa88]
    02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] [10de:1c03] (rev a1)
    02:00.1 Audio device [0403]: NVIDIA Corporation GP106 High Definition Audio Controller [10de:10f1] (rev a1)

进入全屏模式 退出全屏模式

不太好,你可以看到我的两个 GPU 都在同一个 IOMMU 组中。如果您想在 Linux 和 Windows 机器上实现最小开销的 GPU 加速,那就不好了。

通常,如果您对 PCI 直通感兴趣,大多数人建议您寻找具有良好 IOMMU 组的主板。不幸的是,我在构建 PC 时没有先见之明,也不想为了在 VM 中玩游戏而购买新主板。

因此,在没有优雅的解决方案的情况下,我们的旅程将我们带入了 Linux 生态系统的更深处......

acs_override & 编译我的第一个内核

对于绝望的人,acs_override 已为您提供支持。它基本上是一个应用到 Linux 内核源代码的 git 补丁,允许您完全忽略 IOMMU 组。

这东西是血魔法。有一个价格。通过以这种方式分离您的硬件 IOMMU 组,您将自己暴露在一组特定的虚拟化相关攻击中。对于我的用例,这不是什么大问题。

我用Linux Zen修补了我的内核。除了 acs_override 补丁之外,它还声称修改 Linux 以使其更好地适应高度交互的实时体验(例如游戏或个人桌面使用)。网上有人声称它减少了感知的“卡顿”并降低了某些工作负载下游戏的最低 FPS。

我想很多人认为手动构建 Linux 内核是一项非常复杂的任务,但实际上非常简单。如果您遇到与我相同的问题,我建议您试一试。

如果您对自定义桌面内核补丁感兴趣,请查看:

  • Arch 内核文档:解释一些关于不同内核的事情(还有更多链接,我在这里得到的)

  • Liquorix:解释 Linux 内核中 Zen 和 Liquorix 补丁的变化

  • Xanmod:在Phoronix 基准测试中表现非常好

带窥镜的窗中之窗

所以在这一点上,完全可以在你的 Linux 机器中使用 Windows,但前提是你愿意在 Linux 上运行的 GPU 和 Windows 上运行的 GPU 之间切换显示器的电缆。不是最好的体验。

幸运的是,窥镜前来救援。简而言之,Looking Glass 允许您的 Windows 桌面在 Linux 中显示为一个窗口,而在性能和延迟方面几乎没有开销。

设置它有点繁琐,但一旦它起作用 - 它就起作用了!

在镜子问题页面链接的Youtube 视频中很好地解释了它的工作原理。

结果

无论如何,毕竟,我终于可以在不离开 Linux 的情况下玩 Halo。

有趣的是,这种体验可以说比直接在 Windows 中运行要好,因为游戏很容易在窗口中运行。根据我的经验,许多游戏通常必须完全最小化或全屏 - 或者必须通过游戏设置完成从全屏到窗口的更改。

[在Linux上玩Halo!](https://res.cloudinary.com/practicaldev/image/fetch/s--E6L-Gn9E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3 .amazonaws.com/uploads/articles/s5p2unhl65r9hs3226bc.png)

所以...你推荐试试 Linux 吗?

是的,

我认为我的帖子听起来像是在尝试使用 Linux 时会遇到无穷无尽的问题,但这主要与我最初的目标有关:了解有关 Linux 的更多信息。顺便说一句,我想我比其他任何东西都更了解什么是好的硬件,但仍然是一个好的结果。

如果您想要 Linux 的“它只是工作”的风格,那么那里也有很多。

我最终在我女朋友(不是工程师)的笔记本电脑上安装了带有 Gnome 40 的 Linux,到目前为止一切都很好,但我可能会把这个故事留到下一次。

[我女朋友的Gnome桌面环境](https://res.cloudinary.com/practicaldev/image/fetch/s--pL4loaRi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev -to-uploads.s3.amazonaws.com/uploads/articles/919dc42ezjvek9sum5sq.png)

更新: 现在已经 4 个月了,我仍在运行 Linux

谢谢

最后但同样重要的是,向Daniel Playfair Cal(A.K.Ahedgepigdaniel)大声疾呼,感谢他们帮助我了解 Linux 生态系统,并在设置 Linux 时为我指明了正确的方向。

Logo

更多推荐