PointerEvent & DesktopSize в протоколе RFB

У меня проблема, я фактически перекодирую протокол RFB в своем программном обеспечении для связи с VNC-сервером, и я хочу знать, как получить размер рабочего стола сервера. Я уже протестировал framebuffer_width внутри сообщения serverInit, но оно не соответствует размеру барабана рабочего стола. Я не знаю, как его получить?

Мой второй вопрос - отправить сообщение PointerEvent на сервер. Чтобы переместить мышь, на самом деле в моем программном обеспечении я установил x и y мыши в положение {0, 0}, когда я отправляю это на VNC-сервер, оно работает успешно, но когда я добавляю 5 в положение x, оно не ' не сдвинуться на 5 пикселей больше, чем я хочу, я не понимаю почему???? не могли бы вы мне помочь, пожалуйста?

Спасибо за ваши ответы!

1 ответ

Похоже, что обе ваши проблемы могут быть проблемой масштабирования в вашем клиенте.

Некоторые вопросы, которые могут помочь вам ответить на ваш собственный вопрос (поскольку вам действительно нужно опубликовать больше информации, если вы хотите получить точный ответ):

  • Как вы определяете, что реальный размер рабочего стола не равен ширине в сообщении serverInit? Возможно, вы запускаете сервер VNC и предполагаете, что он использует тот же размер, что и текущий рабочий стол на сервере, и фактически он запускается с другим размером по умолчанию. В случае серверов VNC в системах *nix сервер VNC обычно работает как отдельный рабочий стол от основного рабочего стола, и его размер не обязательно совпадает.
  • Вы уверены, что обрабатываете ширину serverInit и позиции pointerEvent x и y как 16-битные значения?
  • Получаете ли вы (реклама и) псевдокодирование DesktopSize после ServerInit? Возможно, сервер меняет размер буфера кадра после подключения.
  • Какой язык / рамки / и т. Д. Вы используете для реализации клиента. Вы уверены, что функции рендеринга не масштабируются?

Кстати, я обнаружил, что официальной документации RFB несколько не хватает, и я думаю, что эти ссылки лучше для справки RFB:

Другие вопросы по тегам