Привет.
Сегодня я, все-таки, нашел время пройти путь и описать установку всего это хозяйства: bumblebee + nvidia в Fedora 25, но с Secure Boot. Ну не нравится мне идея его отключения.
Что нам понадобится:
- установленная Fedora/RFRemix 24/25;
- подключение к интернету;
- установленные пакеты openssl, mokutil;
- терпение.
Secure boot
Зараза из зараз, в чем суть, почему многие просто отключают его?
Да просто все, это зараза не дает загружать неподписанные модули ядра.
Поэтому нам надо сформировать собственный ключ, вписать его в MOK UEFI и подписывать ключами модули.
Формируем ключ. Информация взята отсюда.
Создадим каталог, где будем хранить эти важные данные (конечно все делаем от root‘а) и заходим в созданный каталог:
1 2 | mkdir /etc/pki/my-secureboot cd /etc/pki/my-secureboot |
Создаем файл с именем configuration_file.config и с таким содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [ req ] default_bits = 4096 distinguished_name = req_distinguished_name prompt = no string_mask = utf8only x509_extensions = myexts [ req_distinguished_name ] O = Organization CN = Organization signing key emailAddress = E-mail address [ myexts ] basicConstraints=critical,CA:FALSE keyUsage=digitalSignature subjectKeyIdentifier=hash authorityKeyIdentifier=keyid |
Только поменяй O=, CN=, emailAddress= на свои.
Формируем ключи такой командой:
1 | openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config configuration_file.config -outform DER -out public_key.der -keyout private_key.priv |
У нас есть ключи, надо добавить ключ в UEFI. Страшно, аж жуть.
На самом деле, это делается одной командой. Все уже придумано за нас (информация взята отсюда):
1 | mokutil --import public_key.der |
ВНИМАНИЕ!!! Команда дважды запросит пароль. Сильно над ним думать не стоит, но запомнить обязательно!
Не знал, что скажу это линуксоидам: перезагружаем машинку!
При перезагрузке UEFI попросит нас кое что сделать необычное, что-то вроде такой надписи должно там быть: MOK key enrollment
Выбираем, нас попросят ввести пароль. Ну ты же его запомнил, вводи.
Все, теперь у нас есть ключик, который знает наш secure boot. И которым мы в будущем будем подписывать все наши внешние модули.
А теперь начинается почти стандартный инструкция по установке с этой страницы.
Ставим репы Bumblebee:
1 2 | dnf -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee/fedora25/noarch/bumblebee-release-1.2-1.noarch.rpm dnf -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee-nonfree/fedora25/noarch/bumblebee-nonfree-release-1.2-1.noarch.rpm |
Для архитектуры x86_64 ставим пакеты вместе с multilib:
1 | dnf install bumblebee-nvidia bbswitch-dkms VirtualGL.x86_64 VirtualGL.i686 primus.x86_64 primus.i686 kernel-devel dkms @development-tools |
Для 32-х битной x86 (а такие еще есть? О_о) ставим пакеты так:
1 | dnf install bumblebee-nvidia bbswitch-dkms VirtualGL primus kernel-devel dkms @development-tools |
Ну теперь заживем! Только перезагружаться еще рано. Надо, чтобы два модуля подписывались нашим ключем от secure boot.
Для nvidia редактируем файл /etc/bumblebee/bumblebee-nvidia-sign.conf и вписываем в него наши ключи, приватный и публичный:
1 2 3 4 | ## Public and private keys to sing the drivers for systems with secure boot (full path) ## Note: the created public key must be imported into the UEFI. Publickey=/etc/pki/my-secureboot/public_key.der Privatekey=/etc/pki/my-secureboot/private_key.priv |
А еще у нас есть модуль bbswitch, который умеет отключать неиспользуемую карту для экономии энергии.
Его нам тоже надо подписывать. Мне не удалось сделать это «штатно». Вроде как разработчики уверяют, что все работает, но у меня само не взлетело. Поэтому я сделал дополнительный контрольный скрипт, хук, который при обновлении и пересборке модуля будет каждый раз сам его подписывать.
Имя скрипта /etc/kernel/postinst.d/z-bbswitch-sign и его содержимое:
1 2 3 4 | #!/bin/bash KVER=$1 KEYPATH=/etc/pki/my-secureboot /usr/src/kernels/$KVER/scripts/sign-file sha256 $KEYPATH/private_key.priv $KEYPATH/public_key.der /lib/modules/$KVER/extra/bbswitch.ko |
Делаем его запускаемым:
1 | chmod +x /etc/kernel/postinst.d/z-bbswitch-sign |
Важно! Этот скрипт должен исполняться после хука dkms, иначе ему нечего будет подписывать.
Поэтому он носит такое стремное название: z-bbswitch-sign
Проверим, на всякий случай, что systemd-сервисы есть в автозагрузке:
1 | systemctl enable bumblebee-nvidia.service bumblebeed.service |
Все. Мы все сделали, чтобы уже перезагрузиться и насладиться нашим оптимусом.
1 | reboot |
Проверяем, в запущенной системе, от пользователя выполняем команду:
1 | optirun -b none nvidia-settings -c :8 |
Должно запуститься приложение nvidia-settings и показать нам параметры нашей nvidia-карты.
На этом все.
Я буду рад ответить на вопросы в комментариях. Если найдете ошибки, то тоже буду рад их исправить.
Скажите, пожалуйста, какую команду надо использовать для добавления ключа в BIOS
вместо mokutil —import public_key.der?
А зачем вместо? Что не так с этой командой?
При попытке использовать эту команду выдается ошибка:
EFI variables are not supported on this system
Хотелось бы узнать аналог этой команды для компьютеров без UEFI. Или эту ошибку возможно как-то обойти?
А так суть инструкции в том, чтобы сделать это для систем с UEFI без выключения Secure Boot! Без UEFI сертификаты, их запись в MOK и указание при сборке модулей — не нужны. Т.е. ставишь пакеты, включаешь systemd-юниты и все.
У меня возникла довольно странная проблема:
optirun -b none nvidia-settings -c :8
[ 913.507130] [ERROR]The Bumblebee daemon has not been started yet or the socket path /var/run/bumblebee.socket was incorrect.
[ 913.507180] [ERROR]Could not connect to bumblebee daemon — is it running?
Похожие сообщения об ошибках возникают у людей при использовании Secure Boot, но у меня в BIOS даже такого пункта нет.
При возникновении этой ошибки надо перезапустить сервисы:
. Пока не разбирался, что там, но при старте — не пересобирает модуль nvidia, у меня тоже выскочило при обновлении ядра.
К сожалению, перезапуск не помог.
Даже если их просто запускать — ничего не происходит, только при
sudo systemctl start bumblebee-nvidia
компьютер ‘зависает’ на несколько секунд.
Ну тут я тебе не помогу. Иди в jabber-конфу: fedora@conference.jabber.ru попробую там помочь.
Еще проверь, что у тебя установлены пакеты для сборки модуля: dnf install @development-tools dkms kernel-devel.
Возможно, у Вас опечатка, и в строке
systemctd enable bumblebee-nvidia.service bumblebeed.service
имелось ввиду systemctl.
Да, спасибо, исправил.
А с wayland это будет работать?
Слушай, вроде работало, но у меня сейчас этот ноут в ремонте, прямо точно на 100% не скажу, но там gnome и 25.