Ошибка drm cannot find any crtc or sizes появляется в журнале системы Linux, когда подсистема DRM (Direct Rendering Manager) не обнаруживает ни одного доступного контроллера развёртки — и графический стек не может вывести изображение на дисплей. Чаще всего сообщение всплывает при загрузке с чёрным экраном, при подключении монитора по DisplayPort или HDMI после обновления ядра, а также на встраиваемых платах и виртуальных машинах.
Термин CRTC (CRT Controller) — это аппаратный блок видеокарты, отвечающий за формирование видеопотока: он читает кадровый буфер и передаёт сигнал на коннектор. Если драйвер не находит ни одного CRTC и не получает список поддерживаемых разрешений (sizes), значит, цепочка «GPU → коннектор → монитор» разорвана на одном из этапов. Ниже разберём, где именно искать разрыв и как вернуть изображение без переустановки системы.
Что означает ошибка и когда она возникает
Сообщение формируется драйвером в момент инициализации режимов отображения (kernel mode setting, KMS). Драйвер опрашивает оборудование, пытается сопоставить каждому физическому выходу (коннектору) свободный CRTC и считать с монитора данные EDID — таблицу поддерживаемых разрешений. Если ни одна пара «CRTC + коннектор» не собралась, в лог попадает именно эта строка.
Типичные сценарии появления:
- 🖥️ Загрузка системы завершается чёрным экраном, хотя консоль на этапе BIOS/UEFI работала.
- 🔌 Монитор подключён через переходник или KVM-переключатель, и EDID не доходит до видеокарты.
- 🐧 После обновления ядра проприетарный модуль (например, NVIDIA) не пересобрался, а KMS упал.
- 📟 На одноплатных компьютерах (Raspberry Pi, платы на Rockchip, Allwinner) не загружен device tree с описанием дисплейного контроллера.
- 💻 В виртуальной машине отключён виртуальный видеоадаптер или не загружен модуль
virtio-gpu/vmwgfx.
Важно понимать: само по себе сообщение — это симптом, а не диагноз. Одно и то же сообщение может означать и мёртвый кабель, и отсутствующий драйвер, поэтому диагностику стоит вести от простого к сложному.
Шаг 1. Проверка аппаратной части
Прежде чем трогать драйверы, убедитесь, что монитор физически способен отдать данные о себе. Отключите и заново подключите кабель с обеих сторон, попробуйте другой порт видеокарты и, по возможности, другой кабель. Переходники DisplayPort→VGA, дешёвые KVM и удлинители — частые виновники потери EDID.
Проверьте, видит ли монитор хоть какой-то сигнал: если на экране есть сообщение «No signal», проблема почти наверняка аппаратная или на уровне инициализации GPU. Если же экран просто чёрный без сообщений, монитор получает сигнал, но система не выводит картинку — это уже территория драйверов.
⚠️ Внимание: горячее подключение кабелей во время работы системы обычно безопасно, но на некоторых встраиваемых платах и старых видеокартах переподключение во время загрузки может сбить инициализацию дисплея. Если сомневаетесь — подключайте монитор до включения питания.
Если рядом есть второй компьютер или ноутбук, подключите к нему тот же монитор и кабель — за пять минут вы исключите (или подтвердите) аппаратную ветку проблемы.
Шаг 2. Диагностика через консоль и журналы
Если графика не стартует, переключитесь в текстовую консоль комбинацией Ctrl+Alt+F3 (или F2–F6) либо зайдите по SSH с другой машины. Дальше соберите фактуру о состоянии DRM-подсистемы.
Посмотрите сообщения ядра, связанные с графикой:
dmesg | grep -iE "drm|gpu|edid|crtc"
Проверьте, какие DRM-устройства вообще зарегистрированы в системе:
ls /dev/dri/
ls /sys/class/drm/
В каталоге /sys/class/drm/ должны присутствовать записи вида card0 и card0-HDMI-A-1, card0-DP-1 и т.п. Для каждого коннектора можно посмотреть статус:
cat /sys/class/drm/card0-HDMI-A-1/status
cat /sys/class/drm/card0-HDMI-A-1/modes
Если status показывает disconnected при подключённом мониторе, а файл modes пуст — драйвер не смог прочитать EDID. Если же каталог /sys/class/drm/ содержит только version без устройств cardN, драйвер GPU вообще не загрузился.
Шаг 3. Проверка драйвера видеокарты
Узнайте, какой модуль ядра обслуживает вашу видеокарту и загружен ли он:
lspci -k | grep -A3 -E "VGA|3D|Display"
В выводе строка Kernel driver in use показывает активный драйвер: i915 для Intel, amdgpu или radeon для AMD, nvidia/nouveau для NVIDIA. Если строка отсутствует или указан Kernel modules: ... без «in use» — драйвер не привязался к устройству, и это прямой путь к ошибке с CRTC.
Частые причины непривязки драйвера:
- 🧱 Проприетарный модуль NVIDIA не пересобран под новое ядро — помогает переустановка драйвера через пакетный менеджер (например, механизм DKMS).
- 🚫 Модуль попал в чёрный список — проверьте файлы в
/etc/modprobe.d/на строки видаblacklist nouveauилиblacklist nvidia. - ⚙️ В параметрах ядра передан
nomodeset— он отключает KMS, и драйвер не создаёт CRTC вовсе. - 📦 Для встраиваемых плат не загружен нужный overlay device tree — дисплейный контроллер просто не описан для ядра.
☑️ Базовая диагностика DRM
Шаг 4. Параметры ядра и режим загрузки
Одна из самых частых программных причин — параметр nomodeset, оставшийся в конфигурации загрузчика после установки системы в «безопасном графическом режиме». Проверьте текущую командную строку ядра:
cat /proc/cmdline
Если nomodeset присутствует, отредактируйте конфигурацию загрузчика. Для GRUB это обычно файл /etc/default/grub, параметр GRUB_CMDLINE_LINUX_DEFAULT; после правки нужно обновить конфигурацию командой sudo update-grub (в системах на базе Debian/Ubuntu) или grub2-mkconfig — в зависимости от дистрибутива. Точную команду для вашей системы уточните в её документации.
Обратная ситуация тоже встречается: на некоторых конфигурациях со старыми или экзотическими GPU, наоборот, помогает временная загрузка с nomodeset, чтобы попасть в систему и доустановить драйвер. Это диагностический приём, а не постоянное решение — с отключённым KMS аппаратное ускорение и нормальные разрешения работать не будут.
⚠️ Внимание: правьте конфигурацию загрузчика аккуратно и оставляйте в меню GRUB предыдущее ядро. Ошибка в параметрах может сделать систему незагружаемой, и откат через резервную запись меню — самый быстрый способ восстановления.
Как временно изменить параметры ядра без правки файлов
В меню GRUB выделите нужную запись и нажмите клавишу «e». Найдите строку, начинающуюся с linux, добавьте или удалите параметр (например, nomodeset) в её конец и нажмите Ctrl+X или F10 для загрузки. Изменение действует только на текущий запуск и не сохраняется.
Шаг 5. Проблемы с EDID и принудительное задание режима
Когда драйвер загружен, коннектор виден, но список режимов пуст, типичная причина — нечитаемый или повреждённый EDID. Проверить его содержимое можно так:
cat /sys/class/drm/card0-HDMI-A-1/edid | xxd | head
Пустой вывод или «мусор» вместо структурированных данных подтверждает проблему. Возможные обходные пути: замена кабеля и отказ от переходников, принудительное указание видеорежима через параметр ядра вида video=HDMI-A-1:1920x1080@60 (имя коннектора подставьте из /sys/class/drm/), а в отдельных случаях — подмена EDID прошивкой через механизм drm_kms_helper. Последний способ требует корректного бинарного EDID-файла, и для вашей модели монитора его лучше получить с заведомо рабочего подключения.
Отметим, что параметр video= помогает, когда монитор физически исправен, но его данные не доходят до драйвера. Если же проблема в самом GPU или драйвере, принудительный режим эффекта не даст.
Ошибка «cannot find any crtc or sizes» почти всегда сводится к одной из трёх причин: не загружен драйвер GPU, отключён KMS (nomodeset) или драйвер не получил EDID от монитора. Диагностика через /sys/class/drm/ и dmesg локализует ветку за несколько минут.
Сводная таблица симптомов и действий
| Наблюдение | Вероятная причина | Первое действие |
|---|---|---|
| В /sys/class/drm/ нет card0 | Драйвер GPU не загружен | Проверить lspci -k и dmesg, переустановить драйвер |
| card0 есть, коннекторов нет | nomodeset или сбой KMS | Проверить /proc/cmdline, убрать nomodeset |
| Коннектор disconnected при подключённом мониторе | Кабель, переходник, порт | Заменить кабель, подключить напрямую |
| connected, но modes пуст | Нечитаемый EDID | Параметр video= с принудительным режимом |
| Ошибка после обновления ядра | Модуль не пересобран (DKMS) | Переустановить драйвер, загрузить старое ядро |
Особые случаи: встраиваемые платы и виртуализация
На одноплатных компьютерах дисплейный конвейер описывается в device tree. Если вы собираете ядро самостоятельно или ставите сторонний образ, убедитесь, что включён нужный overlay для вашего дисплея или HDMI-выхода — обычно это строка в конфигурационном файле загрузки платы (например, config.txt у Raspberry Pi или параметры u-boot у других плат). Конкретные имена overlay-файлов зависят от платы и версии образа, поэтому сверяйтесь с документацией производителя.
В виртуальных машинах ошибка возникает, когда гостевой системе не назначен виртуальный GPU или не загружен соответствующий модуль (virtio-gpu для QEMU/KVM, vmwgfx для VMware, hyperv_drm для Hyper-V). Проверьте настройки виртуальной машины: видеоадаптер должен быть включён, а в гостевой системе — присутствовать соответствующий модуль ядра.
На одноплатных платах полезно сравнить вывод dmesg с заведомо рабочим образом от производителя: если там дисплейный контроллер инициализируется, а у вас нет — ищите различия в device tree и включённых overlay.
Часто задаваемые вопросы
Ошибка появляется в логах, но изображение есть. Это опасно?
Если рабочий стол загружается и монитор показывает штатно, сообщение может относиться к неподключённому коннектору (например, к неиспользуемому видеовыходу) или к попытке драйвера опросить порт до подключения монитора. В таком случае это информационная запись, а не неисправность. Тревожиться стоит, когда сообщение сопровождается чёрным экраном или отсутствием нужного разрешения.
Поможет ли переустановка системы?
Как правило, нет — если причина в кабеле, EDID монитора или параметре nomodeset, переустановка воспроизведёт ту же конфигурацию. Сначала пройдите диагностику через dmesg, /sys/class/drm/ и lspci -k: она занимает минуты и точно покажет, в каком звене разрыв.
Что делать, если ошибка появилась после обновления ядра?
Загрузитесь с предыдущей версией ядра через меню GRUB (раздел «Advanced options»). Если на старом ядре графика работает, проблема в модуле драйвера под новое ядро: переустановите драйвер через пакетный менеджер, чтобы DKMS пересобрал модуль, либо дождитесь обновления драйвера от дистрибутива.
Монитор подключён через переходник DisplayPort–HDMI, изображения нет. В чём дело?
Переходники бывают активными и пассивными, и не каждая связка корректно пробрасывает EDID. Проверьте монитор прямым кабелем без переходника. Если напрямую всё работает — замените переходник на качественный активный, соответствующий направлению конверсии сигнала.
Как принудительно задать разрешение, если EDID не читается?
Добавьте в параметры ядра строку вида video=ИМЯ-КОННЕКТОРА:1920x1080@60, где имя коннектора возьмите из каталога /sys/class/drm/ (например, HDMI-A-1 или DP-1). Для постоянного применения пропишите параметр в конфигурации загрузчика и обновите её. Учтите, что это обходной путь: при возможности устраните первопричину — кабель или переходник.