gentoo linux 安装(转)
来源:https://medium.com/@langleyhouge/gentoo%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B%E5%8F%8A%E6%80%BB%E7%BB%93-1db269cfa8c7
——采用 Gnome 作为默认桌面环境,Intel 集成显卡和 Nvidia 独立显卡配置或者 AMD Ryzen 4000 系列搭配 Nvidia 独立显卡配置,UEFI 安装模式
前言——
关于这篇教程总结写于 2020 年8月25日~8月30日,目前稳定版本的 Gentoo Linux profile 版本号是 17.1。如果后续版本号出现跟进,而我并没有及时跟进信息,请各位朋友以 Gentoo Wiki 文档为准。
为什么写这篇文章——
越来越多的朋友开始熟悉和学习 Linux ,这个开源的操作系统有幸成为默认乃至计算机上第二操作系统。再加上当今桌面级 Linux 系统安装步骤简化,汉化越来越优秀,给新手或者说初学者带很多便捷,这算是桌面级 Linux 发展至今一个非常令人激动的进步。
然后,进步之余,我们不能忽略一些最基础的知识—— Linux 桌面级操作系统的安装和运行方式。而这篇文章就从这个角度出发,结合 Gentoo 这个发行版,给各位朋友一些启发。
准备工作——
1、耐心
2、耐心、耐心
3、耐心、耐心、耐心
4、LiveUSB(推荐 Fedora),稳定的网络,持之以恒的决心和判断力,逻辑思维缜密
我们开始——
我们都知道 Linux 系统是一个基于 Linux 内核运行各种开源和非开源软件的操作系统内核。我们的目的是让这个系统为我们工作,提升工作效率,提供娱乐等属性,而我们不愿意看到的是 Bugs 满天飞,系统时不时死机,重要文件丢失。
那么从工具链开始打造你自己的 Linux 系统就显得尤为重要。
第一步:选择一个适合你的安装媒介
个人推荐 USB 3.0 的U盘一枚。制作 LiveUSB,个人并不推荐 Gentoo 的安装镜像,也不推荐 Debian 系的,前者是因为全是字符界面,对用户不友好;后者的原因是在 Chroot 阶段增加复杂度,另外,Debian 的网卡驱动有时候因为没有开源版,无法驱动,尤其是无线网卡,操作起来并不方便。我个人推荐大家用 Fedora 的安装镜像,可以到 Fedora 官网下载,并使用自己习惯的工具制作 LiveUSB。
备份硬盘中的重要资料。
引导计算机进入 LiveUSB 环境,在这里我用 Fedora Gnome LiveUSB 桌面为例为大家详细讲解。在 LiveUSB 环境下我们连接无线网络或者有线网络就显得简单许多,通过图形化设置完成后。就是准备磁盘,换句话说,就是为 Gentoo 准备安装所需的磁盘分区和文件系统。
在这一步可以通过多种软件实现磁盘的准备。而我们的目的要明确 — — 如何分区,才能方便我们使用系统。以我为例,首先笔电采用了 EFI 方案,需要一个200M~500M(至少200M以上)的分区来作为 /boot,类型选择是 EFI,当然还有一种可行的分区是200M的 /boot/efi 分区,类型是 ESP。随后是 root 分区,或者我们叫它根目录,其次是 /home 分区和 /opt 分区。
在 Gentoo 安装的 Wiki 上,我们可以找到至少两种命令行软件可以实现分区,fdisk 和 parted 来为磁盘分区,它们都是命令行工具,实现起来可能对新手比较困难。我推荐一个字符图形化工具来分区,叫做 cfdisk,这个工具几乎在所有的 Linux 发行版 LiveCD 中都有,图形化操作,设置磁盘大小,类型都比较形象,操作简单。这里推荐大家使用 gpt 分区表,这样后面我们写到 fstab 文件的时候会很方便。
将 /opt 进行单独分区是我的个人喜好,/home 单独分区能够有效保证个人文件和资料的安全。
我的硬盘有3快,两块 NVME 的西数黑盘,各1TB,一块 SATA 的西数蓝盘,也是1TB,在 Linux 的 /dev/ 目录下我们可以看到 nvme 的盘符是按照 nvme0, nvme1, nvme2…以此类推的形式编号的,那么 nvme0n1p1,nvme0n1p2,nvme0n1p3 又属于该磁盘设备向下的盘符。了解了这一点,就来解释下我的分区:
/dev/nvme0n1p1 分配了500M,挂载到 /boot 上,/dev/nvme0n1p2 全部分配给根目录,/dev/nvme1n1p1 完全分配给 /home,/dev/sda1 完全分配给 /opt 。于是就形成了下表:
/dev/nvme0n1p1 — — — — -> /boot — — — ->200M~500M
/dev/nvme0n1p2 — — — — >/ — — — — ->所有剩余空间
/dev/nvme1n1p1 — — — — ->/home — — -->所有空间
/dev/sda1 — — — — — — —>/opt — — — — — ->所有空间
而各位真正在分区的时候只需要把握两点重点就可以了:
第一:/boot 的 flags 或者说类型设置成 EFI;/boot/efi 的类型是 ESP
第二:最好单独分出 /home
用 mkfs 对分出来的磁盘分区格式化,比方说 /boot 用 mkfs.vfat /dev/nvme0n1p1,其他的我都用 mkfs.btrfs格式化成 btrfs。
第二步:配置 Gentoo 的 Portage,USE 和编译环境
在开始之前,我们首先要明白几个基本概念:
1、Portage,这里其实很多朋友都有一种误区,认为 Gentoo 的包管理器是 emerge ,因为安装软件都需要 emerge 来跑,但其实真正的包管理器是 Portage,portage 包含了 emerge 和 ebuild 两部分,emerge 是一个可执行程序,负责将 ebuild 中的内容按照规则进行编译和安装,ebuild 这个文件,更像是个脚本,emerge 按照它进行下载源代码,打补丁,一定的规则编译,然后安装。
2、USE,这是一个 Gentoo Linux 发行版比较独特的“标签”,它定义了编译和构建整个系统需要依赖什么,不需要依赖什么,尽可能让系统简洁,轻快,高效。举个例子,如果你使用的桌面环境是 KDE,那么在系统里面你可以尽可能不使用 Gnome 。当然,这是一种比较极端的实例。那么最常见的 USE 使用就是在配置文件中添加需要的和不需要的,这样构建系统就非常有针对性,自然运行效率就高了。
3、Cflags,这是 GCC 针对源代码编译进行一定优化的标签,通过这些功能,可以将我们需要的软件源码进行一定级别的优化,然后生成可执行程序,从而提高运行效率。
那么现在我们正式开始
首先在 LiveUSB 环境下获取 root 权限,简单的输入 su 或者 sudo su 获得权限。然后,新建一个文件夹,打开终端后输入:
mkdir -p /mnt/gentoo
然后我们将根目录挂载到 /mnt/gentoo 这个文件夹下,以我为例,就是将 /dev/nvme0n1p2 挂载到 /mnt/gentoo 下。
mount /dev/nvme0n1p2 /mnt/gentoo
这个时候再 cd /mnt/gentoo 下,我们就进入到整个根目录了,到这一步,我们才刚刚开始最实质的步骤。而现在,我建议大家可以按照我这样布局 LiveUSB 桌面:
下载 Stage3我们可以在以下三个网站下载 Stage3,中科大、水木清华和163,这三个源镜像是可信且网速可以保证的。Stage3 是一个包,这个包包含了构建 Gentoo 最基础的工具链,都是稳定版本,也是下一步构建系统的基础。
不论你选择的是哪一个源镜像,按照以下的目录寻找,gentoo->releases->amd64->autobuilds->current-stage3-amd64-systemd->stage3-amd64-systemd-<日期,越接近你现在的日子越好>.tar.xz
然后我们右键复制这个包的地址,在终端使用 wget下载。
wget https://mirrors.ustc.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64-systemd/stage3-amd64-systemd-20200823T214503Z.tar.xz
再次提醒,不要嫌麻烦,去找最新的包,不要复制粘贴这一段。
下载后,用以下的命令解压到根目录。
tar vxpf stage3-amd64-systemd-20200823T214503Z.tar.xz
跑完之后,我们就获得了基础工具链和所有默认文件夹。
当然,你刚刚下载的这个包它依然在根目录下,我们可以使用 rm 命令将它删除。
我们开始配置 make.conf 和源镜像地址:
make.conf 文件位于我们根目录的 /etc/portage/ 下,或者说在 /mnt/gentoo/etc/portage/ 下。我们现在可以根据自己的喜好开始编辑。这里我提供我自己使用的,另外再给大家一些配置建议。
make.conf下面来仔细谈一谈,这里的内容是很重要的,直接关系到后续是否能够正常和顺利构建系统。
1、COMMON_FLAGS=,这里添加 -march=native ,个人认为 native 比特指的 CPU 型号优化的效果更好,GCC 会根据你计算机的处理器集成的算法来优化,个人推荐;
我自己将 -O2 修改成 -O3 ,这样的优化级别比稳定的要更加好一些,自然稳定性可能会降低,但是目前没有遇到因为这个导致的编译失败。
我想可能会有人像我,加上 -flto 这个优化,个人推荐你可以在内核编译的时候加上,但是用完就关掉,以免后续更新维护造成麻烦。
2、CHOST= 和 CPU_FLAGS_X86=,可以按照我的添加,这里特指牙膏厂的处理器,如果是 AMD 的锐龙,可以在后续构建系统以后,通过安装 cpuid2cpuflags 工具,查看输出填写。
3、USE=,我在这里只添加了一个 -bindist ,其余如果有默认的先删掉,保证初次构建一切顺利。如果后续需要修改和调整 USE 这个标签,我们可以在 /etc/portage/packeage.use/ 下建立相关的标签,据个??:如果安装 A 软件包出现依赖USE C,我们就可以在这个目录下创建一个 A 文件,里面写上整个 A 包的名称,后面接着空格写 C 就可以了。
4、MAKEOPTS=,根据你计算机的虚拟核心数填写,我的笔记本是小米游戏本,处理器是8代i7–8750H,6核12线程,这里我的是 -j12,各位根据具体请填写。目的是获得多线程多核心同时编译,你的核心数越多,并行编译越多,编译的速度越快。
5、GENTOO_MIRRORS=,Gentoo 的源镜像,我使用的是中科大源,各位朋友可以根据自己的实际情况做出调整。
6、EMERGE_DEFAULT_OPTS=,这个设置的目的是在遇到编译错误的时候不要停止,而是继续编译下去。
7、FEATURE=,这一项我默认是注释的。其意义在于如果编译过程中出现权限不够的时候,可以通过去掉注释解决。但务必请注意,这个权限应该是关于 rm 删除某些内容,如果不是请小心是不是 ebuild 被篡改了。
8、ACCEPT_KEYWORDS=,关于这一项,我写的是 ~amd64,原因是我构建的系统用户桌面系统、创作视频和娱乐,如果你的目的是构建服务器,那可以不填写。
9、ACCEPT_LICENSE=,推荐写成和我一样的,这样系统将接受所有的许可证,无论开源、非开源、商业的都能安装。当然,如果你有不开源不舒服斯基的毛病,可以忽略。
10、L10N= 和 LINGUAS=,这里设置的是本地化,一模一样的写就可以了。
11、VIDEO_CARDS=,设置显卡,我的小米游戏本是 Intel 集成显卡和 Nvidia GTX 1060 的显卡,如果你的也是这样,可以写成 “i965 nvidia”,它将主要影响 mesa 的编译。另外,使用 Ryzen 4000 的集成显卡搭配 Nvidia 独立显卡的朋友,在这里填写的是 “amdgpu radeonsi nvidia”,当然,如果你的情况和我的略有不同,可以参考这里,填写相应的显卡。
12、GRUB_PLATFORMS=,这里可以定义计算机是用 UEFI 还是普通的 BIOS,我用的是 UEFI,这里我设置成 efi-64,大家的应该和我的一样。
13、QEMU_SOFTMMU_TARGETS= 和QEMU_USER_TARGETS=,可以写成和我一样的,因为我有安装虚拟机到 KVM 的需要,如果各位并没有这方面的需求,可以不用填写。
14、因为我安装的桌面环境是 Gnome ,这个时候根据默认情况,系统会默认安装文鼎字体,这套字体是楷体,我个人并不喜欢,如果你也不喜欢楷体,可以创建编辑文件 nano /mnt/gentoo/etc/portage/package.use/ghostscript-gpl ,如果出现没有文件夹,手动创建一个,然后写上 app-text/ghostscript-gpl -l10n_zh-CN,然后保存退出,当然,如果你无所谓字体,就不同理会这一段了。
15、因为我的笔电是双显卡,后续需要配置 Nvidia Offload 功能,另外,Gnome 在使用 Intel + Nvidia 的有可能会出现开机 TTY光标闪烁无法进入 gdm 的情况(其实即使按照这一步作出修改,还是会出现进入 TTY 闪烁光标无法进入 gdm),我们需要创建编辑文件 nano /mnt/gentoo/etc/portage/package.use/nvidia ,然后添加 x11-drivers/nvidia-drivers -compat,保存退出。
OK,关于 make.conf 的内容算是告一段落了,现在我们开始配置源镜像。首先是创建一个目录。
mkdir -p /mnt/gentoo/etc/portage/repos.conf
然后在这个目录下创建 Gentoo 的源镜像。
nano /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
填写如下内容:
[gentoo]
location = /usr/portage
sync-type = rsync
#sync-uri = rsync://mirrors.tuna.tsinghua.edu.cn/gentoo-portage/
sync-uri = rsync://rsync.mirrors.ustc.edu.cn/gentoo-portage/
auto-sync = yes
大家注意注释那里,如果中科大的速度慢,你可以调整这个地址为你下载速度快的源镜像。
填写完成后,保存退出。
好了,关于这部分告一段落,大家回头检查下拼写是否正确,检查有没有把要编辑的内容错误的写到了 LiveUSB 的目录下,如果操作都无误,我们开始下一步骤。
第三步:Chroot 和构建第一次基础系统
我们先了解下什么是 Chroot。以现在我们的安装为例,目前我们运行的软件和内核是 LiveUSB 提供给我们的,根目录是 LiveUSB 的,而 Gentoo 系统的根目录在 /mnt/gentoo/ ,我们也没有直接运行的能力,因为运行环境也不是 Gentoo 系统的,那么下一步我们就可以通过 Chroot 一系列操作,实现从 LiveUSB 转移到 Gentoo 系统下。
首先复制 DNS 到 Gentoo 系统下:
cp — dereference /etc/resolv.conf /mnt/gentoo/etc/
挂载必要文件系统:
mount -t proc /proc /mnt/gentoo/proc
mount — rbind /sys /mnt/gentoo/sys
mount — make-rslave /mnt/gentoo/sys
mount — rbind /dev /mnt/gentoo/dev
mount — make-rslave /mnt/gentoo/dev
进入 Chroot:
chroot /mnt/gentoo /bin/bash
source /etc/profile
挂载其余所有的分区:
mount /dev/nvme0n1p1 /boot
mount /dev/nvme1n1p1 /home
mount /dev/sda1 /opt
以上分区挂载是我的情况,各位朋友按照自己实际情况挂载。
从现在开始正式开始第一阶段,选择 Gnome 作为默认的 Profile 并更新系统
首先选择快照更新 Profile 然后使用 rsync 同步
emerge-webrsync
emerge — sync
使用命令列出 profile,并选择 Gnome,然后进行第一更新。
选择 Gnome 作为默认的 profileeselect profile list
eselect profile set 22
emerge -auvDN — with-bdeps=y @world
现在开始了漫长的编译过程,如果这个时候出现某些依赖无法满足的情况,我们可以通过以下几种方法解决:
emerge -auvDN — with-bdeps=y — autounmark-write @world
etc-update — automode -3
emerge -auvDN — with-bdeps=y @world
一般如果顺利的话就能开始正常跑码更新系统了。假如以上的方法还是不奏效,那么需要进入 /etc/portage/ 目录,删掉 package.use, package.unmark, package.mark,然后再次重试。
一般情况下编译时间是很长的,在我这里340个包,4~5个小时是少不了的。所以这段时间可以去看看 Gentoo Wiki 或者想想下一步需要安装什么软件,列个表格,在能进入桌面之后,开始查找并安装。
我们耐心等待这段更新,如果碰巧跑完了,先别激动和傲娇,我们在运行下面三段代码已确定没有更新再往下继续。
这里补充一下,我在更新完成后,eselect gcc list 查看了默认的 gcc 版本,然后切换成 gcc 10 继续后面的编译。基本操作通过 eselect 来操作,完成后记得 source /etc/profile 。
emerge @preserved-rebuild
perl-cleaner — all
emerge -auvDN — with-bdeps=y @world
确定运行完没有更新后,再继续,否则按照提示再继续重复运行,我这里的情况是重复了一次就完全结束更新了。
开始配置时区和地区
顺序运行以下命令以配置时区和地区:
echo “Asia/Shanghai” > /etc/timezone
emerge — config sys-libs/timezone-dataecho “en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8” >> /etc/locale.genlocale-gen
eselect locale list
这时,应该能够看到列出的中文,但是目前建议大家暂时不要用 eselect 选择使用中文,虽然现阶段终端可以显示中文,但是如果后面出现特殊情况,你不得不进入 Gentoo 的 TTY 的时候你就抓瞎了。
开始配置 fstab 完善后期 Gentoo 重启挂载硬盘的工作
这里不建议使用 Arch 提供的那个 genfstab 工具。我自己的理由是,我们能够更好的配置好 fstab 为后期打造系统准备更好的准备。
在开始书写 fstab 之前,我们需要先了解一些零碎的知识,以方便我们正确的书写。
首先我们先了解下 fstab,这玩意儿就像一张表,在 Linux 开机的告诉 mount 应该把哪个分区以什么文件系统,以什么方式挂载到系统对应位置。那么其实理解了它的作用,我们写起来其实也并不复杂,我这里提供一份我使用 btrfs 的 fstab 书写方式,提供给大家参考。
其次,就是挂载时需要注意的挂载选项,无论你是使用 ext4 文件系统,还是像我使用 btrfs 文件系统,使用合适的挂载选项有助于最大性能的发挥你的文件系统的性能,一方面实现快速读取和写入,另一方面最小化文件丢失。
那么如果你和我一样使用 btrfs文件系统的话,我非常推荐如下的挂载选项:
defaults,noatime,space_cache,space_cache=v2,autodefrag,discard=async,ssd,compress=zstd:1
使用 discard=async 与 fstrim 是不冲突的;另外透明压缩不需要启动等级3,第一等级就足够了,如果你有需求使用 btrfs 下的 swap ,那不能启用透明压缩功能;并且启用了自动碎片整理功能。这样对文件系统是比较好的。
那么整个 fstab 的书写就是这样的(注意用空格分开,多少个空格无所谓,只要好看就好,我的意思是看起来整齐;UUID 可以使用 blkid 命令查看):
fstab这里大家需要特别注意的是最后我加了 tmpfs 的内容,建议所有不论你安装什么桌面环境,不论用于什么生产环境,都加上。唯一需要大家根据自己实际情况修改的地方是后面的大小,我的小米游戏本配置是32G内存,一般情况下我们肯定是不会一边编译一边玩大型3A大作的,那么其实桌面充其量能用到6G内存就上天了,然后留出点余量,其他的就可以全部给编译环境—— /tmp ,这样所有的编译都能在内存里跑,一方面有效降低固态硬盘的写入和读取,另一方面也提升了IO性能,即使你的处理器不是3990X,编译的速度也能有效提升。
希望这里的内容能够帮助到大家,当然,如果你选择的文件系统是 ext4 亦或是 XFS,大家可以去 Arch 或者 Gentoo 的 Wiki 文档中查阅。我们使用不同的文件系统挂载选项的目的是高效和稳定双赢,如果个为觉得要有所侧重,我觉得是不妥的。对我而言,文件重于泰山。
OK,如果你编辑好了你的 fstab 请保存退出,并针对你喜好的文件系统安装相对应的工具。ext4 是不需要的。
btrfs: emerge sys-fs/btrfs-progs
xfs: emerge sys-fs/xfsprogs
jfs: emerge sys-fs/jfsutils
以我为例,我只安装了 btrfs 对应的工具,其余的并没有安装。
第四步:开始处理杂项
以上的步骤如果没有问题,基本上就距离成功不远了。后续留给我们的任务比较琐碎。整理下来就是:网络连接、主机名、用户名、密码、安装系统日志,cron等重要程序、内核选择与安装、grub引导、显卡驱动、最后的桌面环境。
网络连接我使用 NetworkManager,安装也是:
emerge -av networkmanager
如果出现什么依赖需要解决,还是那三板斧:
emerge — autounmask-write networkmanager
etc-update — automode -3
emerge networkmanager
搞定之后,我们设置它默认开机启动:
systemctl enable NetworkManager
设置主机名:
echo hostname=\”Test\” > /etc/conf.d/hostname
安装系统工具:
emerge app-admin/sysklogd sys-process/cronie sudo layman grub
sed -i ‘s/\# \%wheel ALL=(ALL) ALL/\%wheel ALL=(ALL) ALL/g’ /etc/sudoers
passwd #设置root密码
systemd 再操作一波:
sed -i 's/\# GRUB_CMDLINE_LINUX=\"init=\/usr\/lib\/systemd\/systemd\"/GRUB_CMDLINE_LINUX=\"init=\/usr\/lib\/systemd\/systemd\"/g' /etc/default/grub
ln -sf /proc/self/mounts /etc/mtab
systemd-machine-id-setup
因为 Medium 的问题,大家最好自己输入,复制粘贴有风险。
为安装内核作准备:
因为我个人的原因,非常推荐大家使用 xanmod 内核,这个内核根据 phoronix 的评测,性能很强劲,相关跑分可以参考这里。那么安装这个内核并不复杂。首先我们先安装几个工具。
emerge -av eselect-repository genkernel dev-libs/libbpf
完成后,使用 eselecet repository 选择 xanmod 内核所在的第三方源镜像。
eselect repository list #用于列出所有第三方源镜像,我们找到 src_prepare-overlay 源镜像并记住前面的数字。
eselect repository enable 这个数字
同步源:
emerge — sync
安装 xanmod 源代码:
emerge -av sys-kernel/xanmod-sources
安装完成后,我们还需要一个 .config 配置文件用于编译内核,这个 .config 不要随便弄,在 xanmod 的 github 站点,可以直接去下载一个 .config ,然后,我们复制到 /usr/src/linux 这个目录下。
然后我们就可以手动配合内核了。
make nconfig
进入字符图形化界面开始配置内核,我默认将 btrfs 编译进内核,另外不编译 i2c-nvidia-gpu 和 nouveau 驱动,其他的基本依托默认就足够了。然后F6保存配置,F9退出。
开始编译内核:
make -jx #根据你的线程数配置并行编译
编译完成之后的操作:
make modules_install
make install
genkernel — install initramfs #如果你使用了一些模块,比方说软RAID,或者 luks 请参考官方 wiki 获得信息。另外一般情况下,/boot 在 200MB 以上的空间不会出现安装空间不足。grub-install — target=x86_64-efi — efi-directory=/boot — bootloader-id=Gentoo
grub-mkconfig -o /boot/grub/grub.cfg
第四步尾声,创建你自己的用户名并设置密码。
useradd -m -G users,wheel,portage,usb,video #这里换成你的用户名(小写)
passwd #用户名
第四部分小结下,总的来说比较杂乱,但是还是应该按部就班,内核部分,大家见仁见智,也可以使用 gentoo 给大家默认的内核。有的朋友配置内核有阴影,其实内核的编译是最好通过的,别太纠结于此。
第五部分:显卡驱动,Gnome 桌面环境
从完成第四部分之后,我们就可以重启计算机进入 Gentoo 的 TTY 环境了。重启之前,大家需要着重检查两个地方:
1、/boot 下是否有内核文件生成
2、/etc/fstab 文件内容是否有误
3、插着网线
好的,如果这两个都确定没有问题了,就可以重启了。
选择重启的原因是能够把下一步桌面环境的编译任务放到内存里进行,这样能够提高效率,减少 SSD 频繁读写。
如果没有成功重启,没有看到字符登陆界面,不要慌,我们依然可以用 LiveUSB 进入 chroot 环境进行修改。
如果重启后一切顺利,看到字符串登录界面,并且成功用 root 登陆,网络也正常连接。就可以开始下一步解决显卡驱动了。
先说 Intel 和 Nvidia 组合,我们先安装两个包:
emerge -av x11-drivers/nvidia-drivers x11-drivers/xf86-video-intel xrandr
安装完成后就暂时不用管,我们检查下是否安装了 xorg :
emerge -av xorg-server
如果安装了,也是先放着不用管。我们开始安装 Gnome 桌面环境。一次性全部安装:
emerge -av gnome gnome-desktop gnome-shell gdm gnome-terminal
大概要编译300多个包,大家耐心等待完成。
全部完成无误之后,我个人并不推荐立刻使用 systemctl enable gdm ,而是直接重启,重启后还是老样子进入 TTY 。
因为我们编译内核的时候已经取消了 nouveau ,所以这里可以省心不用去黑名单里屏蔽它,而是试试下面的这条命令能否运行:
nvidia-xconfig — prime
如果运行成功,它会在 /etc/X11/ 目录下生成 xorg.conf 文件;如果没有运行成功,需要重新安装一遍 nvidia 的驱动,然后再运行生成 xorg.conf 。
这个 xorg.conf 后续我们要修改它,实现 offload 功能。而现在我们先编辑两个 desktop 文件。
/usr/share/gdm/greeter/autostart/optimus.desktop
/etc/xdg/autostart/optimus.desktop
写入的内容均一样:
[Desktop Entry]
Type=Application
Name=Optimus
Exec=sh -c “xrandr — setprovideroutputsource modesetting NVIDIA-0; xrandr — auto”
NoDisplay=true
X-GNOME-Autostart-Phase=DisplayServer
以上内容大家最好不要复制粘贴,还是照着写一下,不会出错。写完之后保存退出。开始配置 xorg.conf
首先大家先用以下命令查看两个显卡的 BusID:
lspci | grep -i vga
我这里的输出是这样的:
$ lspci | grep -i vga
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 630 (Mobile)
01:00.0 VGA compatible controller: NVIDIA Corporation GP106M [GeForce GTX 1060 Mobile] (rev a1)
大家注意看前面那个 00:02.0 ,这个牙膏的集显,它的 BusID 就是 PCI:0:2:0,同理,皮衣男的显卡 BusID 就是 PCI:1:0:0。OK,这个基本知识了解后,我们看看原先的 xorg.conf 里面关于 Nvidia 的部分是什么。
原始 Nvidia xorg.conf 文件这是之前使用命令生成的。现在我们把它注释掉。我们重新写一个,这个参考 Nvidia 官方文档,大家可以看下。现在我们参考这个文档写出新的:
Offload 配置把这个写到 xorg.conf 中,保存后重启还是进入 TTY,用 root 登陆,然后输入以下命令启动 gdm :
systemctl start gdm
如果一切顺利就能进入登录界面了,用自己后续建立的用户账户登陆后,打开终端运行:nvidia-smi 查看 Nvidia 运行情况。应该能够看到以下截图。
nvidia基本上双显卡配置就搞定了。关于 offload 使用方法。
1、针对 vulkan 的运行环境:
vulkan 运行环境vkcube 不要运行,这个没有,大家可以运行启动软件。
2、针对 opengl 的运行环境:
opengl 运行环境至此牙膏和皮衣男完美配置。
我们再来看看苏妈和皮衣男怎么完美融合。
首先确定 /etc/portage/make.conf 关于显卡的配置正确,即:
VIDEO_CARDS=”amdgpu radeonsi nvidia”
然后先确定 amdgpu 和 nvidia 的显卡驱动也正常安装了。Gnome 的桌面环境也安装好了,同样使用:
nvidia-xconfig — prime
生成默认的 xorg.conf ,后续的配置参考上面内容,唯一的区别是 xorg.conf 书写,还是首先查下 BusID:
BusID通过上面的方法就能了解 BusID 分别是什么了。现在参考我的修改 xorg.conf 文件:
amdgpu 和 nvidia就这样重启开机后双显卡配置搞定。
写到最后:
大概是很早的时候,其实我并不推崇 Gentoo 这个发行版,总觉得安装过程太复杂,费时费力,有可能时间搭进去还不一定能安装成功。直到后来有个机会,Gentoo 的朋友告诉我,他以前使用 Ubuntu 的,打开巨硬的VS Code 都会卡,但是自从换了 Gentoo 就行云流水。
说来也奇怪,我的天选在用 Manjaro 的时候,开机显示器不能最大亮度,并且 dmesg 查 amdgpu 报错,后续更是随机死机数次,每次开机需要22秒。在我测试小米游戏本安装 Gentoo 成功之际,抱着试一试的心态,没想到天选真的霸气侧漏,同样的内核,同样的桌面环境,同样的显卡驱动,Gentoo 才是天选的“天选”,开机9秒,没有屏幕变暗,没有死机。
搞得有点燃了~
在这里强烈安利 Gentoo ,虽然很费时费力,但是成果惊人。
最后感谢参考文章:
Yangmame 的 《Gentoo 安装教程》
早上好阿伟的《gentoo linux配置intel和nvidia双显卡电脑,使用prime方案》
MiraculousMoon 不想跟蠢货battle 的《Gentoo-N卡最简单的配置方案》
Gentoo Wiki 文档
最后希望大家喜欢这篇总结,希望能够帮助到那些因为 Linux 发行版众多而无从下手的新人们。