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: