Вопрос или проблема
Я столкнулся с проблемой с Thunderbolt на Lenovo Yoga X1 Gen8 в сочетании с док-станцией Lenovo Thunderbolt 3 Dock (40AN, Gen 2) при использовании Ubuntu 24.
На моем старом HP ProBook 450 G6 (с поддержкой только USB 3.2, без Thunderbolt) док-станция работает нормально в initramfs/plymouth во время ввода пароля для LUKS. Однако на Lenovo Yoga X1 Gen8 это не так – что мешает мне использовать однокабельное подключение, так как я не могу ввести свой пароль без изменения настроек, например, подключив клавиатуру напрямую к ноутбуку.
-> Примечание: я только что поменял SSD своего старого устройства на новое вчера, так что это точно та же установка, которая запускается и вызывает это поведение.
Во время загрузки initramfs Thunderbolt распознается, но устройства, подключенные к док-станции (мониторы, клавиатура), “не работают”. Подсветка клавиатуры даже выключается на этом этапе, поэтому я предполагаю, что они отключены намеренно какой-то политикой.
Предзагрузочные среды (UEFI и GRUB) распознают док-станцию как USB-устройство, успешно инициализируя все USB-устройства, подключенные к ней, поэтому я знаю, что все работает нормально. Но как только модуль Thunderbolt загружается в процессе initramfs, USB-устройства, похоже, выключаются.
Мои наблюдения:
Thunderbolt распознается, что видно по текстовым логам на экране в plymouth/text console, таким как:
thunderbolt 1-0:1.1: новый ретаймер найден, производитель …
thunderbolt 1-1: новое устройство найдено, производитель …
thunderbolt 1-1: Lenovo ThinkPad Thunderbolt 3 Dock
Я предполагаю, что проблема заключается в том, как initramfs обрабатывает Thunderbolt в целом или в этой комбинации ноутбук/док Lenovo. Я думаю, что это может быть связано с политиками безопасности, а модуль загружается корректно. Другие пользователи считали, что модуль thunderbolt не загружается или загружается неправильно. Смотрите: Док-станции Lenovo не распознаются в initramfs после обновления до Ubuntu 24.04
Решение:
Отключение Thunderbolt 4 “PCIe” Passthrough в UEFI заставляет док-станцию работать как USB4, что снова позволяет ей работать во время initramfs. Клавиатура и другие устройства, подключенные к док-станции, снова функционируют. Однако это полностью отключает функциональность Thunderbolt, что не идеально, так как системы нормально используют авторизованное устройство (boltctl отображает Авторизованное соединение) после шифрования.
Я подумывал исключить модуль Thunderbolt во время initramfs, чтобы обеспечить распознавание USB, а затем снова разрешить загрузку модуля thunderbolt (после расшифровки LUKS).
1. через параметр GRUB:
Использование параметра загрузки GRUB для отключения Thunderbolt во время initramfs.
sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT=”thunderbolt.no_pcie=1″
Это решение предложил мне ChatGPT 4o, но я подозреваю, что этот параметр не существует или может глобально отключить Thunderbolt, что противоречит цели.
2. Изменить конфигурацию Initramfs:
Настройка initramfs.conf для изменения параметра MODULES, например
sudo nano /etc/initramfs-tools/initramfs.conf
MODULES=list или MODULES=dep
Идея вручную исключить модули Thunderbolt, создав курируемый список разрешенных модулей, кажется привлекательной, но этот подход может стать запутанным, особенно при обновлениях ядра или зависимостях, требуя постоянной ручной корректировки списка.
3. “Черный список” модулей Thunderbolt в Initramfs:
Идеальный подход для меня включал бы внесение модуля Thunderbolt в черный список только во время создания initramfs, позволяя USB-устройствам инициализироваться нормально:
Написание скрипта-хука для исключения модулей Thunderbolt во время генерации initramfs, как описано в документации Debian’s initramfs-tools, предполагает, что это осуществимо:
https://manpages.debian.org/buster/initramfs-tools-core/initramfs-tools.7.en.html
Но я беспокоюсь, будет ли добавление скрипта-хука для исключения Thunderbolt надежным и чистым решением – с чем я не смогу рискнуть экспериментировать на своей производственной системе без реального совета, так как я не опытен в кодировании рабочих скриптов-хуков и боюсь “сломать” initramfs.
Кроме того, я задаюсь вопросом, какое бы было самое чистое решение для последующей загрузки thunderbolt, например, через modprobe или с некоторыми пользовательскими настройками, которые и так загружаются.
Вопрос:
Существуют ли лучшие способы избирательно контролировать загрузку модулей во время initramfs и загружать их на каком-то более позднем этапе снова?
Спасибо за вашу помощь
Ответ или решение
Проблемы с Thunderbolt и Initramfs в Ubuntu 24: Как исключить модуль Thunderbolt из загрузки
Введение
Пользователь сталкивается с проблемой функционирования док-станции Lenovo Thunderbolt 3 на ноутбуке Lenovo Yoga X1 Gen8 при использовании Ubuntu 24. При попытке ввода пароля на экране LUKS в среде initramfs устройства, подключенные через Thunderbolt, не распознаются. Ниже рассматриваются возможные решения и рекомендации по исключению модуля Thunderbolt из загрузки в initramfs, чтобы обеспечить нормальное функционирование устройств на док-станции.
Описание проблемы
На старом HP ProBook 450 G6 док-станция работала корректно, что позволило пользователю вводить пароль без каких-либо дополнительных манипуляций. При переходе на Lenovo Yoga X1 Gen8, подключение через док-станцию не позволяет ввести пароль, так как клавиатура и другие устройства не инициализируются должным образом. В процессе загрузки initramfs Thunderbolt распознается, но USB-устройства отключаются, что может быть связано с политиками безопасности или с ошибками в загрузке модуля.
Возможные решения
-
Использование параметра GRUB
Чтобы отключить Thunderbolt во время загрузки initramfs, можно попробовать добавить следующий параметр в конфигурацию GRUB. Однако стоит иметь в виду, что результат может быть не тем, что ожидалось.sudo nano /etc/default/grub
Добавьте:
GRUB_CMDLINE_LINUX_DEFAULT="thunderbolt.no_pcie=1"
После этого выполните обновление конфигурации GRUB:
sudo update-grub
Однако стоит отметить, что этот параметр может глобально отключить Thunderbolt, что не является целью.
-
Модификация конфигурации initramfs
Настройка параметра MODULES в файле конфигурации initramfs, чтобы исключить модуль Thunderbolt, может быть сложной задачей, так как это потребует постоянной корректировки при каждом обновлении ядра.sudo nano /etc/initramfs-tools/initramfs.conf
Можно попытаться установить:
MODULES=dep
Однако это может создать дополнительные сложности с зависимостями.
-
Черный список модулей Thunderbolt в initramfs
Более предпочтительным методом будет написание скрипта-подключения, который будет исключать модули Thunderbolt во время создания initramfs. Это позволит использовать USB устройства нормально, а также потом загрузить модули Thunderbolt после завершения инициализации.Для этого выполните следующие шаги:
- Создайте скрипт в директории
/etc/initramfs-tools/hooks/
, например,blacklist-thunderbolt
. - Наполните его следующим содержимым:
#!/bin/sh PREREQ="" prereqs() { echo "$PREREQ"; } case $1 in prereqs) prereqs; exit 0 ;; esac # Blacklist Thunderbolt module echo "blacklist thunderbolt" >> /etc/modprobe.d/blacklist.conf
- Не забудьте сделать скрипт исполняемым:
sudo chmod +x /etc/initramfs-tools/hooks/blacklist-thunderbolt
После этого пересоздайте initramfs:
sudo update-initramfs -u
- Создайте скрипт в директории
-
Загрузка модуля Thunderbolt позднее
Чтобы загрузить модуль Thunderbolt после расшифровки LUKS, можно использовать командуmodprobe
в пользовательском скрипте или службе, которая будет вызываться после завершения загрузки и инициировать подключение необходимых модулей.
Заключение
Помимо основных предложений по исключению модуля Thunderbolt из загрузки в initramfs, также важно помнить о регулярных обновлениях системы и соответствующей документации. Поскольку каждая система может иметь уникальные конфигурации, подходы для решения проблем могут варьироваться. Рекомендуется тщательно тестировать предложенные изменения в безопасной среде перед их применением на производственной системе. Полное понимание и адекватное управление параметрами загрузки и инициализации могут значительно улучшить взаимодействие с устройствами Thunderbolt и обеспечить стабильную работу в будущем.