Ваш установщик 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 -со съемного носителя.
«Быстрым и грязным» решением был бы сценарий 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, предназначенную для этой функции.
В основном вам нужен простой кейлоггер .
Ваше устройство выполняет эмуляцию клавиатуры , а в 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.