Недавно я уже публиковал на Хабре статью по одной нестандартно решенной мной проблеме в редком сценарии использования связки приложений удаленного доступа Sunshine и Moonlight в мультимониторной конфигурации. Так как я продолжаю активно использовать в работе эти уникальные приложения, позволяющие организовать один из самых приближенных к режиму реального времени удаленных доступов в мире, с трансляцией экрана удаленного устройства, у меня продолжаются “рождаться” необычные задачи и решения, связанные с этим. С одним из таких неожиданных решений при работе указанных приложений я и хотел бы сегодня поделиться. Заранее предупреждаю, что финальный “твист” будет невероятно простым, буквально до степени: “а что, так можно было?”.
Кратко напомню, что эти приложения способны “выжать” из Ваших видеокарты и процессора всё, на что они способны и реально выдать при удаленном доступе вплоть до 120FPS на 4K даже на не слишком “толстом” интернет-канале и предоставить Вам удаленную графическую сессию управления, в которой будет полное ощущение, что Вы работаете в конкретный момент не за удаленным рабочим столом, а просто локально.
И действительно, может возникнуть даже крайне забавная ситуация, если провести небольшой эксперимент с неподготовленным участником. Вы легко можете посадить такого человека за ноутбук или компьютер и попросить его за ним поработать. А потом спросить, почувствовал ли он что-нибудь необычное? И следом удивить его же, сообщив, что он всего лишь фактически дистанционно управлял удаленным мощным компьютером всё это время, а не работал локально за простеньким ноутбуком. Вам могут просто не поверить в это!
Однако, одно маленькое “но”, все-таки может моментально омрачить это чудо и разрушить весь комфорт от такой работы.
Всё дело в том, что при совместной работе приложений Moonlight и Sunshine легко можно добиться фактически “риалтайм” трансляции всего что происходит на экране в удаленной сессии, но невозможно добиться идеальной передачи движений курсора и идеального скроллинга страниц в браузерах, таблицах и документах, даже если на стороне условного клиента с Moonlight используется мышь Logitech серии Master в режиме безынерционного скролла с дополнительно включенным в фирменном ПО от Logitech специальным режимом плавного скроллинга.
И ладно когда Вы работаете на низкоскоростном интернет-канале между устройствами, с диким пингом, но когда то же самое происходит и в локальной сети, в одном помещении - это становится неприятно и обидно. Вы уже видите “картинку” фактически в режиме реального времени, но управлять ею идеально плавно не можете!
А особенно обидно это становится, например, в следующей ситуации. У Вас имеется дома мощный стационарный компьютер, к которому подключено огромное количество периферии, 4-5 мониторов, куча внешних устройств, и все это вместе со столом и креслом организовано в своего рода “кокпит”, Вашу рабочую зону, к которой Вы не хотите быть привязаны постоянно даже в условиях дома, но и перемещать эту зону никуда не можете. И при этом Вам очень хочется, например, в любой момент полежать на удобном диване с тонким и легким ультрабуком или планшетом с большим экраном и не потерять возможность использовать всю мощь Вашего стационара, помноженную на супер автономность этого ультрабука или планшета, с дополнительным “профитом” в виде разгрузки спины, позвоночника, да и просто “пятой точки”.
Но без адекватного скролла и перемещений курсора мыши этого не получится.
Понимая это и в полной мере это ощутив, я принялся “крутить” настройки Sunshine и Moonlight. Я перелопатил кучу настроек, пытаясь из них выжать всё, но реальность оставалась суровой. Как только я начинал активно скроллить страницы где угодно в удаленной сессии, сразу же “вспоминал”, что “царь то - ненастоящий”! И я уже почти смирился с этим, пока в один прекрасный день совершенно случайно … не перепутал компьютерные мыши! Дело в том, что я использую сразу две компьютерные мыши Logitech серии Master, каждая из которых через свой персональный USB премник-передачик (или по BT) подключена к конкретному устройству. Одна мышь управляет ультрабуком, а другая - стационаром. И чтобы постоянно не переключать всего одну мышь на разные устройства, я просто одну мышь держал на столе со стационаром (для управления только им), а с другой - перемещаюсь по дому, преимущественно используя её с ультрабуком и планшетом.
И что же в такой ситуации получалось при работе приложений Moonlight и Sunshine?
Стационар честно транслировал “картинку” в сторону ультрабука на “космической” скорости локальной сети, легко выдавая мне даже 120 FPS на 4k разрешении, но мышь, подключенная к ультрабуку фактически должна была пройти двойной маршрут, когда управляла мощным стационаром в удаленной сессии. Именно в этот момент и возникают неминуемые лаги и срывы синхронизации, из-за которых, невозможно было получить идеально плавный скроллинг. Ведь приложениям Moonlight и Sunshine надо не просто “синхронизировать” курсор и скроллинг с видеопотоком, но еще и невероятно четко рассчитать все эти “микро импульсы” с “рывками” безынерционного скролла у Logitech, которые по сути должны были стать непрерывными, что становится практически невыполнимой задачей.
Но тут я, как и писал выше, я случайно перепутал мыши местами…
Я немедленно увидел идеальный скроллинг с настоящим эффектом “полного погружения”. Удаленная сессия больше ничем себя не выдавала, и я потерял возможность понимать, что я работаю не локально.
Что же произошло на самом деле? Получилось следующее. Когда я в очередной раз, работая на диване с ультрабуком через Moonlight и Sunshine с мощным стационаром, перепутал мыши, получилось что мышь, которая была подключена к стационару, оказалась у меня в руках. И с этого момента стационару и приложениям Moonlight и Sunshine больше не было никакой необходимости “сходить с ума”, пытаясь выстроить идеальную синхронизацию видеопотока с движениями мыши и с колесом безынерционного скролла. Той самой мыши, что совершенно логично ранее была подключена к ультрабуку.
Я фактически искусственно создал ситуацию, при которой мне больше вообще не надо было передавать координаты мыши и синхронизировать колесо скролла с видеопотоком в удаленной сессии, потому что работа локальной мыши просто … встроилась в удаленный видеопоток, при этом физически управляя стационаром.
Звучит невероятно глупо и смешно, но проблема “последней мили” была решена самым идиотским образом :-)
В итоге я получил то, что хотел, и теперь “тиражирую” всю мощь стационара фактически на любое “устройство отображения” в настоящем режиме “полного погружения”, правда в условиях отдельного взятого помещения.
Конечно же этот трюк не пройдет при реальном физическом удалении от условного сервера, так как радиус действия USB приемника-передатчика мыши (или её BT-предачтика) ограничен. Но и тут можно извратиться, и начать использовать великое и могучее приложение VirtualHere, но это уже совсем другая история…
