RFID

Материал из ALT Linux Wiki

RFID-считыватель — это устройство для приема и обработки сигналов от радиочастотных меток (чипов).

Пример RFID-считывателя

Он генерирует электромагнитное поле, улавливает ответный сигнал с уникальным номером метки и передает данные в систему контроля доступа (СКУД), на компьютер или терминал для идентификации объектов, животных или людей.

Где применяются:

  • СКУД: открытие турникетов, дверей, ворот и шлагбаумов.
  • Логистика и склад: автоматическая инвентаризация имущества, отслеживание товаров на паллетах.
  • Ритейл: защита от краж, учет перемещения одежды и оборудования.

Один из участников сообщества, Константин N, успешно, по его словам, настроил и подключил RFID-считыватель и поделился своей наработкой инструкции в ТГ-чате Альт Вики. Собственно, ниже представлен текст его наработки.


Пошаговая инструкция подключения и настройки считывателя RFID-карт IronLogic Z-2 USB (FTDI)

Дано:

  • Система: ALT Workstation 11.2
  • Адаптер: IronLogic Z-2 USB (FTDI)

Шаг 1. Откройте терминал

  • Нажмите Ctrl + Alt + T или найдите «Терминал» в меню приложений.
Примечание: Все команды ниже выполняются с правами суперпользователя
Примечание: Шаблон $USER замените везде на имя вашего пользователя


Шаг 2. Создайте и запустите скрипт настройки

  • скопируйте весь блок ниже целиком в текстовый редактор
  • замените в переменной $USER=petr значение на пользователя, которому вы хотите настроить устройство
  • скопируйте команду, вставьте в терминал (нажмите Enter после вставки):
cat > ~/persist_z2usb_user.sh << 'SCRIPT'
#!/bin/bash
$USER=petr
set -e
echo "Настройка постоянного доступа для пользователя $USER..."

# 1. Группы (сохраняются навсегда)
groupadd uinput 2>/dev/null || true
usermod -aG dialout,uinput $USER
echo "[V] $USER добавлен в группы dialout и uinput"

# 2. Автозагрузка модулей ядра
echo "uinput"   | tee /etc/modules-load.d/uinput.conf > /dev/null
echo "ftdi_sio" | tee /etc/modules-load.d/ftdi-sio.conf > /dev/null
echo "[V] Модули uinput и ftdi_sio добавлены в автозагрузку"

# 3. udev-правило для /dev/uinput
bash -c 'cat > /etc/udev/rules.d/99-uinput.rules << EOF
KERNEL=="uinput", MODE="0660", GROUP="uinput", OPTIONS+="static_node=uinput"
EOF'
echo "[V] Создано правило для /dev/uinput"

# 4. udev-правило для IronLogic Z-2 USB
bash -c 'cat > /etc/udev/rules.d/40-ironlogic-z2.rules << EOF
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE="0666", GROUP="dialout", SYMLINK+="z2usb"
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="1234", MODE="0666", GROUP="dialout", SYMLINK+="z2usb"
EOF'
echo "[V] Создано правило для Z-2 USB"

# 5. systemd-сервис для регистрации VID/PID в драйвере ftdi_sio
bash -c 'cat > /etc/systemd/system/z2usb-boot.service << EOF
[Unit]
Description=Register IronLogic Z-2 USB IDs to ftdi_sio driver at boot
After=systemd-modules-load.service systemd-udev-settle.service

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo 0403 6001 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id 2>/dev/null || true"
ExecStart=/bin/sh -c "echo 0403 1234 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id 2>/dev/null || true"
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF'

systemctl daemon-reload
systemctl enable z2usb-boot.service
systemctl start z2usb-boot.service
echo "[V] Создан и активирован systemd-сервис для ftdi_sio"

# 6. Применить правила udev
udevadm control --reload-rules
udevadm trigger
echo "[V] Правила udev применены"

echo ""
echo "ВСЕ НАСТРОЙКИ СОХРАНЕНЫ НАВСЕГДА!"
echo "Для применения прав групп: ВЫЙДИТЕ из системы и войдите снова как user"
echo "   (или выполните: reboot)"
SCRIPT

Сделайте скрипт исполняемым и запустите его:

# chmod +x ~/persist_z2usb_user.sh
# ~/persist_z2usb_user.sh

Дождитесь сообщения ВСЕ НАСТРОЙКИ СОХРАНЕНЫ НАВСЕГДА!.

Шаг 3. Перезагрузите систему

$ systemctl reboot

После включения войдите в систему под указанным в $USER пользователем.

Примечание: Это обязательно: права доступа к /dev/uinput и группе dialout применяются только при новом сеансе.


Шаг 4. Подключите адаптер и проверьте систему

  • Подключите IronLogic Z-2 USB в любой свободный USB-порт.
  • Откройте терминал и выполните проверку:
  • Модули загружены?
$ lsmod | grep -E "uinput|ftdi_sio"
  • Состоит ли пользователь в группах?
$ groups $USER | grep -E "dialout|uinput"
  • Доступно ли устройство?
$ ls -l /dev/z2usb /dev/ttyUSB* 2>/dev/null

Ожидаемый результат

  • Вывод lsmod покажет строки с uinput и ftdi_sio
  • В группах $USER есть dialout и uinput
  • Выведутся строки /dev/ttyUSB0 с правами crw-rw-rw- или crw-rw---- и симлинк /dev/z2usb

Шаг 5. Установка программы для считывания карт

Официальная утилита PlaceCard автоматически вводит код карты в активное окно (имитирует клавиатуру) или копирует его в буфер обмена.

  • Скачайте последнюю версию для Linux: PlaceCard для Linux (RPM)
  • Установите через терминал:
# apt-get install ./placecard*.rpm
  • Запустите программу: в меню приложений найдите PlaceCard или выполните в терминале placecard.

Шаг 6. Тестирование работы

Тест 1: Прямое чтение порта (проверка драйвера)

$ cat /dev/z2usb

Поднесите карту к считывателю. В терминале появится код карты.

Нажмите Ctrl + C, чтобы остановить.

Тест 2: Работа через GUI PlaceCard

  • Откройте PlaceCard → выберите устройство /dev/z2usb (или оставьте то, что подставило автоопределение).
  • Включите режим «Набор на клавиатуре» или «Копировать в буфер».
  • Если выбран режим «Набор на клавиатуре», откройте любой текстовый редактор (например, mcedit или LibreOffice).
  • Поднесите карту. Код должен автоматически появиться в редакторе.

Памятка по устранению неполадок

Симптом Решение
Permission denied при cat /dev/z2usb
  • Выйдите из системы и войдите снова.
  • Проверьте: groups user
Адаптер не определяется после загрузки Проверьте сервис: systemctl status z2usb-boot.service
PlaceCard пишет «Не могу набрать на клавиатуре» Проверьте /dev/uinput: ls -l /dev/uinput (должна быть группа uinput)
Нужно сбросить настройки Удалите файлы:
  • /etc/modules-load.d/uinput.conf
  • /etc/modules-load.d/ftdi-sio.conf
  • /etc/udev/rules.d/40-ironlogic-z2.rules
  • /etc/udev/rules.d/99-uinput.rules
  • /etc/systemd/system/z2usb-boot.service