Раннее разрешение экрана (меню загрузчика, текст ядра, промпт LUKS) задаёт прошивка UEFI через GOP (Graphics Output Protocol). Если монитор не успевает отдать EDID по HDMI до старта прошивки, прошивка выставляет 1024x768, и драйвер simpledrm наследует этот режим. Надёжных рычагов управления GOP из самой операционной системы нет.
GOP, или Graphics Output Protocol, часть UEFI-спецификации. До передачи управления ядру Linux работает с видеовыходом только через этот протокол. Прошивка опрашивает монитор (EDID), определяет нативное разрешение, выставляет framebuffer нужного размера.
После передачи управления ядру на короткий период поднимается драйвер simpledrm. Это обёртка над тем же framebuffer, который уже настроила прошивка. Простой драйвер не меняет разрешение, он просто наследует то, что есть.
Когда загружается полный KMS-драйвер (amdgpu, i915, nouveau), он берёт управление и переключает на нативный режим. Но до этого момента всё, что видит пользователь, зависит только от прошивки.
На части плат с HDMI подключением монитор не успевает ответить на запрос EDID в отведённое прошивкой время. Результат: прошивка не знает нативное разрешение и ставит безопасный fallback, 1024x768.
Проблема конкретная: не все порты одинаковы, не все мониторы одинаковы, не все прошивки одинаковы. На одном и том же железе через DisplayPort может работать нативно, а через HDMI будет 1024x768.
Первое, что стоит сделать, посмотреть, какой режим реально активен на раннем этапе:
journalctl -b -k --no-pager | grep 'frame buffer device'
В выводе simpledrm: строка 128x48 означает 1024x768, а 240x67 приблизительно 1920x1080. Числа символьные, пересчитываются через отношение стандартных шрифтов консоли.
Дополнительные команды диагностики:
# Проверить, какой initrd лежит в UKI
sudo objcopy -O binary --only-section=.initrd /boot/EFI/Linux/arch-linux.efi /tmp/x.cpio
lsinitcpio -l /tmp/x.cpio ; rm -f /tmp/x.cpio
# Посмотреть EFI-переменную консольного режима
efivar -l | grep -i consolemode
Переменная LoaderConfigConsoleMode может перекрывать настройки из loader.conf. Если она существует, обрати внимание на её значение.
Вот что я пробовал и что не дало результата:
Параметр console-mode max в конфиге systemd-boot. Не помогает, проверено ребутом. Этот параметр влияет на режим консоли, а не на этап GOP/simpledrm.
Параметр video=HDMI-A-1:1920x1080@60 в cmdline ядра. Не помогает: параметр video= влияет на выбор режима KMS-драйвером, но к этапу firmware GOP и simpledrm он ещё не имеет отношения.
MODULES=(amdgpu) в /etc/mkinitcpio.conf. Не влияет на этап simpledrm. Драйвер amdgpu поднимается позже, когда ядро уже передало управление framebuffer.
Крупный консольный шрифт через хук consolefont. Визуально хуже: глифы растягиваются по уже убийственной 1024x768 сетке.
Если используешь UKI и хук consolefont в mkinitcpio, обрати внимание: хук кладёт шрифт в образ под именем /consolefont.psf, а не ter-*.psf.gz. Если проверяешь наличие шрифта через lsinitcpio -l или objcopy, grep по оригинальному имени ложно покажет, что шрифта нет.
# Правильная проверка
lsinitcpio -l /tmp/x.cpio | grep console
# Не так:
lsinitcpio -l /tmp/x.cpio | grep ter-
Самый честный ответ: изнутри ОС надёжных рычагов нет. Вот варианты за пределами Linux:
Если ни один из вариантов не подходит, 1024x768 на раннем этапе просто приходится принять. Нативное разрешение появится сразу после загрузки amdgpu.
Нет. 1024x768 на этапе загрузки и LUKS-промпта влияет только на эстетику. После поднятия amdgpu всё переключается на нативный режим.
video= в cmdline?Нельзя. Параметр video=HDMI-A-1:1920x1080@60 влияет на выбор режима драйвером KMS, а GOP и simpledrm работают до этого этапа.
console-mode max в loader.conf?Нет, проверено. Параметр влияет на размер текстового буфера консоли, а не на framebuffer, настроенный прошивкой.
MODULES=(amdgpu) в mkinitcpio?Для ускорения поднятия KMS после передачи управления ядру, да. Но на этап simpledrm это не влияет: ранний framebuffer наследуется от GOP, а не от драйвера amdgpu.
Это особенность конкретной платы и прошивки. DisplayPort обычно опрашивает EDID быстрее и надёжнее, чем HDMI.
Раннее разрешение при загрузке Arch Linux с UKI определяется исключительно прошивкой UEFI и тем, как быстро монитор отвечает на EDID-запрос. Никакие параметры cmdline, хуки mkinitcpio или EFI-переменные не дают надёжного контроля над GOP. Если проблема существует, выход за пределами ОС: другой кабель, другой порт, обновление BIOS, CSM. В остальном, после поднятия amdgpu нативное разрешение появляется само, и система работает полноценно.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии