Billentyűzet emulálása egyik számítógépről a másikra

Sziasztok!

 

Egy olyan megoldásra lenne szükségem, hogy egy számítógépből valahogy kiküldök alfanumerikus információt és az egy másik számítógépen usb-s billentyűzetként mintha gombleütések lennének jut be a másik gépbe.

Valaki küzdött már ilyennel?

 

Köszönöm!

Hozzászólások

Szerkesztve: 2023. 09. 21., cs – 09:54

Hogyan küldenéd ki? Pl. a vonalkódolvasók működnek hasonlóan, de szerintem GitHub-on is hamar találsz olyan kódot, hogyan programozd ezt le 5 perc alatt egy Arduino-ra.

pl.: https://docs.arduino.cc/tutorials/micro/keyboard-press - aztán, hogy honnan, hogyan küldöd bele, hogy milyen billentyűleütéseket küldjön ki, az már egyéni fantázia kérdése.

"Probléma esetén nyomják meg a piros gombot és nyugodjanak békében!"

Ok, de sima billentyűzettel tudja ezt és csak a távvezérlés a probléma? vagy csak egy sima USB-s nyomtató és ezt "szeretnéd"?

Kicsit több mindent elárulhatnál, hogy ne megint XY problémamegoldásba menjünk át- mert pl. a felvezetődben számítógépet írtá, mint fogadó eszköz.

 egy számítógépből valahogy kiküldök alfanumerikus információt és az egy másik számítógépen usb-s billentyűzetként mintha gombleütések lennének jut be a másik gépbe

Bocs, de szerintem elég tiszta volt, hogy nem OS szintű, szoftveres megoldás kerestetik :) 

"Probléma esetén nyomják meg a piros gombot és nyugodjanak békében!"

Igen, az zavart össze, hogy a másik oldalra azt írta, hogy "számítógép", nem azt, hogy nyomtató. Ok, tudjuk, hogy a nyomtató is számítógép, csak beágyazott... Sokszor az van, hogy a kérdező valójában nem tudja mit akar, és egyszerűbb a tisztán szoftveres megoldás.

A nyomtató esetén fogalmunk sincsen, hogy mi az alap probléma... Lehet, hogy erre is lenne értelmesebb megoldás, mint USB-s billentyűzetet szimulálni.

Ezt nem igazan ertem. Tehat, a nyomtaton van USB Host/Master tipusu dugo (tehat 'A' vagy ujabban 'C') amibe akar dughatsz billentyuzetet is? A nyomtatokon USB Client/Slave tipusu dugo (regebben 'B' ujabban 'C') szokott lenni. Ha ez az USB eszkoz Master eszkoz, akkor dughatsz ra keyboardot, de ha ez egy mezei nyomtato, ami "IEEE 1284 over USB" szolgaltatasu kliens, akkor erre hiaba dugsz keyboardot. Nem minden 'C' foglalat jelenti azt, hogy az egy Master eszkoz.

Mi az a cel, amit el akarsz erni? 

"Mama egy lóf*szt.."

Semmit nem fog csinálni a nyomtató.

HWID -t nem találja. Ha nem tudja úgy beazonosítani, hogy egy storage device, akkor letiltja.

HID device-t nem tud kezelni a nyomtató.

Két fogos kérdés:

- HID device-t használhatnak-e robotok ??

- USB-s művagina HID interface-nek minősül ?

For Whites Only meeting room!

pontosan milyen nyomtató? 

Mit csinál, ha rákötsz igazi billenytűzetet?

 

Azt kell megérteni, hogy amikor pécére van kötve, akkor van driver, ami a nyomtatónak tetsző módon kommunikál. Nem a billentyűzettel kommunikál. Akkor is, ha nem te telepíted, hanem alapból felismeri az oprendszer, mert egy általános eszköz driverrel is megy.
Volt nekem is olyan hp 656c usb nyomtatóm, ami ette azokat a parancsokat, amit anno dos alól is lehetett küldeni a régi soros/párhuzamos portos nyomtatóknál. De ott is volt egy szoftveres réteg. 

Az usb billentyűzetnek is van drivere. Régen volt még valami usb-ps2 átalakítás, de ott lehet a billentyűzet vagy egér tudott olyan protokolt is használni és átküldeni a más alakú csatlakozón.

nagyobb méretű nyomtató, aminek van olyan usb portja amire digit kamerát, pen drive-ot és billentyűt is lehet dugni, és kezeli az inputot és azzal azt csinál amit a benne telepített szoftver elvégez (mert  a nagy gépekre lehet szoftvereket is telepíteni / készíteni) 

Aha, na így már más. Azt nem írtad, hogyan használnád. Látod a képernyőjét és át akarsz nyúlni két bill nélkül a másikba is-e vagy távolról elérni.

Ha valami linux fut rajta és hálózaton is van, akkor lehet hogy simán virtuális kvm szoftverrel kvázi át lehet húzni az egeret és billt rá. 
Barrier - a synergy opensource részére épül https://github.com/debauchee/barrier
Multiplatform. Ha win-es gépek közt kéne, akkor az ms mouse without borders egy fokkal kiforrottabb. Ezeknek nem natív usb billentyűzetként mennek valsz, máshogy oldja meg.

Ha valami zártabb rendszer és tényleg usb eszközként kell megjelenjen, akkor a mások által emlegetett kütyük tudhatnak USB gadget módot, amivel akár billentyűzetként is mutathatja magát, akkor gondolom kell valami szoftver, amivel be ssh-zol és az ablakban pötyögött gombokat kiadja usb-n. Pi zero w / zero 2 w. Ha lan kell, akkor esetleg pi4 azt hiszem a type-c csatin, amit amúgy tápnak használ van a gadget képes usb-je.
Példa: https://mtlynch.io/key-mime-pi/

Kisebb, olcsóbb kütyüként, kis fogyasztással - más célból épp ma néztem ESP32-S3 N16R8 kütyüket. Nekem az kellett, hogy valami eszköz a 3d nyomtató usb-serial portjába bedugható legyen és wifin át elérhem a soros konzolját így vele. Nincs a boardon szabad soros port, az usb-serialt nem akarom beáldozni rajta. Persze pi zero w / 2w változat erre is jó lenne, de valami kisebbet szerettem volna. És ennek elvileg van natív usb-je és valami mini linuxot tud futtatni és natív usb-je van, s a kernelben drivere a 3d nyomtatóhoz. Azt nem tudom, hogy gadget mód képes -e, mert nekem normál módban kell majd ez. És még ki sem próbáltam, kínából 8 dolcsi körül van ilyen.

En hasonlo problemat egy USB gadget-kepes Linuxos SBC-vel (pl Beaglebone) oldottam meg par eve: az USB gadget HID eszkozkent volt bekonfigolva es USB-n csatlakoztatva a target PC-hez, es bill esemnyeket egy  userspace-ben futo egyszeru program injektalta bele.

Vagy egy ilyesmibol is ki lehet indulni: MIKROE-682. Ezen van egy AT90USB162, erre ra tud menni egy LUFA stack. Arra van peldaprogram, kimondottan billentyuzet HID jelleggel. Es mondjuk nem GPIO-rol emulalgat egy par fizikai gombot, hanem UART RX/TX-rol. Ha nagyon egyedi a projekt, akkor kb igy allnek neki. De mar az is lehet hogy off-the-shelf valami ilyesmi is mindent tud mint amit szeretne a kollega.

Szerkesztve: 2023. 09. 21., cs – 10:33

Szerintem ezzel is meg lehet csinálni minimális programozással: https://unix.stackexchange.com/a/363847

Létrehozol egy HID device típusú kernel objektumot, amit billentyűzetként lát a rendszer és rábírod az X-et, hogy az inputot kösse rá az X sessionre (jó esetben ez magától megtörténik és éppen akkor kell hozzányúlni, ha ezt nem akarod). Ebből a kernel objektumból létezik olyan változat, ami valódi billentyűzet helyett userspace programból vájra az inputot, amit csak bele kell írni egy csővezetékbe és olyan lesz mintha egy ember nyomkodná.

Disclaimer: nem csináltam még ilyet, csak rágugliztam.

Egy alternatív megoldás, ha valaminek az automatizálására kell, hogy egy VNC szervert indítasz, és a VNC kliensen át küldesz billentyű kódokat. Én így szoktam UI teszt automatizálást csinálni, ha kell ilyen.

Szerk.: plusz alternatíva lehet az xdotool, amivel be lehet injektálni X szinten billentyű leütéseket.

Fontos reszlet persze hogy ha nativan (kulso HW eszkoz nelkul) szeretned akkor tkp milyen OS-rol is volna szo?

Fognék egy Raspberry Pi Zero-t (vagy ZeroW-t), szépen bekonfigurálnám a hálózatra. Mivel a Linux (meg a FreeBSD, meg a ...) tud USB Gadget módot, ezért a neten található erről szóló leírások közül kiválasztanám azt amelyik számomra legkényelmesebbnek / legérthetőbbnek / leghihetőbbnek tűnik (hint: google://"raspberry pi zero usb gadget mode keyboard emulation" pl.), és az alapján megcsinálnám, hogy az SBC billentyűzetként viselkedjen. Ezen leírásokban jellemzően van shell / python kód adott szöveg / billentyűszekvencia elküldésére, ezek közül kiválasztanám a feladathoz leginkább hasonlót, és módosítanám.

A kütyün lehet engedélyezni az ssh elkérést, így akár Win-ről is elérhető, de valószínűleg az is járható út lenne, hogy (x)inetd-ből futtatnék egy netcat alapú scriptet, ami a rácsatlakozó kliens által küldött bájtsorozatot keresztülvezeti egy csövön fent említett programocskához, ami minden karakter helyett a neki megfelelő szekvenciát küldi az USB-re. Kb. azt kell sajáét kútfőből kitalálni, hogy a távoli számítógép felől érkező bájtsorozatban mi módon jelzed azt, hogy "Kurzor fel" vagy épp "F3" billentyűt akarsz küldeni. Ha szimplán karakteres kommunikáció kell, akkor ezen se kell agyalni.

usbip - program
Ehhez persze a nyomtató USB portját rá kell dugni egy "pc"-re ami tudja futtatni ezt ( server ), majd erre a kliens csatlakozik - utána, hogy a kliensből milyen driverrel/programmal küldesz rá parancsot azt már te fogod tudni.

https://wiki.archlinux.org/title/USB/IP