キー押下のコマンドを送信
- 認証のロジックが理解できなかったので認証なし(-SecurityTypes None)でサーバを起動
- U16/U32型はとりあえず適当に処理
<?php
// vim: set et ts=4 sw=4 sts=4:
$fp = fsockopen('***.***.***.***', 5901, $errno, $errstr, 10);
if ($fp === false) {
exit("connect error: {$errno} {$errstr}\n");
}
// ProtocolVersion
$buf = fread($fp, 12);
// v3.3指定
$rc = fwrite($fp, "RFB 003.003\n");
// security-type
$buf = fread($fp, 4);
$st = ord($buf[3]);
if ($st != 1) { // 1:None限定
fclose($fp);
exit("not support\n");
}
// ClientInit(1:share)
$rc = fwrite($fp, chr(1)); // shared-flag
// ServerInit
$buf = fread($fp, 2); // framebuffer-width
$buf = fread($fp, 2); // framebuffer-height
$buf = fread($fp, 16); // server-pixel-format
$buf = fread($fp, 4); // name-length
$buf = fread($fp, ord($buf[3])); // name-string
// キー入力
sendString('Hello');
fclose($fp);
function sendString($s)
{
for ($i = 0; $i < strlen($s); $i++) {
sendKey($s[$i]);
}
}
function sendKey($c)
{
global $fp;
$rc = fwrite($fp, chr(4)); // message-type(4:KeyEvent)
$rc = fwrite($fp, chr(1)); // down-flag(1:down)
$rc = fwrite($fp, ' '); // padding
$rc = fwrite($fp, chr(0) . chr(0) . chr(0) . $c); // key
}
参考