Как заставить устройство чтения карт создавать файл при сканировании?

Ваш установщик Debian -в основном рассматривал адаптер SDCard как фиксированный диск и устанавливал загрузчик UEFI в раздел ESP. И после этого он сделал еще одну вещь :он использовал команду efibootmgrдля регистрации загрузчика в переменных загрузки UEFI NVRAM .

До отключения адаптера все работало нормально :Диск SDCard и загрузчик на нем были зарегистрированы в порядке загрузки UEFI. Но, по-видимому, прошивка UEFI вашей системы имеет одну функцию :при загрузке: если она обнаруживает записи переменных загрузки NVRAM, относящиеся к отсутствующему диску, она предполагает, что эти записи больше не нужны, и удаляет их. Без загрузочной переменной NVRAM прошивка UEFI больше не знает, что нужно искать /EFI/debian/grubx64.efiв разделе ESP вашей SDCard.

Другие предлагают скопировать загрузчик UEFI на жесткий диск. Это сработает и позволит вам загружаться с вашей SD-карты... но только в этой конкретной системе.

Есть еще одно решение :подключить SDCard к любой системе, которая может получить доступ к разделам FAT32 на диске с разделами GPT -. Вы должны иметь возможность использовать эту систему для доступа к разделу ESP на SDCard, найти каталог EFIв корне этого раздела, подкаталог debianвнутри него и файл grubx64.efiвнутри него.

Затем создайте новый подкаталог в каталоге EFIс именем boot. Затем скопируйте grubx64.efiиз подкаталога debianв подкаталог boot. В подкаталоге bootизмените имя grubx64.efiна bootx64.efi.

Когда 64 -битный ПК с UEFI ищет загрузчик в стиле UEFI -на съемном диске, он ищет этот путь-/EFI/boot/bootx64.efiв разделе FAT32 -. Когда этот файл существует, UEFI BIOS должен определить SDCard как загрузочную в стиле UEFI. Поскольку имя ОС является частью регистрации UEFI NVRAM, оно больше не будет отображаться как UEFI:debian, но вместо этого может отображаться как UEFI:<model of the SDcard>или что-то подобное. И теперь ваша SD-карта снова должна быть загрузочной, не только на одном конкретном компьютере, но и на любом компьютере, который поддерживает загрузку в стиле UEFI -со съемного носителя.

0
04.03.2020, 03:33
2 ответа

«Быстрым и грязным» решением был бы сценарий bash -, запускающий бесконечный цикл:

#!/bin/bash
while read scan; do
    scandate=$(date +"%F_%T.%N")
    echo "$scan" >> /tmp/scan_$scandate.log
    cat /tmp/scan_$scandate.log &
done

, где cat /tmp/scan_$scandate.logобозначает приложение, которое что-то делает с отсканированным вводом. Вы также можете работать с отсканированными данными в этом скрипте.

Имейте в виду, что любые функции, считывающие данные со сканера/клавиатуры, блокируют вашу клавиатуру и оставляют Pi, предназначенную для этой функции.

0
28.04.2021, 23:21

В основном вам нужен простой кейлоггер .

Ваше устройство выполняет эмуляцию клавиатуры , а в Linux устройство клавиатуры представляет собой файл , поэтому вы можете выполнять стандартное перенаправление ввода .

В качестве альтернативы вы можете использовать такую ​​программу, как logkeys (, возможно, она уже доступна в виде пакета в вашем дистрибутиве ). Еще немного документа здесь .

Предполагая, что вы хотите записывать ввод только с этого конкретного устройства, а не с какой-либо клавиатуры, установленной в вашей системе, вам необходимо идентифицировать устройство. Например, я бы посмотрел /dev/input/, а затем нашел ваше устройство по пути или по идентификатору.

Использование logkeys опции -d, --device=deviceдолжно помочь вам отфильтровать события на нужном устройстве.

Существуют и другие полезные инструменты, такие как evtest и xinput, которые могут помочь вам в тестировании и определении правильного идентификатора устройства.

Также можно настроить правило udev для вашего устройства, которое запускает программу или делает что-то при подключении устройства (вводное руководство по udev). У меня недостаточно опыта работы с udev, но таким образом можно настроить перенаправление. Единственное препятствие состоит в том, чтобы убедиться, что вы получаете простые символы, а не необработанный ввод , иначе вам придется позаботиться о его декодировании.

Другой вариант — использовать python -библиотеку evdev , если вы используете Python и отслеживаете события из /dev/input/независимо -ваша -клавиатура --с помощью.

Я бы попробовал правило udev. Я бы тоже не стал заморачиваться с временным текстовым файлом, просто мониторил события с устройства и реагировал на них.


Обновление

Я провел некоторые испытания со сканером штрих-кода, который ведет себя как клавиатура и поэтому с точки зрения системы технически подобен вашему устройству чтения карт.

Прежде всего,интересно знать, что можно получить эксклюзивный доступ к HID-устройству, используя функцию EVIOCGRAB. Это означает, что вы можете заставить приложение взять на себя управление устройством, чтобы оно не отправляло нежелательный ввод и не мешало другим окнам. Вы, вероятно, захотите этого.

Обратите внимание, что evtest(, упомянутый выше ), также имеет параметр --grab.

Ранее я уже упоминал python -evdev, который можно использовать для захвата ввода с устройства. Он также имеет функцию grab().

Для использования python -evdev не обязательно иметь права root, но вам может потребоваться настроить права доступа. Из их документа:

If you do not see any devices, ensure that your user is in the correct group (typically input) to have read/write access.

Чтобы добавить себя в группу:

usermod -a -G input user

, затем снова войдите в систему. (Как только вы это сделаете, evtest будет работать и для обычного -пользователя root ).

Вот один пример кода:Как «направить» ввод штрих-кода TTY в Python? и еще один, который работал у меня:эксклюзивный -клавиатура -evdev.py .

Прямо сейчас я не знаю, есть ли способ сделать это элегантно, используя только bash. Но Python — жизнеспособный подход, или C.

0
28.04.2021, 23:21

Теги

Похожие вопросы