Гайд: LIBUSB_ERROR_NO_DEVICE и pcscd с Рутокен в Astra Linux через VirtualHere - Часть 1

Гайд по устранению ошибок LIBUSB_ERROR_NO_DEVICE и сбоям pcscd при работе с Рутокен Лайт в Astra Linux через VirtualHere. Пошаговая диагностика.

2026.11.02                  


Гайд: LIBUSB_ERROR_NO_DEVICE и pcscd с Рутокен в Astra Linux через VirtualHere - Часть 1Гайд: LIBUSB_ERROR_NO_DEVICE и pcscd с Рутокен в Astra Linux через VirtualHere - Часть 1 Проблема в первую очередь не в КриптоПро и не в самом токене, а в нестабильном транспорте устройства до pcscd внутри Astra Linux. Токен появляется, но в момент попытки обмена смарт-картой USB-устройство «отваливается» или не отвечает. Поэтому pcscd пишет LIBUSB_ERROR_NO_DEVICE, Card not transacted, Protocol T=1 requested but unsupported, а КриптоПро затем не видит считыватель/контейнер.


1. Что означают ваши ошибки



WriteUSB() write failed (4/23): -4 LIBUSB_ERROR_NO_DEVICE

LIBUSB_ERROR_NO_DEVICE означает, что библиотека libusb не смогла отправить данные на USB-устройство, потому что устройство исчезло, было сброшено, отключилось или не ответило.

Для Рутокена это почти всегда означает одно из:

  • физическая проблема с портом/кабелем/питанием;
  • проблема проброса через VirtualHere;
  • высокая задержка/потери по сети между VirtualHere-сервером и клиентом;
  • энергосбережение/автосон/перезагрузка виртуального USB;
  • конфликт драйверов или другого процесса, занявшего смарт-карту;
  • токен не успевает отвечать из-за сетевых задержек при пробросе.
IFDStatusICC() Card not transacted: 617

PC/SC-драйвер не смог получить корректный ответ от карты.

PHSetProtocol() Protocol T=1 requested but unsupported by the card

Rutoken Lite обычно поддерживает протокол T=1. Такая ошибка чаще появляется не потому, что токен реально не поддерживает T=1, а потому что из-за сбоя связи pcscd получил поврежденный/неполный ATR или не смог корректно договориться с картой.


Error communicating to: Aktiv Rutoken lite 01 0
SCardConnect() Reader Aktiv Rutoken lite 01 00 Not Found

Считыватель то появляется, то исчезает. Для КриптоПро это выглядит как отсутствие нужного считывателя.


2. Главный вывод

Сначала нужно добиться стабильной работы токена на уровне PC/SC в Astra Linux. Пока в логах pcscd есть LIBUSB_ERROR_NO_DEVICE, Card not transacted и Reader Not Found, нормально настраивать КриптоПро бессмысленно.

Порядок такой:

  1. Проверить, стабилен ли токен в pcscd/pcsc_scan/pkcs11-tool.
  2. Если нестабилен — чинить проброс: физический порт, питание, сеть, VirtualHere, энергосбережение.
  3. Если стабилен, но КриптоПро не видит токен — проверять компоненты КриптоПро и наличие на токене именно КриптоПро-контейнера.

3. Самая важная проверка: локальное подключение токена

Если есть хоть малейшая возможность, проверьте токен напрямую в локальной ОС:

  • физически вставить в компьютер с Astra Linux;
  • или загрузиться с Live-USB Astra Linux/Ubuntu и проверить там;
  • или проверить на другой локальной машине.

Команды для быстрой проверки:

lsusb | grep -Ei 'aktiv|rutoken'
sudo pcsc_scan
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --list-slots
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --list-token-slots
  • Если локально токен работает стабильно, а через VirtualHere сыпется ошибками — проблема в пробросе.
  • Если локально тоже есть LIBUSB_ERROR_NO_DEVICE, T=1 unsupported, Card not transacted — проблема может быть в самом токене, порте, питании, драйвере или конфликте ПО.

4. Быстрая диагностика в момент ошибок

Выполняйте на Astra Linux в нескольких терминалах.

4.1. Наблюдение за ядром и USB

sudo dmesg -wH

Ищите строки вроде:

usb x-x: USB disconnect
usb x-x: reset full-speed USB device
device descriptor read/64, error
device not accepting address
device disconnected

Если такие строки появляются в момент ошибок pcscd — устройство реально отваливается на уровне USB.

4.2. Наблюдение за pcscd

sudo journalctl -u pcscd -f

или:

sudo journalctl -f

4.3. Проверка списка устройств

lsusb | grep -Ei 'aktiv|rutoken'

Если токен то появляется, то исчезает из lsusb, проблема почти точно в транспорте/пробросе.

4.4. Проверка процессов

Убедитесь, что не запущено несколько экземпляров pcscd:

pgrep -a pcscd

Должен быть один основной процесс. Если их несколько, остановите лишние.

Также проверьте процессы, которые могут конкурировать за смарт-карту:

pgrep -a scdaemon
pgrep -a openct
pgrep -a gpg-agent
pgrep -a sssd


Для теста временно остановите scdaemon, если он есть:

pkill -x scdaemon

Если используется openct, отключите его:

sudo systemctl disable --now openctd 2>/dev/null || true

5. Запуск pcscd в режиме отладки

Остановите сервис и запустите pcscd вручную в отладочном режиме.

sudo systemctl stop pcscd.service pcscd.socket
sudo pcscd -f -a -d

Если вариант с -d не принимается, используйте:

sudo pcscd -f -a

В другом терминале выполняйте:

pcsc_scan

и:

pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --list-slots

Если в отладке видно, что карта появляется, но сразу после попытки обмена идут ошибки записи/чтения — проблема в канале доставки устройства.


Важно:

Если включен вывод APDU (-a), в логах могут быть видны служебные данные. Перед отправкой логов в поддержку лучше скрыть чувствительные данные.


6. Проверка пакетов и драйверов в Astra Linux

6.1. Установленные пакеты

Проверьте:

dpkg -l | grep -Ei 'pcscd|pcsc-tools|libccid|opensc|libpcsclite|p11-kit|cprocsp'

Обычно для работы Рутокена через PC/SC нужны:

sudo apt update
sudo apt install pcscd pcsc-tools libccid opensc libpcsclite1 p11-kit

В разных сборках/репозиториях имена могут немного отличаться.

Если пакет libccid не находится, поискать можно так:

apt search ccid
apt search pcsc

6.2. Проверка драйвера CCID

Проверьте наличие CCID-драйвера:

ls -l /usr/lib/pcsc/drivers/

Обычно там должен быть драйвер вида:

ifd-ccid.bundle

или аналогичный. Если вы вручную устанавливали проприетарные драйверы Рутокен или других токенов, временно уберите их из /usr/lib/pcsc/drivers/ и проверьте работу со стандартным libccid.

Например, если там есть посторонний бандл:

sudo mkdir -p /root/pcsc-drivers-backup
sudo mv /usr/lib/pcsc/drivers/ifd-some-other.bundle /root/pcsc-drivers-backup/
sudo systemctl restart pcscd.socket pcscd.service

Rutoken Lite обычно работает по CCID, поэтому лишний или конфликтующий драйвер не нужен.

6.3. Перезапуск pcscd

Иногда полезно полностью пересоздать состояние сервиса:

sudo systemctl stop pcscd.service pcscd.socket
sudo rm -f /run/pcscd/*
sudo systemctl start pcscd.socket
sudo systemctl start pcscd.service

Проверьте:

systemctl status pcscd.socket pcscd.service

Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта