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"

你可能感兴趣的:(gentoo linux配置intel和nvidia双显卡电脑,使用prime方案)