Гайд: 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, нормально настраивать КриптоПро бессмысленно.
Порядок такой:
- Проверить, стабилен ли токен в
pcscd/pcsc_scan/pkcs11-tool. - Если нестабилен — чинить проброс: физический порт, питание, сеть, VirtualHere, энергосбережение.
- Если стабилен, но КриптоПро не видит токен — проверять компоненты КриптоПро и наличие на токене именно КриптоПро-контейнера.
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
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.