Linux nomodeset при установке

Kernel mode setting (Русский)

Состояние перевода: На этой странице представлен перевод статьи Kernel mode setting. Дата последней синхронизации: 9 февраля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Kernel Mode Setting (KMS) представляет собой метод для задания разрешения дисплея и глубины в пространстве ядра, а не в пространстве пользователя.

Реализация KMS в ядре Linux активирует родное расширение в framebuffer и допускает мгновенное переключение консолей (tty). KMS содержит новые технологии (такие как DRI2) которые помогают снизить количество артефактов и увеличить производительность в 3D, даже при включенном режиме энергосбережения.

Примечание: Проприетарный драйвер NVIDIA (с версии 364.12) также поддерживает KMS, но не использует встроенную реализацию ядра и не обеспечивает работу драйвера FBdev для отображения консоли с высоким разрешением.

История

Ранее настройками видео карты занимался непосредственно X сервер. По этой причине достигнуть высокого качества графики в tty консолях было непросто. Кроме того, каждый раз при переключении из X в виртуальную консоль с помощью комбинации клавиш ( Ctrl+Alt+F1 ) сервер должен был передавать управление видеокартой ядру, что было медленным и вызывало мерцания. Особенно «болезненным» был переход управления обратно к X серверу ( Ctrl+Alt+F7 ).

С использованием Kernel Mode Setting (KMS) ядру стала доступна установка режимов видео карты. Наряду с другими достоинствами это улучшает визуальные эффекты при установке параметров графики, а также позволяет быстрее переключаться между виртуальными консолями и X.

Установка

Обратите внимание — для любых используемых Вами методов необходимо всегда отключать:

  • Любые vga= режимы в загрузчике, так как это вызовет конфликт с разрешением, активированным в KMS.
  • Любые video= строки, активирующие framebuffer, что вызовет конфликт с драйвером.
  • Любые другие драйвера framebuffer (такие как uvesafb).

Поздний запуск KMS

Драйвера Intel, Nouveau и ATI и AMDGPU уже активируют KMS автоматически для всех чипсетов и не требуют ручной настройки.

Проприетарный драйвер NVIDIA поддерживает KMS с версии 364.12, но нужно включить его вручную.

Ранний запуск KMS

Обычно KMS инициализируется после этапа initramfs. Однако можно включить KMS уже на этапе initramfs. Добавьте нужный модуль для видеодрайвера в конфигурационный файл initramfs:

  • amdgpu для AMDGPU ли radeon для старого драйвера ATI.
  • i915 для Intel graphics.
  • nouveau для открытого драйвера Nouveau.
  • mgag200 для Matrox.
  • Для QEMU в зависимости от используемого режима графики: virtio-gpu для VirtIO, qxl для QXL или cirrus для Cirrus.
  • nvidia nvidia_modeset nvidia_uvm nvidia_drm для проприетарного драйвера nvidia . Смотрите NVIDIA (Русский)#DRM kernel mode setting для подробностей.

Инструкции по настройке initramfs немного отличаются в зависимости от генератора initramfs, который вы используете.

mkinitcpio

Пример раннего запуска KMS для Intel graphics:

Примечание: Пользователям Intel может понадобиться добавление intel_agp перед i915 для подавления ошибок ACPI. Это может потребоваться для возобновления работы из спящего режима при изменённой конфигурации дисплея. Если вы используете PRIME GPU с Intel IGP в качестве основного GPU и AMD в качестве дискретного, добавление intel_agp может привести к проблемам при возобновлении работы из спящего режима (монитор не получает сигнала). Подробнее: [1]

Читайте также:  Linux connect to windows cmd

Если Вы используете изменённый файл EDID (не совпадающий с преднастроенными разрешениями), следует встроить его в initramfs:

FILES=(/usr/lib/firmware/edid/ваш_edid.bin)

Booster

Добавление дополнительных файлов в образ:

extra_files: /usr/lib/firmware/edid/ваш_edid.bin

После изменений пересоберите образы booster.

Решение проблем

Мои шрифты слишком маленькие

В статье Консоль Linux#Шрифты вы можете узнать, как изменить шрифт в консоли на более крупный. Например, шрифт Terminus ( terminus-font ) доступен в нескольких размерах, в том числе и в большом ter-132n .

Или можно отключить modesetting, что приведёт к использованию меньшего разрешения экрана, и шрифты станут выглядеть крупнее.

Проблемы во время загрузки и dmesg

Опрос подключенных дисплеев на старых системах может быть довольно громоздким. Опрос происходит периодически и может занять несколько сотен миллисекунд в зависимости от оборудования. Это может приводить к заметным задержкам, например, при воспроизведении видео. Такие задержки могут происходить, даже если видео выводится на HDP-выход, но в конфигурации оборудования есть другие выходы, не HDP. Если у вас наблюдаются задержки в выводе изображения на экран каждые 10 секунд, отключение опроса может помочь.

Если выскакивает ошибка с кодом 0x00000010 (2) во время процесса загрузки (Вы можете получить около 10 строк текста, последняя часть содержит этот код), используйте:

options drm_kms_helper poll=0

Принудительный режим и EDID

В случае когда Ваш дисплей не отправляет соответствующий EDID или вызывает какие-либо проблемы, Вы будете уведомлены, что родное разрешение автоматически не настроено или не отображается вообще. Ядро пытается отловить проблемы и устанавливает одно из наиболее типичных разрешений.

Если у вас есть EDID-файл для вашего монитора, то вам просто нужно явно указать его (смотрите ниже). Однако чаще всего прямого доступа к нормальному файлу нет, и приходится либо извлекать существующий и исправлять его, либо генерировать новый.

Создание новых бинарных файлов EDID для различных разрешений и конфигураций возможно во время компиляции ядра, следуя документации (также здесь есть краткое руководство). Другие решения подробно описаны в этой статье. Извлечение существующего в большинстве случаев проще, например, если ваш монитор нормально работает под Windows, вам может повезти извлечь EDID из соответствующего драйвера, или есть похожий монитор, который успешно работает с такими же настройками, вы можете использовать get-edid из пакета read-edid . Можно также попробовать поискать в /sys/class/drm/*/edid .

После подготовки EDID поместите его в подкаталог, например, с названием edid в каталоге /usr/lib/firmware и скопируйте в него свой бинарный файл.

Для запуска во время загрузки пропишите параметр ядра:

drm.edid_firmware=edid/your_edid.bin

Для ядер старее 4.13 используется другой параметр:

drm_kms_helper.edid_firmware=edid/your_edid.bin

Также, можно указать только для заданного дисплея:

drm.edid_firmware=VGA-1:edid/your_edid.bin

Для преднастроенные разрешений, смотри таблицу имён спецификаций:

Читайте также:  Команды терминала linux управление пользователями
Разрешение Имя спецификации
800×600 edid/800×600.bin
1024×768 edid/1024×768.bin
1280×1024 edid/1280×1024.bin
1600×1200 (ядро 3.10 или новее) edid/1600×1200.bin
1680×1050 edid/1680×1050.bin
1920×1080 edid/1920×1080.bin

Если осуществлён ранний запуск KMS, необходимо включить кастомизированный файл EDID в initramfs иначе возможны проблемы.

Значение параметра drm.edid_firmware также может быть изменено после загрузки путём записи в /sys/module/drm/parameters/edid_firmware :

# echo edid/your_edid.bin > /sys/module/drm/parameters/edid_firmware

Это повлияет только на вновь подключенные мониторы; ранее подключенные продолжат использовать старые настройки EDID. Однако для внешних мониторов достаточно переподключить их, чтобы новый EDID применился.

Начиная с ядра 3.15, для изменения EDID после загрузки системы можно использовать debugfs вместо параметра ядра, если ядро не находится в Lockdown-режиме. Это очень полезно, если вы меняете местами мониторы на разъёме или просто для тестирования.

# cat correct-edid.bin > /sys/kernel/debug/dri/0/HDMI-A-2/edid_override
# echo -n reset > /sys/kernel/debug/dri/0/HDMI-A-2/edid_override

Важно: Метод описанный ниже немного не завершён потому что Xorg не принимает заданные разрешения, так что советуем использовать метод, описанный выше; однако, указание разрешения с помощью строки video= может оказаться полезным в некоторых событиях.

  • : Коннектор, т.н. DVI-I-1, смотри доступные здесь /sys/class/drm/
  • x : разрешение
  • M : посчитать режим CVT?
  • R : снижение мерцания?
  • — : глубина цвета
  • @ : частота обновления
  • i : чересстрочный (non-CVT mode)
  • m : поля?
  • e : принудительный вывод on
  • d : принудительный вывод off
  • D : принудительный цифровой вывод on (т.н. DVI-I коннектор)

Вы можете переопределять режимы нескольких выходов использующих «video» несколько раз, в частности, для вывода DVI в 1024×768 на 85 Hz и отключения TV-out:

video=DVI-I-1:1024x768@85 video=TV-1:d

Для получения имени и текущего статуса коннекторов, Вы можете использовать однострочную команду:

$ for p in /sys/class/drm/*/status; do con=$; echo -n "$: "; cat $p; done
DVI-I-1: connected HDMI-A-1: disconnected VGA-1: disconnected

Отключение modesetting

Вы можете захотеть отключить KMS по различным причинам. Для отключения KMS добавьте nomodeset в параметры ядра.

Наряду с параметром nomodeset , для карт Intel необходимо добавить i915.modeset=0 , а для Nvidia nouveau.modeset=0 . Для систем двойной графики (dual-graphics system) Nvidia Optimus, нужно добавить все три параметра ядра ( «nomodeset i915.modeset=0 nouveau.modeset=0» ).

Примечание: Некоторые драйвера Xorg не работают с отключенным KMS. Читайте вики-страницу вашего драйвера для подробностей.

Источник

How do I set ‘nomodeset’ after I’ve already installed Ubuntu?

I know that editing the boot options line and adding ‘nomodeset’ solves the problem of my laptop during LiveCD mode, what I don’t know is how to set it at boot up through Grub2 after I’ve installed Ubuntu. So, my question is; how do I set nomodeset before I boot into Ubuntu?

3 Answers 3

You should add this option to /etc/default/grub , firstly:

and then add nomodeset to GRUB_CMDLINE_LINUX_DEFAULT :

GRUB_DEFAULT=0 GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset" GRUB_CMDLINE_LINUX="" 

And then save by hitting Ctrl + O , then exit nano with Ctrl + X , then simply run:

@stiv This is for Debian/Ubuntu based systems I believe. On other systems you may edit your GRUB configuration directly, which is usually located in /boot/grub/ if I remember correctly.

thank you, I used that to set the «nomodeset» to allow Linux boot from my old macbook pro. As the Christian’s answer noted, I also found it very useful to remove «quiet and splash» so I could see something moving on behind the scenes.

Читайте также:  Master pdf editor линукс

To edit Grub2 during the boot process try the following:

  1. Immediately after the BIOS splash screen during boot, press and hold the SHIFT button. This will display you grub containing a list of kernels and recovery options enter image description here
  2. Press e to edit the first kernel displayed enter image description here
  3. Find the line ending with quiet splash . Add your boot option before these key words — i.e. so the line looks like [. ] nomodeset quiet splash
  4. Press CTRL + X to boot

Follow the steps in Coldfish’s answer on how to fix the nomodeset boot option permanently so that you don’t have to go through this manual procedure again.

I’m afraid I don’t have a quiet splash option in that area. I don’t recognize any of the lines, actually.

fossfreedom. Thank you so much! I’ve had this problem since 10.04! My god, I would hug you if I could! 😀

I had the same problem. The above solutions are all correct, but it’s a bit more tricky when you have to fix this when running from a Live CD. I found this blog post very helpful.

The author basically proposes to mount the installed Linux from within the LiveCD. I did that, and it helped me a lot. So here are the steps:

  • Run from the Live CD, and either install Ubuntu or move on if already done
  • Check your installed partition with the command «gparted». It opens a Window telling you where you installed Ubuntu. In my case it was /dev/sda2 which contained an ext4 partition.
  • Mount the partition: sudo mount /dev/sdXY /mnt
  • Then mount/bind the directories Grub needs to access: sudo mount —bind /dev /mnt/dev && sudo mount —bind /dev/pts /mnt/dev/pts && sudo mount —bind /proc /mnt/proc && sudo mount —bind /sys /mnt/sys
  • Then move on to this environment using chroot, which I found a supersmart idea: sudo chroot /mnt
  • You should now be able to edit /etc/default/grub , as the others pointed out. Like: sudo vi /etc/default/grub and change the line GRUB_CMDLINE_LINUX_DEFAULT=»nomodeset» I found it very useful to also remove quiet and splash so I could see something moving on behind the scenes.
  • The author originally noted, he needs that after an installation of Windows, which broke Grub. He had to reinstall. In my case Grub was intact, but my computer (mac) didn’t boot with the original Grub settings. So the only thing left for me was update-grub

The author unmounted, but I just rebooted and the new settings where in place. With the «nomodeset» option I was able to boot Ubuntu and Lubuntu from a MacBook Pro harddisk.

Источник

Оцените статью
Adblock
detector