nvidia-settings (&prime-select) не может переключать GPU после удаления GRUB
Недавно я удалил grub в своей EFI-системе (прежде чем вы спросите: мне это просто не нравится). Теперь nvidia-settings и prime-select выдают ошибку, когда я пытаюсь сменить GPU (что не получается из-за этой "глупой" ошибки):
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 в своем сценарии? Строки 127-159 из /usr/bin/prime-select:
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-материал. Спасибо!
2 ответа
Ну, вы используете дистрибутив Linux, который использует grub
по умолчанию и многие сценарии предполагают, что grub
доступны инструменты для внесения изменений, которые просты в использовании для обычных пользователей.
Теперь, если вы измените что-то вроде загрузчика, который является неотъемлемой частью дистрибутива, виноват только вы.
Простой способ решить вашу проблему - закомментировать subprocess.call(['update-grub'])
и заменить его на pass
, чтобы сделать функцию _update_grub
ничего не делать.
def _update_grub(self):
#subprocess.call(['update-grub'])
pass
Но вы также можете использовать эту функцию для обновления загрузчика, который вы используете, чтобы получить возможный вновь созданный начальный виртуальный диск.
Решение состоит в том, чтобы просто добавить пустой файл: /etc/default/grub
Теперь работает