Подробный гайд по исправлению: USB отключаются после сна в Astra Linux 1.7
Проблема с отключением или неработоспособностью USB-устройств после выхода из режима сна (suspend-to-RAM) или гибернации в Linux встречается регулярно. В большинстве случаев она связана с подсистемой управления питанием USB (autosuspend), драйверами контроллеров или настройками systemd. Ниже приведён структурированный гайд по диагностике и устранению проблемы в Astra Linux 1.7 (базируется на Debian 10/11, ядра 5.10/5.15).
1. Диагностика
Перед применением решений убедитесь, что проблема именно в управлении питанием, а не в аппаратной или драйверной неисправности.
# Проверка версии ядра
uname -r
# Логи ядра, связанные с USB и сном
journalctl -k | grep -iE "usb|xhci|ehci|suspend|resume"
dmesg | tail -50
# Проверка состояния USB-контроллеров
lsusb -t
lspci -k | grep -iA3 usb
Обратите внимание на сообщения вроде:
usb usbX: USB disconnectxhci_hcd: host not ready after resumePM: Device usbX not responding
Если после пробуждения устройство исчезает из lsusb, но появляется в dmesg с ошибками инициализации → проблема в runtime PM или драйвере контроллера.
2. Быстрая проверка (временное отключение autosuspend)
Этот шаг подтвердит, что причина именно в управлении питанием.
# Отключить autosuspend для всех USB-устройств
echo -1 | sudo tee /sys/module/usbcore/parameters/autosuspend
# Проверить текущее значение
cat /sys/module/usbcore/parameters/autosuspend
-1 = отключено, 2 = по умолчанию (2 секунды простоя).
После установки значения:
- Переведите систему в сон:
systemctl suspend - Разбудите, проверьте работоспособность USB.
- Если проблема ушла → переходите к постоянному решению.
Внимание:
- значение сбросится после перезагрузки. Для сохранения перейдите к шагу 3.
3. Постоянное решение
3.1. Параметр ядра через GRUB
Самый надёжный способ отключить USB autosuspend на уровне ядра.
sudo nano /etc/default/grub
Найдите строку GRUB_CMDLINE_LINUX_DEFAULT и добавьте параметр:
GRUB_CMDLINE_LINUX_DEFAULT="... usbcore.autosuspend=-1"
Пример полной строки:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.autosuspend=-1"
Примените изменения:
sudo update-grub
Перезагрузитесь.
3.2. Udev-правило (альтернатива или дополнение)
Если отключение на уровне ядра не помогает или нужно управлять отдельными устройствами, создайте правило udev:
sudo nano /etc/udev/rules.d/50-usb-power.rules
Вставьте:
# Отключить runtime PM для всех USB
ACTION=="add", SUBSYSTEM=="usb", ATTR{power/control}="on"
# Разрешить пробуждение от всех USB-устройств
ACTION=="add", SUBSYSTEM=="usb", ATTR{power/wakeup}="enabled"
Перезагрузите правила:
sudo udevadm control --reload-rules && sudo udevadm trigger
4. Управление питанием (TLP, powertop, systemd)
Если в системе установлен tlp или powertop, они могут переопределять параметры ядра.
Для TLP:
sudo nano /etc/tlp.conf
Найдите и раскомментируйте/измените:
USB_AUTOSUSPEND=0
USB_DENYLIST="..." # можно добавить VID:PID проблемного устройства
Примените:
sudo tlp start
Для powertop (если используется):
sudo powertop --auto-tune # может включать autosuspend
Если проблема появилась после этого, отключите автонастройку или добавьте powertop в исключения.
5. BIOS/UEFI и аппаратные нюансы
Некоторые настройки прошивки конфликтуют с Linux PM:
| Настройка в BIOS/UEFI | Рекомендуемое значение |
|---|---|
| USB Legacy Support | Enabled или Auto |
| XHCI Hand-off | Enabled |
| ERP Ready / ErP | Disabled |
| Deep Sleep / S4/S5 | Disabled или S3 only |
| USB Wake Support | Enabled |
Дополнительно:
- Обновите BIOS/UEFI до последней версии.
- Протестируйте устройство в портах USB 2.0 и USB 3.0 (разные контроллеры ehci vs xhci).
- Отключите в BIOS Fast Boot и Secure Boot на время диагностики.
6. Верификация и мониторинг
- Примените настройки, перезагрузитесь.
2. Проверьте параметры ядра:
cat /sys/module/usbcore/parameters/autosuspend
# Должно быть -1
3. Выполните тестовый переход в сон:
systemctl suspend
4. После пробуждения проверьте:
lsusb
dmesg | grep -iE "usb|resume|reset" | tail -20
5. Для постоянного мониторинга в фоне:
journalctl -f -k | grep -iE "usb|xhci|ehci|suspend|resume"
Примечания для Astra Linux 1.7
| Аспект | Комментарий |
|---|---|
| Ядро | В 1.7 используется 5.10.x или 5.15.x (в зависимости от обновления). Параметр usbcore.autosuspend=-1 полностью поддерживается. |
| Система безопасности | В редакции Смоленск (SE) могут применяться мандатные политики Parsec. Они не блокируют USB PM, но проверяйте auditd и journalctl -t parsec, если устройства не определяются после пробуждения. |
| Обновления | Рекомендуется установить последний kernel из репозитория astra: sudo apt update && sudo apt install linux-image-astra (или linux-image-amd64 в Common Edition). |
| Токены/СКЗИ | Если проблема возникает с крипто-токенами (Рутокен, JaCarta, eToken), проверьте совместимость драйверов pcscd и отключите autosuspend только для конкретного VID:PID через udev. |
Если проблема сохраняется
- Соберите полный лог:
sudo journalctl -b > ~/journal.log - Проверьте, не загружаются ли конфликтующие модули:
lsmod | grep -iE "usb|xhci|ehci" - Попробуйте ядро из бэкпортов или более новую версию из astra-updates.
- Если устройство работает на Windows после сна, но не в Linux → это известная особенность драйверов/прошивки устройства. Ищите quirk для ядра или отключайте PM только для него через udev.