Проблема масштабирования rdp в windows 10 на мониторах с высоким разрешением

При использовании мониторов с высоким разрешением (4k DPI) в Windows 10 пользователи часто сталкиваются с тем, что текст, значки и другие элементы устаревших программ, несовместимых с экранными режимами HiDPI, становится слишком мелким, размытыми и нечитаемыми.

Частично эта проблема была исправлена в обновлении Fall Creators Update за счет внедрения дополнительной поддержки динамического масштабирования DPI, однако при подключении к рабочему столу удаленного компьютера по RDP, проблема масштабирования все еще сохраняется (все также отсутствует поддержка нормального масштабирование для клиента mstsc.exe).

В Windows 8.1 и Windows 10 по-умолчанию локальный DPI передается в RDP подключение, в результате все значки и текст в таком окне становятся очень мелкими и плохо читаемыми.

win10 rdp 4k resolution

В качестве обходного пути можно использовать для RDP подключений приложение RDCMan, но есть решение и для родного клиента mstsc.exe.

Смысл в том, что для конкретных приложений можно создать отдельный файл манифеста (.manifest).

Чтобы этот функционал заработал, чтобы Windows при запуске приложения пыталась сначала получить данный из файла манифеста приложения. Для этого в ветке реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide создать ключ типа DWORD (32 бит) со именем PreferExternalManifest и десятичным значением 1.

PreferExternalManifest

Затем в каталоге %SystemRoot%\System32\ (в нем хранится клиент mstsc.exe) нужно создать файл mstsc.exe.manifest со следующим текстом:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"

name="Microsoft.Windows.Common-Controls"
version="6.0.0.0" processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*">
</assemblyIdentity>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.VC90.CRT"
version="9.0.21022.8"
processorArchitecture="amd64"
publicKeyToken="1fc8b3b9a1e18e3b">
</assemblyIdentity>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<ms_windowsSettings:dpiAware xmlns:ms_windowsSettings= "http://schemas.microsoft.com/SMI/2005/WindowsSettings" >false</ms_windowsSettings:dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>

mstsc.exe.manifest

Примечание. Данные значения для файла манифеста можно получить самостоятельно из .exe файла приложения с помощью утилиты Resource Hacker. Для этого нужно открыть файл mstsc.exe с помощью Resource Hacker. Скопируйте данные из раздела Manifest->1->1033 (для английской Windows) и добавьте секцию с флагом dpiAware со значением false.

Перезагрузите Windows, и попробуйте удаленно подключиться к другому компьютеру/серверу с помощью mstsc.exe. Как вы видите, содержимое RDP окна теперь отображается нормально.

Аналогичным образом можно создать файл манифеста для любого приложения, который не поддерживает нативное масштабирование.

У меня появился новый ноутбук – можно сказать, классика рабочего жанра – Lenovo ThinkPad T580. В этом ноуте все отлично – и характеристики его железа (на канале будет отдельный обзор), и, собственно дизайн, вес и прочие эргономические вещи… И как главная плюшка – у ноута отличный 15” экран с разрешением 3840х2160 – 4К.

Но, как часто бывает – все эти плюшки не только приятны, но и имеют отрицательные стороны. Вы видели, какой масштаб PPI (DPI) стоит для таких вот 15” экранов 4К 3840х2160, подобных Lenovo ThinkPad T580?! – правильно, 250% по умолчанию! Т.е. именно настолько масштабируется изображение, чтобы текст на экране был читаемый глазом, а в элементы управления можно было попадать мышкой. Кто не знаком с эффектом DPI/PPI на маленьких экранах с большим разрешением (от 4К и выше) – рекомендую заглянуть в настройки дисплея в Windows и там поиграться в настройками Scaling’а. А для наглядности – вот вам картинка для сравнения вида интерфейса в масштабе 100% и 225%

100-225-comparison

При чем здесь DPI/PPI и масштабирование, спросите вы? А при том, что представьте себе, что у вас есть приложение, которое ничего не знает о том, в каком масштабе отображать картинку внутри себя и никакого масштабирования внутри такого приложения не происходит. В результате – внутри окна приложения будет все настолько мелким, насколько это выглядит таковым в приведенном выше примере (слева).

И таким вот нужным и часто используемым приложением, которое «не понимает масштабирования» для экранов с большим разрешением – является Microsoft Remote Desktop Client (да и многие прочие клиенты удаленного рабочего стола RDP). При подключении к удаленному компьютеру – рабочий стол этого компьютера в RDP выглядит катастрофически мелким, поскольку картинка RDP оттуда – отображается с масштабированием DPI удаленного сервера, которое может быть и 150%, и даже 100%. Работать с таким удаленным интерфейсом на экране 4К размером 15” – нереально, курсора мышки иногда просто не видно 😉

Так поменять масштабирование на удаленном сервере!!! – ага, сейчас, по умолчанию на сервере такая опция заблокирована – для изменения масштабирования интерфейса в сеансе RDP на сервере надо провести шаманские пляски (если у вас есть права на это), да и не будешь на каждом сервере это менять…

Итого, остается только вариант научить клиента удаленного рабочего стола RDP («родного» Microsoft’овского или какого либо другого) понимать масштабирование и учитывать это при соединении с удаленным сервером.

После достаточно длительного поиска в Инете и чтения разных «рецептов танцев с бубнами» вокруг проблемы масштабирования DPI/PPI в RDP, я пришел к выводу, что самым работоспособным рецептом решения проблемы является вариант, описанный в статье [Fix] Remote Desktop DPI scaling issues. Во избежание потери информации (если вдруг страницу или файлы удалят, сайт закроют) – сделаю вольный перевод предложенного материала/копию файлов и у себя на блоге.

Итак, метод лечения проблемы масштабирования интерфейса для стандартного RDP клиента Microsoft крайне прост и заключается в копировании специального файла-манифеста для RDP, который собственно и содержит в себе команду включения того самого масштабирования для удаленного подключения:

  1. Правим на локальной машине (где вы и используете RDP и где у вас, надеюсь, есть все права админа) реестр, указывая, что стандартный RDP клиент должен брать настройки из файла манифеста:

    1. Запускаем утилиту regedit и идем по следующему пути:
      HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide

    2. Создаем новый параметр, кликнув на пустом поле справа правой кнопкой мышки NEW -> DWORD (32 bit) Value

    3. Вводим имя нового параметра PreferExternalManifest и жмем ENTER.

    4. Снова кликаем правой кнопкой мыши, теперь уже по записи PreferExternalManifest, и выбираем Modify.

    5. Вводим в Value Data значение 1 и выбираем пункт Decimal.

    6. Нажимаем в окошке OK.

    7. Закрываем Registry Editor.
      Результат должен выглядеть примерно следующим образом:

      Registry-RDP-manifest

  2. Далее, нужно создать файл самого манифеста под именем mstsc.exe.manifest и поместить его в папку %SystemRoot%\System32\mstsc.exe.manifest (обычно это C:\Windows\System32\mstsc.exe.manifest). Полный текст содержимого mstsc.exe.manifest приведен ниже, уже готовый файл mstsc.exe.manifest можете забрать здесь.

Далее – запускаем стандартный Microsoft клиент RDP (mstsc.exe) или перезапускаем его (если на момент изменений были открыты какие-то RDP сессии) и наслаждаемся соответствующим масштабу вашего локального экрана виду удаленного экрана. В реальности, данный фикс настроек RDP клиента работает очень просто – RDP клиент отправляет запрос на такое разрешение удаленного экрана, которое на соответствующий масштабу процент меньше, чем оригинальное у клиента – так что не удивляйтесь «странным» цифрам в разрешении удаленного рабочего стола. Например, если у меня разрешение 4К 3840х2160 при 225% масштаба, то разрешения удаленного стола будет установлено обновленным RDP клиентом для полноэкранной картинки как 1704х960 (как раз те самые 3840/2,25 и т.д.) – и все элементы удаленного интерфейса соответствуют масштабу.

<?xml version=»1.0″ encoding=»UTF-8″ standalone=»yes»?>

<assembly xmlns=»urn:schemas-microsoft-com:asm.v1″ manifestVersion=»1.0″ xmlns:asmv3=»urn:schemas-microsoft-com:asm.v3″>

<dependency>

<dependentAssembly>

<assemblyIdentity

type=»win32″

name=»Microsoft.Windows.Common-Controls»

version=»6.0.0.0″ processorArchitecture=»*»

publicKeyToken=»6595b64144ccf1df»

language=»*»>

</assemblyIdentity>

</dependentAssembly>

</dependency>

<dependency>

<dependentAssembly>

<assemblyIdentity

type=»win32″

name=»Microsoft.VC90.CRT»

version=»9.0.21022.8″

processorArchitecture=»amd64″

publicKeyToken=»1fc8b3b9a1e18e3b»>

</assemblyIdentity>

</dependentAssembly>

</dependency>

<trustInfo xmlns=»urn:schemas-microsoft-com:asm.v3″>

<security>

<requestedPrivileges>

<requestedExecutionLevel

level=»asInvoker»

uiAccess=»false»/>

</requestedPrivileges>

</security>

</trustInfo>

<asmv3:application>

<asmv3:windowsSettings xmlns=»http://schemas.microsoft.com/SMI/2005/WindowsSettings»&gt;

<ms_windowsSettings:dpiAware xmlns:ms_windowsSettings=»http://schemas.microsoft.com/SMI/2005/WindowsSettings»>false</ms_windowsSettings:dpiAware&gt;

</asmv3:windowsSettings>

</asmv3:application>

</assembly>

Немного дополнительных life-хаков о том, как:

  • Как восстановить «сдохшую» microSD, SD или USB, которая не хочет форматироваться
  • Какую быструю microSD карточку купить для работы с 4K видео, большими фото, time lapse и т.п.?–тестирование скорости работы microSD U3 от Samsung, SanDisk, Kingston, Transcend и “китайских ноунейм” Toshiba, OV, LonDisk
  • Как удалить CD раздел с USB флешки, снять режим «только чтение», проверить реальный рабочий размер
  • Как правильно очистить место на системном диске Windows (C:) и ничего не сломать (от Игоря Шаститко)
  • Подробно: почему и как «сдохла» microSD/SD, флешка в телефоне, камере и как с этим бороться
  • Как правильно и безопасно удалить вирусы, трояны, rootkit’ы с вашего ПК — подробная инструкция
  • Как создать Microsoft Account (учетную запись Microsoft), почему не работает Microsoft Account?
  • СофТы: простой способ установки Windows 2000/Windows XP на телефон Android (Limbo)

И еще немного дополнительных материалов, посвященных ИТ тематике у меня на YouTube-канале iWalker2000 и тут на блоге. Надеюсь, сисадмины и те, кто ими собирается стать – найдут данные материалы тоже интересными для себя.

Первые серии нового курса по использованию Azure IaaS:

  • Использование инфраструктуры Azure для системных администраторов, часть 1 — 15 шагов ДО облаков
  • Использование инфраструктуры Azure для системных администраторов, часть 2 — виртуальный облачный ЦОД
  • Использование инфраструктуры Azure для сисадминов, часть 4 — основные инструменты управления в Azure
  • Использование инфраструктуры Azure для сисадминов, часть 5 — что такое Resource Group в Azure

Видео об ИТ-карьере — как стать ИТ-специалистом и заработать много денег:

И смотрите другие видео для ИТ-специалистов у меня на канале:

Видео про новые возможности дисков и дисковых массивов:

Подписывайтесь на мой Youtube канал iWalker2000 – для подписки просто кликните сюда


Также, по просьбам посетителей — меня найти можно (добавляйтесь в друзья и подписчики):

Проблема

При наличии HIGH DPI дисплея в Windows (4K,2K) в системе как правило применяется масштабирование — 200% или 250%.

По умолчанию RDP client не понимает\не принимает параметры масштабирования, в итоге получается картинка с 100% масштабом в экране 4к.

Решение

Решение состоит из двух пунктов.

Реестр

Идём в ветку:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide

Создаем новый DWORD(32bit) параметр, который укажет нашему RDP клиенту, что необходимо сначала брать параметры из нашего файла манифеста.

PreferExternalManifest=1

Манифест

Далее необходимо создать сам файл mstsc.exe.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<dependency>
  <dependentAssembly>
    <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*">
    </assemblyIdentity>
  </dependentAssembly>
</dependency>
<dependency>
  <dependentAssembly>
    <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b">
    </assemblyIdentity>
  </dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
  <security>
    <requestedPrivileges>
      <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
    </requestedPrivileges>
  </security>
</trustInfo>
<asmv3:application>
  <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
    <ms_windowsSettings:dpiAware xmlns:ms_windowsSettings="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</ms_windowsSettings:dpiAware>
  </asmv3:windowsSettings>
</asmv3:application>
</assembly>

Поместим наш манифест в

%SystemRoot%\System32\

Итог

После перезагрузки, модифицированный RDP клиент должен воспринимать параметры масштабирования. Например при разрешении экрана 4К 3840х2160 и масштабировании 225%, RDP клиент с масштабирует картинку в 1704х960 (как раз те самые 3840/2,25 и т.д.)

Было опробовано в Windows 10 Домашняя для одного языка 20H2

Wiki ссылка

Время на прочтение1 мин

Количество просмотров33K

На волне массового перехода на удалёнку, возможно кому-то будет полезным.

Рабочий монитор — FullHD (Win7x64), домашний 4k. На домашнем мониторе получалось 1/4 экрана и никак не увеличивалось, настройка размера шрифтов до 150% на рабочем мониторе при подключении по РДП была заблокирована.

Перелопатил прилично форумов и решение всё-таки нашлось. На рабочем компе надо установить апдейт от Майкрософт KB2726399 и после ребута можно выставить 150% увеличение.

В настройках RDP на домашнем включаем фуллскрин.

Результат — на домашнем 4к-мониторе полный экран с нормальным удобным разрешением.

К сожалению, на сайте МС этот апдейт выпилен, но интернет помнит всё (или почти всё), так что апдейт удалось скачать отсюда.

Всего голосов 4: ↑3 и ↓1

+7

Комментарии23

Монитор 4к и RDP, как работать?

0

bestuzhev

29.12.19

19:22

Имеем 4к монитор и windows 10

Локально все вроде норм ставим масштаб 200%, и работаем.

Но стоит подключиться по RDP то начинается кошмар. На удаленном компе много что не мосштабируется, а где-то вообще стоит еще WIndows Server 2003 которая про 4к и не слышала.

Подскажите как решить проблему?

1

bestuzhev

29.12.19

19:24

(0) Как заставить RDP на удаленном компе ставить разрешение FULL-HD и на локальном это все растягивать на весь экран а не отображать в окне?

2

Asmody

29.12.19

19:36

Поменять монитор

3

Изучаю1С8

29.12.19

19:42

Из-за этого пока отказался от приобретения 4к моника. В том числе и ноута с таким разрешением.

4

bestuzhev

29.12.19

19:43

(3) Понятно. Вот блин почему на Маке такой проблем нет, а тут есть… странно… верь RDP это мелкомягкий же…

5

bestuzhev

29.12.19

19:44

(3)(4) Пока переключил моник на full-hd

6

Asmody

29.12.19

20:25

Первая ссылка в Яндексе решает проблему. Направлю: нужно руками прописать манифест для mstsc.exe

7

bestuzhev

29.12.19

20:47

(6) Не решает, все прописал как есть так и остается.

8

Amra

29.12.19

21:03

(7) Поменять прокладку между стулом и монитором 4к

9

Фрэнки

29.12.19

21:04

(7) винду в топку :-)

а там же в настройках ярлыка для рдп — там же на вкладке монитор есть выбор. Если родное разрешение рабочего стола много больше нужного, то нужно просто вручную указать и все. Отобразит окно.

10

Фрэнки

29.12.19

21:05

вкладка Экран

11

Маргарин

30.12.19

04:12

(0) Недавно была такая же тема. Все очень просто, нужно использовать новый клиент RDP, который в Десятке и в Маке одинаковый, а не старый семерошный mstsc.exe

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

12

Джордж1

30.12.19

09:25

(0)Работает все нормально. Не забыть в RDP выйти и снова войти из системы

13

Fragster

гуру

30.12.19

10:30

если монитор один, то есть еще вариант принудительно установить нужное разрешение принудительно в remote desktop client из виндус стора. я так делаю, когда через мобильный интернет сижу. А то на 4к больно медленно.

14

Fragster

гуру

30.12.19

10:30

15

Маргарин

30.12.19

18:23

(14) +1. Про нее я и говорил. Я там под ником Тельняш писал как раз.

16

Jump

03.01.20

21:12

(7) Все прекрасно решает.

Просто десятка по умолчанию локальное разрешение в RDP тащит.

Поэтому надо сначала объяснить ей чтобы она разрешение брала не локальное, а из манифеста, и собственно написать манифест.

В общем правим рееестр и пишем манифест.

17

Dmitri23

13.01.20

08:38

для офиса нужны офисные мониторы не потому что они дешевле, также как для игр нужные игровые пк. 4к есть смысл брать ну сами понимает куда , но не для 1с и rdp

18

Сияющий в темноте

13.01.20

08:56

виртуализация и масштабирование прекрасно решают проблемы пересчета размера экрана.

19

Вышкин

13.01.20

19:36

(17) Куда? Для программирования само то.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Windows 10 pro x64 1709
  • Wondershare dr fone for windows
  • Windows 7 x64 1гб
  • Реалтек микшер windows 11
  • Как получить доступ к папке пользователя на другом жестком диске windows 10