gentoo linux配置intel和nvidia双显卡电脑,使用prime方案

参考:https://forums.gentoo.org/viewtopic-p-8312508.html#8312508

我的机器是rog的gx531,国内叫冰刃3,无法使用bumblebee和bbswitch,对于我来说prime方案是唯一的选择。

1.安装环境设定

安装nvidia-drivers时一定要使用kmslibglvnduse flag,以下是我使用的use flag:

~|⇒ equery u nvidia-drivers
[ Legend : U - final flag setting for installation]
[        : I - package is installed with flag     ]
[ Colors : set, unset                             ]
 * Found these USE flags for x11-drivers/nvidia-drivers-440.82-r3:
 U I
 + + X           : Install the X.org driver, OpenGL libraries, XvMC libraries, and VDPAU libraries
 + + abi_x86_32  : 32-bit (x86) libraries
 - - compat      : Install non-GLVND libGL for backwards compatibility
 + + driver      : Install the kernel driver module
 + + gtk3        : Install nvidia-settings with support for GTK+ 3
 + + kms         : Enable support for kernel mode setting (KMS)
 + + libglvnd    : Use media-libs/libglvnd for dispatch
 + + multilib    : On 64bit systems, if you want to be able to compile 32bit and 64bit binaries
 - - static-libs : Build static versions of dynamic libraries as well
 + + tools       : Install additional tools such as nvidia-settings
 - - uvm         : Install the Unified Memory kernel module (nvidia-uvm) for sharing memory between CPU and GPU in CUDA programs
 - - wayland     : Enable dev-libs/wayland backend

我的机器使用intel 630显卡和2070 max-q双显卡,所以我的VIDEO_CARDS设置为intel i965 nvidia nouveau i915,也就是在/etc/portage/make.conf中添加:

VIDEO_CARDS="intel i965 nvidia nouveau i915"

添加nouveau,是为了如果搞砸了还可以使用nvidia的开源驱动,i965应该是支持我的intel 630显卡,i915是老款的intel显卡驱动,为了谨慎起见,我把这个也加上。

然后重新编译@world:

~|⇒ emerge -avN @world @system

2.正常来说nvidia驱动应该已经装好了,如果没有,按照gentoo wiki,安装nvidia驱动:

emerge -av nvidia-drivers

3.如果你曾经安装过bumblebee/primusrun/virtualgl等方案,必须把所有的这些软件以及配置文件删除,删除X11配置文件,包括/etc/X11/xorg.conf/etc/X11/xorg.conf.d/*里的所有包含"ServerLayout", "Device" 或者 "Screen"的文件或者内容。

4.根据你使用的nvidia驱动版本,参考nvidia的文档设定xorg.conf文件
比如:https://download.nvidia.com/XFree86/Linux-x86_64/440.82/README/primerenderoffload.html

确定nvidia显卡的BusID

~|⇒ lspci | grep -i vga
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 630 (Mobile)
01:00.0 VGA compatible controller: NVIDIA Corporation TU106M [GeForce RTX 2070 Mobile] (rev a1)

上面我的nvidia 2070显卡信息开头的数字就是BusID,我的是01:00.0,等一下写入xorg.conf文件中时就是BusID "PCI:1:0:0"

如果配置使用nvidia显卡:
完整的xorg.conf文件如下(配置使用intel显卡的xorg内容见文章末端)

Section "ServerLayout"
    Identifier "layout"
    Screen 0 "nvidia"
    Inactive "intel"
EndSection

Section "Device"
    Identifier "nvidia"
    Driver "nvidia"
    BusID "PCI:1:0:0"
EndSection

Section "Screen"
    Identifier "nvidia"
    Device "nvidia"
    Option "AllowEmptyInitialConfiguration"
    Option "ForceCompositionPipeline" "true"
    Option "ForceFullCompositionPipeline" "true"
    Option "TripleBuffer" "on"
EndSection

Section "Device"
    Identifier "intel"
    Driver "modesetting"
    Option      "AccelMethod"    "glamor"
    Option      "DRI"            "3"
    Option   "TearFree"   "true"
EndSection

Section "Screen"
    Identifier "intel"
    Device "intel"
EndSection

5.修改grub启动参数

/etc/default/grub中找到GRUB_CMDLINE_LINUX=,在后面加上nvidia-drm.modeset=1,我的是这样的:

# Append parameters to the linux kernel command line
GRUB_CMDLINE_LINUX="nvidia-drm.modeset=1"

然后重新生成grub配置文件,在我的机器上这样操作:

~|⇒ grub-mkconfig -o /boot/grub/grub.cfg

6.请检查是否安装了xrandr,如果没有请安装。

7.显示管理配置
如果你没有使用gdm、sddm、lightdm等显示管理器,则在~/.xinitrc中添加

xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

比如xfce4桌面用户,添加后像这样:

xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto
exec startxfce4

如果你使用gdm,创建以下两个.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

其它dm请参考:https://wiki.archlinux.org/index.php/NVIDIA_Optimus_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)自行设定。

8.检查nvidia KMS是否正确运行

重启后,运行以下指令检查nvidia KMS是否正确运行:

~|⇒ cat /sys/module/nvidia_drm/parameters/modeset

如果显示“Y”,说明OK了。

9.startx 或者启动DM
成功了,别忘了给我点个赞:)

10.切换intel显卡以省电。

很多笔记本、游戏本的intel显卡不支持多台显示器,据说游戏本的主显示器一般接到intel显卡,外接显示器口连接的是nvidia卡。

如果你使用多台显示器,或者希望使用高性能图形界面,那需要使用nvidia显卡,如果使用单显示器,并且想延长笔记本电池的待机时间,则需要切换到intel显卡。

/etc/X11/xorg.conf的内容修改为:
(同样要注意iGPU那里,BusID要填写正确的intel显卡的BusID,nvidia那里要填隙正确的N卡的BusID)

Section "ServerLayout"
  Identifier "layout"
  Screen 0 "iGPU"
  Option "AllowNVIDIAGPUScreens"
EndSection

Section "Device"
  Identifier "iGPU"
  Driver "modesetting"
  BusID "PCI:0:2:0"
EndSection

Section "Screen"
  Identifier "iGPU"
  Device "iGPU"
EndSection

Section "Device"
  Identifier "nvidia"
  Driver "nvidia"
  BusID "PCI:1:0:0"
EndSection

注销或者重启后,就改成intel显卡了。

11.使用intel显卡时,使用nvidia卡加速特定的程序:
运行特定程序,在命令行前加参数"__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia"
比如

~|⇒ __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia google-chrome-stable
~|⇒ __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxinfo | grep "OpenGL renderer"
OpenGL renderer string: GeForce RTX 2070 with Max-Q Design/PCIe/SSE2

我索性在bash的配置文件中加入:

alias nv-run="__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia"

以后只要运行以下命令,即可用nvidia卡模式启动google chrome浏览器

~|⇒ nv-run google-chrome-stable

12.可以用bbswitch关闭nvidia显卡的电源,达到更加省电的目的
(我没有测试成功,我的笔记本一使用bbswitch就立即死机):

~|⇒ rmmod nvidia_drm
~|⇒ rmmod nvidia_modeset
~|⇒ rmmod nvidia
~|⇒ modprobe bbswitch
~|⇒ echo "OFF" >> /proc/acpi/bbswitch

如果cat /proc/acpi/bbswitch显示:0000:01:00.0 OFF(前边的数字是nvidia显卡的BusID,不同机器可能会有不同),说明成功关闭了nvidia显卡的电源。

13.后记:

(1)nvidia-settings无法管理主显示器,需要用xrandr管理,

确定你的主显示器ID,我的机器如下,eDP-1-1是我的主显示器:

~|⇒ xrandr          
Screen 0: minimum 8 x 8, current 2560 x 1440, maximum 32767 x 32767
HDMI-0 disconnected (normal left inverted right x axis y axis)
DP-0 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 598mm x 336mm
   2560x1440     59.95 + 144.00*  120.00    99.95    84.98    23.97  
   1024x768      60.00  
   800x600       60.32  
   640x480       59.94  
DP-1 disconnected (normal left inverted right x axis y axis)
eDP-1-1 connected (normal left inverted right x axis y axis)
   1920x1080    240.00 +  60.00

设置分辨率和刷新率:

~|⇒ xrandr --output eDP-1-1 --mode 1920x1080 --rate 240.00

lxrandr是lxqt桌面提供的gui设置工具,也可以使用。gnome和kde在设置里可以设置分辨率和刷新率。

(2)使用nvidia显卡,外接显示器画面撕裂问题,通过在xorg.conf中添加如下代码解决(可以参见我上面贴出来的完整的xorg.conf文件内容:

    Option "ForceCompositionPipeline" "true"
    Option "ForceFullCompositionPipeline" "true"
    Option "TripleBuffer" "on"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354