Потратив несколько дней на -tos и отладку проблемы с черным экраном при загрузке после установки драйверов nvidia, я наконец смог найти решение всех своих проблем. Основная причина, по которой я пишу этот пост, состоит в том, чтобы сообщить вам, что руководство, найденное на официальном сайте Kali, не работает по состоянию на 11 апреля 2018 года. Согласно его упоминаниям на их веб-сайте, вы можете успешно установить пакеты -ocl -icd -libopencl1, драйвер nvidia -, набор инструментов nvidia -cuda -, но при перезагрузке могут возникнуть проблемы. Вы можете получить черный экран и не сможете войти в систему через графический интерфейс. Итак, приступим-
Прежде всего позвольте мне рассказать вам характеристики моей системы-
ЦП -Intel® Core™ i5 -ЦП 8250U с тактовой частотой 1,60 ГГц × 8
Графический процессор #1 -Intel® UHD Graphics 620
ГП #2 -Nvidia GeForce MX150
root@europa:~# uname -a
Linux europa 4.14.0-kali3-amd64 #1 SMP Debian 4.14.17-1kali1 (2018-02-16) x86_64 GNU/Linux
Выпуск-
root@europa:~# cat /etc/*release*
DISTRIB_ID=Kali
DISTRIB_RELEASE=kali-rolling
DISTRIB_CODENAME=kali-rolling
DISTRIB_DESCRIPTION="Kali GNU/Linux Rolling"
PRETTY_NAME="Kali GNU/Linux Rolling"
NAME="Kali GNU/Linux"
ID=kali
VERSION="2018.1"
VERSION_ID="2018.1"
ID_LIKE=debian
ANSI_COLOR="1;31"
HOME_URL="http://www.kali.org/"
SUPPORT_URL="http://forums.kali.org/"
BUG_REPORT_URL="http://bugs.kali.org/"
Прежде чем мы начнем,пара замечаний:
ИСПОЛЬЗУЙТЕ НА СВОЙ РИСК
Это руководство относится к официальному драйверу NVIDIA
Учебник, найденный на официальном сайте Kali, НЕИСПРАВЕН! Он никогда не работает на ноутбуках с поддержкой оптимальной/гибридной графики
.
Шаг 1 :Убедитесь, что у вас гибридная графика
root@europa:~# lspci | grep -E "VGA|3D"
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07)
01:00.0 3D controller: NVIDIA Corporation GP108M [GeForce MX150] (rev a1)
Шаг 2 :Отключить модерн
echo -e "blacklist nouveau\noptions nouveau modeset=0\nalias nouveau off" > /etc/modprobe.d/blacklist-nouveau.conf
update-initramfs -u && reboot
Шаг 3 :Система перезагрузится, и режим nouveau должен быть отключен. Убедитесь, что nouveau отключено:
lsmod |grep -i nouveau
Если ничего не показывает, это означает, что nouveau успешно отключено.
Шаг 4 :Установите драйвер nvidia из репозитория kali:
apt-get install nvidia-driver nvidia-xconfig
Вы также можете загрузить последнюю версию файла.run с веб-сайта Nvidia. Выполните и продолжите установку. Будь то из репозитория Kali или веб-сайта Nvidia, процедура одинакова. Код для установки файла.run:
sudo sh./Nvidia-driver-filename.run
Шаг 5 :Теперь нам нужно найти идентификатор шины нашей карты nvidia:
nvidia-xconfig --query-gpu-info | grep 'BusID : ' | cut -d ' ' -f6
должно отображаться что-то вроде этого:
PCI:1:0:0
Это наш идентификатор шины.
Шаг 6 :Теперь мы создаем файл /etc/X11/xorg.conf с этим идентификатором шины в соответствии с руководством Nvidia:
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"
EndSection
Section "Device"
Identifier "intel"
Driver "modesetting"
EndSection
Section "Screen"
Identifier "intel"
Device "intel"
EndSection
Замените строку внутри****на идентификатор вашей шины и сохраните ее в /etc/X11/xorg.conf
Шаг 7 :Теперь нам нужно создать несколько сценариев в соответствии с нашим менеджером отображения. Поскольку я использую Kali Linux по умолчанию, то есть GDM, я создал два файла :/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
Шаг 8 :Теперь перезагрузите компьютер, и вы должны использовать драйвер Nvidia. Убедитесь, что все в порядке :установите mesa -утилиты, если они не были установлены ранее.
apt-get install mesa-utils
root@europa:~# glxinfo | grep -i "direct rendering" direct rendering: Yes
Шаг 9 :Теперь вы можете установить инструменты и драйверы cuda
apt install -y ocl-icd-libopencl1 nvidia-driver nvidia-cuda-toolkit
Шаг 10 :Теперь, когда наша система готова к работе, нам нужно проверить правильность загрузки драйверов.Мы можем быстро проверить это, запустив инструмент nvidia -smi.
root@europa:~# nvidia-smi
Wed Apr 11 11:08:55 2018
+----------------------------------------------------------------------------- +
| NVIDIA-SMI 390.42 Driver Version: 390.42 |
|-------------------------------+----------------------+---------------------- +
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+====================== |
| 0 GeForce MX150 Off | 00000000:01:00.0 Off | N/A |
| N/A 60C P0 N/A / N/A | 368MiB / 2002MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|============================================================================= |
| 0 763 G /usr/lib/xorg/Xorg 20MiB |
| 0 793 G /usr/bin/gnome-shell 19MiB |
| 0 1108 G /usr/lib/xorg/Xorg 82MiB |
| 0 1191 G /usr/bin/gnome-shell 242MiB |
| 0 2132 G gnome-control-center 1MiB |
+-----------------------------------------------------------------------------+
РЕШЕНИЕ ПРОБЛЕМЫ С РАЗРЫВОМ ЭКРАНА :После успешной загрузки с помощью драйвера Nvidia вы, скорее всего, столкнетесь с проблемой разрыва экрана, например, :сбои при воспроизведении видео в VLC, видео Youtube в Chrome/Firefox и т. д. К счастью, мы можно исправить это, включив PRIME Sync.
1. Убедитесь, что PRIME отключен
xrandr --verbose|grep PRIME
должно получиться что-то вроде этого:
PRIME Synchronization: 0
PRIME Synchronization: 1
Первый — это наш подключенный дисплей. Синхронизация PRIME отключена.
2. Отредактируйте /etc/default/grub и добавьте nvidia -drm.modeset=1 в GRUB _CMDLINE _LINUX _ПО УМОЛЧАНИЮ после тихого. Как показано ниже:
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet nvidia-drm.modeset=1"
...
3. Сохраните изменения и обновите grub с помощью команды:
update-grub
4. Перезагрузите систему.
5.Проверьте, включен ли PRIME:
xrandr --verbose|grep PRIME
Теперь он должен выводить:
PRIME Synchronization: 1
PRIME Synchronization: 1
Если у вас по-прежнему отображается 0, возможно, что-то не так с конфигурацией вашей системы/ядром. Поскольку это все еще экспериментальная функция от Nvidia, вам не повезло.
ЕСЛИ ВЫ ЗАСТРЕЛИ НА ЭКРАНЕ ЗАГРУЗКИ
Вернуть то, что мы сделали до сих пор:
Нажмите CTRL+ALT+F2 или CTRL+ALT+F3, войдите под своим паролем.
apt-get remove --purge nvidia-*
rm -rf /etc/X11/xorg.conf
Удалите те файлы диспетчера отображения, которые мы создали ранее (для GDM):
rm -rf /usr/share/gdm/greeter/autostart/optimus.desktop
rm -rf /etc/xdg/autostart/optimus.desktop
Теперь перезагрузите компьютер. Вы должны быть в состоянии вернуться к своей старой системе.
Если возникнут какие-либо проблемы, отправьте сообщение в форме Кали .
Выражаю искреннюю благодарность Tiger11 , проделавшему всю тяжелую -работу.
Мне удалось сделать это с помощью этой конфигурации:
exec \
swaymsg "workspace $workspace_programming"; \
swaymsg "exec $neovim"; \
swaymsg "layout tabbed"; \
sleep 0.3s; \
swaymsg "exec $term"; \
sleep 0.3s; \
swaymsg "split vertical"; \
swaymsg "layout stacking"
РЕДАКТИРОВАТЬ:Описанное выше работало, но только при выполнении после запуска (с помощьюexec_always
). По какой-то причине при запуске с использованием exec
это не работает. Удивительно для меня, он вообще не открывает ни одно окно, даже терминал Neovim. Я его немного рефакторил, и эта версия работает и при запуске:
exec swaymsg "workspace $workspace_programming; exec $neovim; layout tabbed;"
exec sleep 0.3s && swaymsg "exec $term";
exec sleep 0.6s && swaymsg "workspace $workspace_programming; split vertical; layout stacking"
Я не понимаю, в чем разница между обеими версиями и почему первая не работает. Если кто-то может объяснить мне, я был бы рад.
Мне также все еще интересно, есть ли более чистый способ сделать это, не прибегая к sleep
.