删除 GRUB 后,nvidia-settings(&prime-select)无法切换 GPU

删除 GRUB 后,nvidia-settings(&prime-select)无法切换 GPU

最近我清除了 EFI 系统上的 grub(在您询问之前:我就是不喜欢它)。现在,当我尝试更改 GPU 时,nvidia-settings 和 prime-select 会抛出错误(由于这个“愚蠢”的错误而失败):

Info: selecting the intel profile
Traceback (most recent call last):
  File "/usr/bin/prime-select", line 298, in <module>
    switcher.enable_profile(arg)
  File "/usr/bin/prime-select", line 120, in enable_profile
    self._disable_nvidia()
  File "/usr/bin/prime-select", line 138, in _disable_nvidia
    self._update_grub()
  File "/usr/bin/prime-select", line 264, in _update_grub
    subprocess.call(['update-grub'])
  File "/usr/lib/python3.6/subprocess.py", line 267, in call
    with Popen(*popenargs, **kwargs) as p:
  File "/usr/lib/python3.6/subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.6/subprocess.py", line 1344, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'update-grub': 'update-grub'

他们 (nvidia) 是否真的在脚本中硬编码了 grub 的存在?/usr/bin/prime-select 的第 127-159 行:

 def _disable_nvidia(self):
        boot_params = {}
        # Get the VGA connectors to disable on card1
        # in the form of boot parameters
        vga_params = self._get_boot_params_from_phantom_vga_connectors()
        for elem in vga_params:
            elems = elem.split('=')
            boot_params[elems[0]] = elems[1]
        boot_params['nouveau.runpm'] = '0'
        self._add_boot_params(self._grub_cmdline_start, self._grub_path, boot_params)

        self._update_grub()

        self._blacklist_nvidia()
        self._update_initramfs()

        self._enable_prime_service()

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

        try:
            os.unlink(self._blacklist_file)
        except:
            pass

        self._update_initramfs()

        self._disable_prime_service()

    def _blacklist_nvidia(self):
...

我不太明白这个脚本的具体作用,在直接责怪 Nvidia 之前想问一下。

或者,如果有人能告诉我哪些行需要注释掉(在 /usr/bin/prime-select 中)才能跳过 grub 内容,我将不胜感激。谢谢!

答案1

嗯,您所使用的 Linux 发行版确实grub默认使用,并且许多脚本都假定grub可以使用这些工具来进行普通用户易于使用的更改。

现在,如果你更改了引导加载程序之类的东西(这是发行版的一个重要部分),那么唯一要责怪的就是你。

解决问题的一个简单方法是注释掉subprocess.call(['update-grub'])并将其替换为pass,以使该函数_update_grub不执行任何操作。

def _update_grub(self):
    #subprocess.call(['update-grub'])
    pass

但是您可能还想交换此功能以更新您正在使用的引导加载程序,以获取最终新生成的初始 ramdisk。

答案2

解决方案是简单地添加一个空文件:/etc/default/grub

现在它起作用了

相关内容