來源: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,中科大、水木清華和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/ 下。我們現在可以根據自己的喜好開始編輯。這里我提供我自己使用的,另外再給大家一些配置建議。

下面來仔細談一談,這里的內容是很重要的,直接關系到后續是否能夠正常和順利構建系統。
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,然后進行第一更新。
eselect 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 命令查看):

這里大家需要特別注意的是最后我加了 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 中,保存后重啟還是進入 TTY,用 root 登陸,然后輸入以下命令啟動 gdm :
systemctl start gdm
如果一切順利就能進入登錄界面了,用自己后續建立的用戶賬戶登陸后,打開終端運行:nvidia-smi 查看 Nvidia 運行情況。應該能夠看到以下截圖。


基本上雙顯卡配置就搞定了。關於 offload 使用方法。
1、針對 vulkan 的運行環境:


vkcube 不要運行,這個沒有,大家可以運行啟動軟件。
2、針對 opengl 的運行環境:


至此牙膏和皮衣男完美配置。
我們再來看看蘇媽和皮衣男怎么完美融合。
首先確定 /etc/portage/make.conf 關於顯卡的配置正確,即:
VIDEO_CARDS=”amdgpu radeonsi nvidia”
然后先確定 amdgpu 和 nvidia 的顯卡驅動也正常安裝了。Gnome 的桌面環境也安裝好了,同樣使用:
nvidia-xconfig — prime
生成默認的 xorg.conf ,后續的配置參考上面內容,唯一的區別是 xorg.conf 書寫,還是首先查下 BusID:


通過上面的方法就能了解 BusID 分別是什么了。現在參考我的修改 xorg.conf 文件:


就這樣重啟開機后雙顯卡配置搞定。
寫到最后:
大概是很早的時候,其實我並不推崇 Gentoo 這個發行版,總覺得安裝過程太復雜,費時費力,有可能時間搭進去還不一定能安裝成功。直到后來有個機會,Gentoo 的朋友告訴我,他以前使用 Ubuntu 的,打開巨硬的VS Code 都會卡,但是自從換了 Gentoo 就行雲流水。
說來也奇怪,我的天選在用 Manjaro 的時候,開機顯示器不能最大亮度,並且 dmesg 查 amdgpu 報錯,后續更是隨機死機數次,每次開機需要22秒。在我測試小米游戲本安裝 Gentoo 成功之際,抱着試一試的心態,沒想到天選真的霸氣側漏,同樣的內核,同樣的桌面環境,同樣的顯卡驅動,Gentoo 才是天選的“天選”,開機9秒,沒有屏幕變暗,沒有死機。
搞得有點燃了~
在這里強烈安利 Gentoo ,雖然很費時費力,但是成果驚人。
最后感謝參考文章:
早上好阿偉的《gentoo linux配置intel和nvidia雙顯卡電腦,使用prime方案》
MiraculousMoon 不想跟蠢貨battle 的《Gentoo-N卡最簡單的配置方案》
最后希望大家喜歡這篇總結,希望能夠幫助到那些因為 Linux 發行版眾多而無從下手的新人們。