• Ubuntu 18.04配置prime-select切换/关闭独立显卡


    Ubuntu 16.04里面装nvidia显卡的时候,默认会装上nvidia-prime,这样用prime-select命令就可以选择打开还是关闭独立显卡。Ubuntu 18.04里面改变了之前用update-alternative的方式进行prime-select的方法,变成用blacklist+grub cmmand+systemd service的方法,用nouveau进行电源管理,然后我装了之后并不能成功工作,所以配置了一下,还原成用bbswitch进行电源管理的方法,虽然切换显卡需要重启,不过还是比不work要好多了。

    安装Ubuntu 18.04时可能遇到的问题

    在安装Ubuntu18.04的时候,就可能遇到显卡驱动的问题。我在创建启动盘(用dd或者UltraISO),从U盘启动之后,不管是在启动菜单里面选择"Try Ubuntu 18.04.1 LTS”还是“Install Ubuntu 18.04.1 LTS”,看到Ubuntu的界面之后系统很快就会卡住,问题可是是nouveau导致的。一个简单粗暴的解决办法是在选择Try还是Install的时候,编辑Install的启动命令,移动光标到Install那一条,按e,在linux /boot/vmlinuz-.... ro quiet splash那一行最后面加上nomodset,然后按F10启动。这样可以禁止内核加载独立的显卡驱动,代价是安装界面的分辨率会变得很低,所以选择Install,这样可以不显示top panel。

    安装完Ubuntu之后,在安装独立显卡之前,有可能还是会遇到系统界面卡住的问题,也可以用上面的方法进入系统,安装NVIDIA显卡之后再重启就可以正常启动。

    禁用独立显卡

    如果只是想禁用独立显卡的话,可以用下面的步骤。
    1.禁用nvidia-fallback.service

    # systemctl disable nvidia-fallback.service
    

    2.把nouveau加入blacklist(NVIDIA显卡驱动安装的时候会在/etc/modprobe.d/新建一个文件把nouveau加到blacklist,如果没有或者没有作用的话可以使用下面的方式)

    # vim /etc/default/grub // 打开/etc/default/grub
    //找到GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    //在splash后面加上nouveau.blacklist=1
    # update-grub 
    

    3.使用bbswitch作为电源管理

    安装bbswitch-dkms

    # apt install bbswitch-dkms
    

    编辑/etc/modules,加入一行

    bbswitch
    

    编辑/etc/modprobe.d/bbswitch.conf,加入一行

    modprobe bbswitch load_state=0 unload_state=1
    

    4.重启

    Ubuntu 18.04的prime-select

    阅读prime-select的源码可以得知它切换为intel显卡禁用NVIDIA显卡的时候主要做了下面几件事:
    1.在grub的GRUB_CMDLINE_LINUX_DEFAULT参数里面加了一条nouveau.runpm=0,禁止nouveau进行电源管理
    2.在‘/etc/modprobe.d’目录下创建了一个/etc/modprobe.d/blacklist-nvidia.conf,写入了以下内容

    blacklist nvidia
    blacklist nvidia-drm
    blacklist nvidia-modeset
    alias nvidia off
    alias nvidia-drm off
    alias nvidia-modeset off
    

    3.使用update-initramfs -u更新了一下rootfs文件
    4.systemctl enable nvidia-prime-boot.service,在nvidia-fallback.service之后执行,其中的命令是echo OFF > /sys/kernel/debug/vgaswitcheroo/switchnvidia-fallback.service的作用是加载nouveau模块

    在启动nvidia显卡的时候,进行了以下工作:
    1.删除grub的GRUB_CMDLINE_LINUX_DEFAULT参数里面的nouveau.runpm=0
    2.删除在‘/etc/modprobe.d’目录下的/etc/modprobe.d/blacklist-nvidia.conf
    3.使用update-initramfs -u更新了一下rootfs文件
    4.systemctl diasble nvidia-prime-boot.service`

    这样的话主要的更改内容有三个:
    1.注释掉更改grub命令的代码
    2.将nvidia-fallback.service改为加载bbswitch模块
    3.更改nvidia-prime-boot.service,改为使用bbswitch关闭独立显卡echo "OFF" >> /proc/acpi/bbswitch

    更改prime-select使其正常工作

    如果想要用prime-select来进行切换显卡的话,可以更改一下相关的文件,因为主要的问题在于nouveau作为电源管理并不成功,将其改为bbswitch就行了。
    1.更改/lib/systemd/system/nvidia-fallback.service

    找到

    ExecStart=-/sbin/modprobe nouveau
    

    改为

    ExecStart=-/sbin/modprobe bbswitch
    

    然后确保nvidia-fallback.service没有被disable

    # systemctl enable nvidia-fallback.service
    

    2.更改/lib/systemd/system/nvidia-prime-boot.service`

    ExecStart=/bin/sh -c "echo OFF > /sys/kernel/debug/vgaswitcheroo/switch"
    

    改成

    ExecStart=/bin/sh -c "echo OFF > /proc/acpi/bbswitch"
    

    3.更改/usr/bin/prime-select

    _diable_nviida函数的下面两行注释掉

    //usr/bin/prime-select
    self._add_boot_params(self._grub_cmdline_start, self._grub_path, boot_params)
    self._update_grub()
    

    _enable_nvidia函数的下面三行注释掉

    
    self._remove_boot_params(self._grub_cmdline_start,
                                 self._grub_path, ['nouveau.runpm', 'video=VGA'])
    self._update_grub()
    


    参考


    更改日志

    • 2018.08.30 创建
  • 相关阅读:
    LeetCode: Binary Tree Zigzag Level Order Traversal
    LeetCode: Binary Tree Level Order Traversal II
    LeetCode: Climbing Stairs
    LeetCode: Binary Tree Inorder Traversal
    windows下利用xdebug和WinCacheGrind优化PHP代码(转)
    15个你未知的 Chrome 浏览器杀手级应用(转)
    【转】PHP技巧汇总:提高PHP性能的53个技巧
    21个实用PHP代码
    PHP魔术函数集锦
    介绍9个很有发展潜力的PHP开源项目
  • 原文地址:https://www.cnblogs.com/tonyc/p/9561926.html
Copyright © 2020-2023  润新知