Funkcjonariusz Mobilny został zaprojektowany do działania w trybie "headless", czyli bez monitora i klawiatury. Zamiast nich, aby możliwa była kontrola bieżących aktywności urządzenia, używane są wyświetlacze LED/LCD:
Model | Instalacja | Komentarze |
---|---|---|
Adafruit PiTFT 2.2/2.8 inch LCD | instrukcja | sterownik oparty na buforowaniu ramek |
BakeBit NanoHat OLED | instrukcja | dla NanoPi NEO/NEO2, nie obsługuje Raspberry Pi |
BlinkStick Strip | instrukcja | podłączany przez USB zamiast GPIO; nasz wybór |
Pimoroni Blinkt! | instrukcja | nasz wybór |
Pimoroni Scroll HAT Mini | instrukcja | |
Uctronics 3.5 inch Touchscreen | instrukcja | sterownik oparty na buforowaniu ramek; raczej unikaj tego modelu |
Waveshare 1.44inch LCD display HAT | instrukcja | |
Waveshare True color RGB LED HAT | instrukcja |
To repozytorium zawiera najnowszą listę sterowników i ich dokumentacji.
Eksfiltracja danych jest czasochłonna, zwłaszcza jeśli jest prowadzona na relatywnie powolnym urządzeniu, zamiast na normalnym komputerze. Dlatego też kluczowa jest wiedza, co się aktualnie dzieje na Twoim urządzeniu:
Najprostszą metodą kontroli tego typu zdarzeń będąc w terenie, potencjalnie wśród osób, które nie powinny wiedzieć, co właściwie robisz, jest użycie prostego wyświetlacza LED, który za pomocą kilku kolorowych diod pokaże w dyskretny sposób, co się akurat dzieje z urządzeniem:
Funkcjonariusz Mobilny obsługuje wiele różnych modeli wyświetlaczy, o bardzo różnych możliwościach, a nawet różnych filozofiach działania. Interfejs do obsługi wyświetlaczy został przygotowany w taki sposób, aby umożliwić łatwą implementację obsługi kolejnych modeli, niezależnie od sposobu wyświetlania przez nie danych.
Dlatego też wymagania wobec każdego wyświetlacza są bardzo proste i zarazem bardzo ogólne: musi obsługiwać od 8 do 10 niezależnych kanałów, gdzie każdy kanał jest reprezentowany przez:
Kanały są numerowane od 0 (do 7..8..9). W przypadku wymienionych wyżej wyświetlaczy, kanałem 0 jest pierwsza dioda LED albo pierwszy wiersz tekstu.
Każdy sterownik posiada moduł tłumaczący zdarzenia emitowane przez Funkcjonariusza Mobilnego na konkretne możliwości danego urządzenia - dla wyświetlacza Waveshare True color RGB LED HAT wygląda to następująco:
$events = array (
"shutdown" => array(-1, "off"),
"ready" => array(0, "yellow"),
"target_ready" => array(0, "green"),
"target_disconnected" => array(0, "yellow"),
"media_device_detected" => array(7, "green"),
"media_device_processed" => array(7, "off"),
"operation_started" => array(-2, "green"),
"operation_finished" => array(-2, "off"),
);
Gdzie same nazwy kolorów poszczególnych diod LED są następnie tłumaczone na składowe kolorów:
$colors = array (
"off" => array( 0, 0, 0),
"red" => array(255, 0, 0),
"green" => array( 0, 255, 0),
"blue" => array( 0, 0, 255),
"orange" => array(255, 30, 0),
"yellow" => array(255, 70, 0),
"purple" => array(255, 0, 255),
"white" => array(255, 255, 255),
);
Na chwilę obecną zdefiniowanych jest 8 typów zdarzeń, z których połowa jest globalna (zawsze obsługiwana przez kanał 0), a druga połowa związana jest z eksfiltrowanymi urządzeniami i partycjami na nich - poszczególne partycje obsługiwane są przez poszczególne kanały, licząc od kanału 1. Dzięki temu prosty wyświetlacz z 8 diodami LED jest w stanie pokazywać stan realizacji 7 równoległych operacji eksfiltracji danych.
Zdarzenia globalne (kanał 0):
shutdown
- wyłączenie całego wyświetlacza (np. wygaszenie wszystkich diod LED), przygotowanie do wyłączenia całego urządzeniaready
- urządzenie się prawidłowo uruchomiło, Funkcjonariusz Mobilny jest gotowy do pracytarget_ready
- Twój dysk docelowy na dane został podłączony i prawidłowo rozpoznanytarget_disconnected
- Twój dysk został odłączony, urządzenie przeszło w tryb "fallback storage"Zdarzenia per-urządzenie (ostatni dostępny kanał):
media_device_detected
- wykryto podłączone urządzenie MTP/PTP (komórkę, tablet, aparat cyfrowy itp.), Funkcjonariusz Mobilny rozpoczął jego eksfiltrację (to i następne zdarzenie jest pokazywane zawsze przez ostatni kanał)media_device_processed
- eksfiltracja urządzenia MTP/PTP została zakończona, można je odłączyćZdarzenia per-partycja (kanały od 1 do 7..9):
operation_started
- wykryto podłączony dysk twardy, pen drive lub inne urządzenie klasy USB Mass Storage, Funkcjonariusz Mobilny rozpoczął jego eksfiltrację (to i następne zdarzenie jest emitowane osobno dla każdej partycji: pierwsza partycja na kanale 1, druga na kanale 2 itd.)operation_finished
- eksfiltracja danej partycji została zakończona (nadal mogą trwać operacje na innych partycjach)Dzięki takiemu podziałowi, podłączając duży dysk twardy, z wieloma partycjami (w tym ukrytymi/zarezerwowanymi partycjami Windows), zawsze prawidłowo widzisz, które partycje są jeszcze przetwarzane, a które zostały już zakończone.
W tej chwili obsługiwane są wyświetlacze używające 3 typów złącz:
Większość wyświetlaczy jest sterowana natywnie, tj. program sterujący bezpośrednio "każe" wyświetlaczowi np. zapalić konkretną diodę LED na konkretną składową kolorów, albo narysować jakąś figurę geometryczną (w tym literę/cyfrę) na wyświetlaczu LCD.
Natomiast niektóre wyświetlacze oparte są na koncepcji bufora ramki obrazu (ang. framebuffer) - innymi słowy, działają jako monitor, pokazujący obraz z wyjścia HDMI. Wyświetlacze takie - zwłaszcza modele obsługujące dodatkowo dotyk, albo chociaż mające dodatkowe przyciski - są świetnym rozwiązaniem dla tzw. kiosków interaktywnych (biletomatów, interfejsów do zamawiania jedzenia w lokalach typu McDonald itp.). Natomiast mają one jedną zasadniczą wadę: system musi działać w trybie graficznym, z automatycznym logowaniem domyślnego użytkownika po starcie systemu i automatycznym startem aplikacji do obsługi kiosku.
Funkcjonariusz Mobilny działa całkiem inaczej: cały system działa w trybie headless, a więc bez żadnego interfejsu graficznego, w maksymalnie okrojonej wersji, a obsługa podłączanych urządzeń odbywa się całkowicie w tle, za pośrednictwem mechanizmu systemd
. Przez co wyświetlacze oparte na buforze ramki nie są w stanie normalnie działać.
Dlatego też są obsługiwane w całkiem inny sposób:
/dev/fb1
Takie podejście jak najbardziej działa, natomiast z oczywistych względów jest mało wydajne i spowalnia działanie Funkcjonariusza Mobilnego. Dlatego raczej odradzamy używanie tego typu wyświetlaczy (jeśli masz do wyboru model natywny).
Funkcjonariusz Mobilny obsługuje wyświetlacze mające od 8 do 10 kanałów, z czego kanał 0 jest zarezerwowany dla zdarzeń globalnych - a więc dla zdarzeń per-partycja pozostaje od 7 do 9 kanałów, w tym na ostatnim pokazywane są również zdarzenia związane z urządzeniami MTP i PTP (czyli telefonami, tabletami, aparatami cyfrowymi itp.).
Jeśli podłączony dysk twardy (pen drive itp.) ma więcej niż 7..9 partycji:
Funkcjonariusz Mobilny może eksfiltrować wiele urządzeń typu USB Mass Storage jednocześnie - jedynym ograniczeniem jest fizyczna wydajność urządzenia, do którego są one podłączane.
Natomiast interfejs do obsługi wyświetlaczy obsługuje tylko numery partycji, bez identyfikatorów dysków - więc jeśli podłączysz ich kilka jednocześnie, zdarzenia dotyczące partycji na różnych dyskach "pomieszają się" na wyświetlaczu, co może skutkować wprowadzaniem Cię w błąd co do stanu operacji - np. eksfiltracja partycji 2 na dysku 1 się już zakończyła, więc dioda na kanale 2 zgasła - ale eksfiltracja partycji 2 na dysku 2 nadal trwa i nie jest to w żaden sposób sygnalizowane.
Funkcjonariusz Mobilny obsługuje wiele jednocześnie podłączonych urządzeń MTP i PTP - przynajmniej teoretycznie, gdyż różne urządzenia w bardzo różny sposób implementują protokoły MTP i PTP, w konsekwencji niektóre urządzenia blokują cały protokół. Niemniej jednak, zawsze możliwe jest jednoczesne podłączenie przynajmniej po jednym urządzeniu obu tych typów.
Natomiast interfejs do obsługi wyświetlaczy obsługuje wszystkie takie urządzenia na jednym (ostatnim dostępnym) kanale - więc jeśli podłączysz ich kilka jednocześnie, zdarzenia dotyczące poszczególnych urządzeń "pomieszają się" na wyświetlaczu, co może skutkować wprowadzaniem Cię w błąd co do stanu operacji.
Podobnie w przypadku jednoczesnej eksfiltracji urządzeń MTP/PTP i dysku twardego mającego od 8..10 partycji wzwyż - zdarzenia "pomieszają się" na wyświetlaczu, natomiast same operacje będą prowadzone bez żadnych komplikacji.