OScam: настройка smartcard ридера и карты доступа
Если вы подключили OScam smartcard ридер карты и в логе тишина — ни ATR, ни инициализации — скорее всего проблема в одном из трёх мест: неверный протокол, неправильный device или права доступа к порту. Этот разбор идёт от конфигурации к отладке, с реальными примерами и командами, которые я сам проверял на рабочих серверах.
Типы smartcard ридеров и как их видит OScam
OScam поддерживает несколько протоколов для работы с ридерами, и перепутать их — самая частая ошибка. Прежде чем трогать oscam.server, нужно точно знать, что именно подключено.
Для определения устройства запускаем:
dmesg | tail -30
lsusb
ls /dev/ttyUSB* /dev/ttyS* /dev/serial/by-id/
pcsc_scan # только для PCSC-ридеров
Phoenix / Smartmouse (serial, протокол mouse)
Классические ридеры типа Phoenix и Smartmouse подключаются через RS-232 или через USB-to-serial переходник. В dmesg они появятся как /dev/ttyUSB0 или /dev/ttyS0. Протокол в oscam.server — mouse. Питание карты подаётся через RTS или DTR пин, поэтому параметр detect здесь критичен.
Smartreader+ и USB-ридеры на FTDI
Smartreader+ использует чип FTDI (обычно FT232 или FT245) и требует отдельного протокола — smartreader. В lsusb это будет что-то вроде Future Technology Devices International. Устройство также появится как /dev/ttyUSB*, но драйвер общается с ним иначе, чем с обычным serial.
Важный момент: некоторые FTDI-чипы одновременно регистрируются и как ttyUSB, и видны через PCSC. Если pcsc_scan показывает ридер, а вы хотите использовать protocol=smartreader — pcscd лучше остановить, иначе будет конфликт за устройство.
PCSC-совместимые ридеры (USB CCID)
Современные USB-ридеры с классом USB CCID — банковские, ACR38, ACR39 и аналоги — работают через протокол pcsc. Для этого обязательно нужен запущенный демон pcscd и OScam, собранный с флагом USE_PCSC=1. Проверить сборку можно командой:
oscam --version | grep -i pcsc
Если строки нет — OScam не видит PCSC вообще, и protocol=pcsc молча не работает. Нужно пересобирать с нужным флагом или брать готовый бинарник с PCSC поддержкой.
Device для PCSC указывается не как путь, а как имя ридера из вывода pcsc_scan: например, device = ACS ACR 38U-CCID.
Внутренние ридеры и протокол internal
Протокол internal используется на embedded-устройствах — ресиверах Dreambox, VU+, Vu Solo и им подобных, где слот карты встроен прямо в железо. На десктопном Linux это не нужно.
Настройка reader-секции в oscam.server
Файл конфигурации лежит по одному из путей в зависимости от дистрибутива и способа установки:
/usr/local/etc/oscam.server— стандартный путь при сборке из исходников/etc/oscam/oscam.server— при установке через пакетный менеджер/etc/tuxbox/config/oscam/oscam.server— на Dreambox/embedded/var/etc/oscam/oscam.server— на некоторых OpenWRT/Entware сборках
Базовые параметры: label, protocol, device, caid
label — это просто имя для идентификации ридера в логе и webif. Называйте осмысленно: phoenix_main, pcsc_reader1.
caid задаёт систему условного доступа вашей карты. Например, 0500 для Viaccess, 0600 для Irdeto, 0B00 для Conax, 1800 для Nagravision. Без правильного caid OScam не знает, как инициализировать карту.
Параметры карты: detect, mhz, cardmhz, ident
Параметр detect управляет тем, как ридер определяет вставленную карту. Для Phoenix/Smartmouse обычно ставят detect = CD (Carrier Detect) или detect = RTS. Неверное значение — и OScam не увидит карту физически, даже если она вставлена. Попробуйте оба варианта, если не знаете точно.
Параметры mhz и cardmhz — это частота тактирования ридера и карты соответственно, в единицах 10 кГц. Стандартные значения:
mhz = 357/cardmhz = 357— стандарт ISO 7816, 3.57 МГцmhz = 600/cardmhz = 600— 6.00 МГц, некоторые карты работают быстрее- Для V13:
mhz = 368, для V14:mhz = 480или600— подбирается экспериментально
Разница между mhz и cardmhz: mhz — это частота, на которой работает ридер, cardmhz — частота, которую OScam сообщает карте при инициализации. Они могут различаться. Если карта работает нестабильно на 600/600, попробуйте 357/357. Слишком высокая частота даёт ошибки init или зависание — снижайте постепенно, шагами по 50.
ident сужает идентификаторы провайдера. Если не знаете — оставьте пустым или закомментируйте.
Тайминги ATR и инициализация
ATR (Answer To Reset) — это первый отклик карты после сброса. Если ATR есть в логе, карта физически читается. Если нет — проблема аппаратная или в конфигурации detect/питания.
Параметр atr в конфиге позволяет принудительно задать ожидаемый ATR, но это нужно редко. Параметр initdelay добавляет задержку перед инициализацией в миллисекундах — иногда помогает с медленными картами или дешёвыми ридерами.
Пример рабочей секции для phoenix и для pcsc
Конфиг для Phoenix/serial ридера:
[reader]
label = phoenix_main
protocol = mouse
device = /dev/ttyUSB0
caid = 0500 # Viaccess
detect = CD # или RTS — зависит от ридера
mhz = 357 # частота ридера (3.57 МГц)
cardmhz = 357 # частота карты
group = 1
emmcache = 1,3,2 # включить кэш EMM
logfreq = 0
Конфиг для PCSC-ридера:
[reader]
label = ccid_reader
protocol = pcsc
device = ACS ACR 38U-CCID # имя из pcsc_scan
caid = 0B00 # Conax
group = 1
emmcache = 1,3,2
Для PCSC не нужны detect, mhz и cardmhz — этим управляет pcscd и драйвер CCID.
Проверка ATR и инициализации карты
Без нормального лога отлаживать OScam smartcard ридер карты — это гадание на кофейной гуще. Первым делом включаем подробное логирование.
Чтение лога: oscam.log и веб-интерфейс
В oscam.conf в секции [global] убедитесь, что лог пишется:
[global]
logfile = /var/log/oscam/oscam.log
maxlogsize = 512
loghistorysize = 4096
Уровень отладки можно поднять через webif: в разделе Readers кликнуть на имя ридера и поставить debug level на 64 или 255 (полный дамп обмена с картой). Либо запустить OScam с флагом -d 64.
Следить за логом в реальном времени:
tail -f /var/log/oscam/oscam.log | grep -E "ATR|CARDOK|NEEDINIT|Error"
Что означает ATR в логе
Строка успешного чтения выглядит так:
2026/06/15 14:23:11 [reader] phoenix_main: ATR: 3B 9F 21 0E 49 52 44 45 54 4F 20 41 43 53
Первый байт 3B — прямая конвенция (direct convention), 3F — инверсная. Если строки ATR нет вообще — карта физически не отвечает. Если ATR есть, но за ним ничего нет или идёт ошибка — проблема в протоколе инициализации, caid или частоте.
Статус ридера: CARDOK, NEED INIT, OFF
В webif (обычно порт 8888) в разделе Readers видна колонка Status:
- CARDOK — карта читается, инициализирована, ECM/EMM обрабатываются. Всё хорошо.
- NEEDINIT / NEED INIT — ATR получен, но инициализация не завершена. Проверьте caid, ident, частоту.
- OFF — ридер не видит карту вообще. Аппаратная проблема или неверный device/detect.
- CARDMUTE — карта вставлена, ATR не приходит. Питание контактов или контакт карты.
Использование readers в webif для диагностики
В webif можно сделать Reader Restart без перезапуска всего OScam — это полезно после правки конфига. Кнопка находится в деталях ридера. Также там видна вся история EMM и ECM запросов, время отклика, количество ошибок. Если ECM время отклика >500 мс — скорее всего проблема с частотой карты.
Типичные ошибки чтения карты и их решение
Разберём по симптомам. Большинство проблем с OScam smartcard ридер карты укладываются в несколько категорий.
Карта не определяется / нет ATR
Проверяем по порядку:
- Правильно ли указан
device? Запуститьls -la /dev/ttyUSB*— устройство вообще существует? - Карта вставлена правильной стороной? Звучит банально, но половина случаев — это.
- Попробовать
detect = CDвместоRTSи наоборот. - Проверить кабель и разъём — особенно если это самодельный переходник.
- На дешёвых ридерах бывает отсутствие питания на контактах карты. ATR появляется только при подаче внешнего питания 5В на VCC контакт карты. Это аппаратный дефект ридера.
Ошибка 'card initializing error' и 'reader needs cardinit'
ATR есть, но инициализация падает. Первым делом проверить caid — он точно соответствует вашей карте? Посмотрите в логе ATR и сверьте с известными ATR для вашей системы доступа.
Если caid верный — пробуем снизить cardmhz. Начать с 357, потом 368, 480, 600 — методом подбора. Некоторые карты работают только на нестандартной частоте, не кратной обычным значениям. В таком случае cardmhz подбирается вручную — например, 420 или 530.
Если нужен boxkey или rsakey — без них карта тоже не инициализируется. Эти ключи специфичны для вашей карты и системы.
Неверная частота (mhz/cardmhz) и зависание
Симптом: OScam завис на инициализации, ридер не отвечает, приходится перезапускать. Причина почти всегда — слишком высокая частота. Ридер пытается гнать карту быстрее, чем она может.
Алгоритм: поставить mhz = 357 и cardmhz = 357, добиться стабильной работы, потом постепенно поднимать cardmhz на 50 единиц за раз. Остановиться на значении, где зависаний нет несколько часов.
Проблемы прав доступа к /dev/ttyUSB и udev
OScam запущен не от root, и /dev/ttyUSB0 принадлежит группе dialout. Решение:
sudo usermod -a -G dialout oscam_user
После этого — перелогиниться или перезапустить сессию. Проверить: groups oscam_user.
Другая проблема — ModemManager захватывает ttyUSB устройства и мешает OScam. Симптом: сразу после подключения ридера он занят. Решение:
systemctl stop ModemManager
systemctl disable ModemManager
Или добавить udev-правило, чтобы ModemManager игнорировал ридер. Создать файл /etc/udev/rules.d/99-oscam-reader.rules:
# Запретить ModemManager трогать smartcard ридер
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ENV{ID_MM_DEVICE_IGNORE}="1"
# Постоянный symlink по серийному номеру
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A12B3456", SYMLINK+="ttyOSCAM0", MODE="0666"
Узнать idVendor, idProduct и серийник: udevadm info -a -n /dev/ttyUSB0 | grep -E "idVendor|idProduct|serial".
Перезагрузить правила: udevadm control --reload-rules && udevadm trigger.
Symlink по серийнику решает другую головную боль: если у вас несколько одинаковых USB-ридеров, при каждой перезагрузке /dev/ttyUSB0 и /dev/ttyUSB1 могут поменяться местами. Жёсткий symlink /dev/ttyOSCAM0 всегда указывает на нужный ридер независимо от порядка инициализации.
Критерии выбора smartcard ридера
Если старый ридер не заработал или вы выбираете новый — вот на что реально смотреть, без маркетинга.
Стабильность чтения и поддержка нужных частот
Хороший ридер должен поддерживать регулировку частоты тактирования от 1 до 10+ МГц. Ридер с фиксированной частотой — это головная боль, когда карта требует нестандартное значение. OScam умеет менять mhz и cardmhz в широких пределах — но только если ридер это физически поддерживает.
Совместимость с протоколами OScam
Перед покупкой проверьте, какой протокол поддерживает ридер: mouse, smartreader или pcsc. Это определяется чипом внутри. Ридеры на FTDI работают как smartreader. USB CCID — это pcsc. Простые serial-переходники — mouse/phoenix. Знать это заранее = не угадывать протокол потом.
Качество слота и контактов
Дешёвые ридеры с ненадёжным слотом дают непостоянный ATR — карта читается через раз. Визуально это не видно, но проявляется в логе как периодические CARDMUTE или исчезновение ATR. Контакты должны обеспечивать стабильное давление на чип карты.
Поддержка в Linux без проприетарных драйверов
Ридеры на чипах, которые работают через стандартные модули ядра (ftdi_sio, cdc_acm, usb-serial) — это жизнь. Ридер, требующий закрытый драйвер под конкретную версию ядра — это боль при каждом обновлении системы. Проверяйте перед покупкой: есть ли чип в стандартном usb-serial или CCID пакете вашего дистрибутива.
Правильно настроенный OScam smartcard ридер карты с рабочим udev-правилом и верными параметрами reader — это система, которая не требует внимания неделями. Потратить час на правильную конфигурацию лучше, чем потом каждый раз разбираться, почему ридер снова не видит карту.
Часто задаваемые вопросы
Какой protocol указывать для USB-ридера в oscam.server?
Зависит от чипа внутри ридера. Для Smartreader+ на чипе FTDI — protocol = smartreader. Для простых phoenix/smartmouse ридеров через serial или USB-serial переходник — protocol = mouse. Для USB CCID ридеров (банковского типа, ACR38 и подобных) — protocol = pcsc. Определить чип: lsusb покажет Vendor ID, по нему понятно что внутри.
Почему OScam не показывает ATR карты?
Причин несколько, и проверять нужно по порядку: неверный путь device (устройство не там или не существует), плохой физический контакт в слоте, карта вставлена вверх ногами, неправильный параметр detect (попробуйте CD и RTS поочерёдно), отсутствие питания на контактах карты (дефект дешёвых ридеров), или для PCSC-ридера не запущен pcscd.
Какие значения mhz и cardmhz ставить?
Начинайте с mhz = 357 и cardmhz = 357 — это ISO-стандарт 3.57 МГц, работает с большинством карт. Если карта инициализируется, можно попробовать поднять cardmhz до 600 для скорости. Для некоторых карт V13/V14 нужны нестандартные значения вроде 368 или 480 — подбирайте экспериментально, снижая от высокого к низкому при ошибках init. mhz и cardmhz — разные параметры: первый для ридера, второй для карты.
Как дать OScam доступ к /dev/ttyUSB0?
Добавить пользователя, от которого запускается OScam, в группу dialout: usermod -a -G dialout USERNAME. Либо написать udev-правило с MODE="0666" для конкретного устройства. Также отключить ModemManager (systemctl disable ModemManager) — он перехватывает ttyUSB порты и блокирует доступ. Для нескольких одинаковых ридеров добавить в udev-правило SYMLINK+= по серийному номеру устройства.
Нужен ли pcscd для всех ридеров?
Нет. pcscd нужен только для protocol = pcsc. Для serial, phoenix и smartreader ридеров он не используется — и более того, может мешать, если лезет к ttyUSB устройствам. Если используете serial-ридер, а pcscd запущен и активен — лучше его остановить и выключить из автозапуска.
Карта читается, но статус NEEDINIT — что делать?
ATR получен, значит физически карта читается — хорошо. Проблема в инициализации протокола. Первым делом проверьте caid — он должен точно соответствовать системе доступа вашей карты. Потом проверьте ident и частоту cardmhz. Попробуйте снизить cardmhz до 357. Нажмите Reader Restart в webif и смотрите лог на новые ошибки. Если нужен boxkey для инициализации — без него статус так и останется NEEDINIT.