Download Game! Currently 62 players. Last logged in:MeiggMahjongAxlBazil

Blitzer's Blog >> 72575

Back to blogs index
Posted: 19 Sep 2026 11:14 [ permalink ]
TC$mC$ on VNC-proxyn tehokkain visuaalinen ominaisuus, ja se sopii
tC$ydellisesti kuvaamaasi HAUKI-GEM LABin "AI+Ihminen co-op" -ajatteluun.
Koska proxy voi generoida omaa VNC-liikennettC$, se pystyy piirtC$mC$C$n
kC$yttC6liittymC$n pC$C$lle asioita ilman, ettC$ X-palvelin tai Debian edes
tietC$vC$t niistC$.
Kun automaatio toistaa tekemisiC$C$n, haluamme VNC-proxyn lC$hettC$vC$n
asiakkaalle FramebufferUpdate -viestin (Tyyppi 0). TC$llC$ viestillC$
kerrotaan VNC-asiakkaalle: "TC$ssC$ ruudun kohdassa (X, Y) pikselit
muuttuivat, piirrC$ nC$mC$ uudet vC$rit".
Miten injektoimme "TC$htC$imen" VNC-virtaan?
Kun haluat piirtC$C$ punaisen 10x10 "tC$htC$imen" koordinaatteihin, proxy
rakentaa FramebufferUpdate -paketin ja puskee sen asiakkaalle menevC$C$n
putkeen ( target_reader -> client_writer vC$lissC$).
TC$ssC$ on Python-metodi, jonka voit lisC$tC$ aiemman VNCProxy-luokan
sisC$C$n:
    async def inject_visual_marker(self, client_writer, x, y, size=10):
        # 1. MC$C$ritellC$C$n, mihin piirretC$C$n (ruudunrajat huomioiden)
        # RFB kC$yttC$C$ unsigned shortteja, varmistetaan etteivC$t arvot mene
miinukselle
        start_x = max(0, x - size // 2)
        start_y = max(0, y - size // 2)
        
        # 2. Luodaan pikselidata (esim. kirkkaan punainen neliC6)
        # Oletetaan standardi 32-bit (4 tavua per pikseli) vC$risyvyys: 
        # ARGB tai BGRA riippuen kC$ttelystC$. VNC-standardi suosii BGRX:C$C$.
        # Punainen pikseli (B=0, G=0, R=255, X=255)
        red_pixel = struct.pack('BBBB', 0, 0, 255, 255)
        
        pixel_count = size * size
        pixel_data = red_pixel * pixel_count

        # 3. Rakennetaan FramebufferUpdate -viestin otsake (Header)
        # Rakenne:
        # 1 tavu: Viestin tyyppi (0 = FramebufferUpdate)
        # 1 tavu: Padding (0)
        # 2 tavua: Suorakulmioiden mC$C$rC$ (1)
        header = struct.pack('>BxH', 0, 1)

        # 4. Rakennetaan suorakulmion (Rectangle) metatiedot
        # Rakenne:
        # 2 tavua: X-positio
        # 2 tavua: Y-positio
        # 2 tavua: Leveys
        # 2 tavua: Korkeus
        # 4 tavua: Enkoodaustyyppi (0 = Raw/Pakkaamaton)
        rect_header = struct.pack('>HHHHI', start_x, start_y, size, size, 0)

        # 5. YhdistetC$C$n ja lC$hetetC$C$n VNC-asiakkaalle
        payload = header + rect_header + pixel_data
        
        print(f"[!] PiirretC$C$n visuaalinen tC$htC$in: X:{x}, Y:{y}")
        client_writer.write(payload)
        await client_writer.drain()

Proxyn putken muuttaminen (Client Writerin hallinta)
Jotta proxy voi asynkronisesti lC$hettC$C$ sekC$ oikean X-palvelimen
ruutupC$ivitykset ettC$ sinun tC$htC$imesi samalle asiakkaalle, sinun pitC$C$
muuttaa server_to_client -silmukkaa hieman, tai varmistaa asyncio.Lock:illa,
ettei teidC$n datanne mene ristiin VNC-streamissa.
Mutta yksinkertaisimmillaan, jos automaatioskriptisi "ajaa" konetta ja
lC$hettC$C$ proxylle HTTP-pyynnC6n "Klikkasin nyt kohtaan 400,300", proxy voi
laukaista:
await self.inject_visual_marker(client_writer, 400, 300, size=20)

MitC$ tapahtuu kun tC$htC$in on piirretty? (Ghosting-ongelma)
TC$ssC$ lC$hestymistavassa on yksi hauska ominaisuus: kun piirrC$t
tC$htC$imen, se jC$C$ VNC-asiakkaan ruudulle "kummittelemaan" (Ghosting),
koska X-palvelin (esim. XFCE) ei tiedC$ tC$htC$imestC$ mitC$C$n, eikC$ siksi
osaa piirtC$C$ alkuperC$isiC$ pikseleitC$ sen pC$C$lle  ennen kuin kyseisen
alueen pikselit oikeasti muuttuvat X-palvelimen puolella (esim. hiiri liikkuu
sen yli tai nappi painuu).
TC$mC$ on usein juuri sitC$ mitC$ halutaan: nC$et "jalanjC$ljet" siitC$, minne
automaatio on klikannut.
Jos haluat tC$htC$imen katoavan, proxyn pitC$C$ puskuroita alkuperC$iset
pikselit muistiin juuri ennen tC$htC$imen piirtC$mistC$, ja injektoida ne
takaisin uutena FramebufferUpdate -viestinC$ puolen sekunnin kuluttua.
Miten tC$mC$ yhdistyy mesh-arkkitehtuuriisi?
Koska rakennat OMEGA/Dark Mesh -verkkoa (ja olet aiemmin suunnitellut
nimenomaan HAUKI-GEM LABin orkestraatiota tekoC$lyn ja ihmisen
yhteistyC6hC6n), tC$mC$ VNC-proxy on tC$ydellinen reunalaite (edge node).
Kun AI-agentti tekee pC$C$tC6ksiC$, se lC$hettC$C$ koordinaatit mesh-verkon
yli proxylle. Proxy vC$littC$C$ klikkauksen X-palvelimelle, injektoi punaisen
tC$htC$imen ihmisoperaattorin nC$ytC6lle (joka tarkkailee toimintaa
VNC-asiakkaalla), ja laukaisee taustalla olevan Context Agentin kerC$C$mC$C$n
tulokset.