Зависает RDP подключение на Windows Server 2022

Обновлено 15.05.2023

тормозит RDP windows server 2022

Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В прошлый раз мы с вами разобрали причины черного экрана на Windows 11, там пришлось слегка приложить усилия. В сегодняшней статье я вам покажу не менее интересную проблему, с которой вы легко можете столкнуться на терминальных столах, речь пойдет, о проблеме когда RDP зависает на Windows Server 2022 и переключение между вкладками проводника, попыткой нажать на панель задач - она же таскбар просто невозможно. Такие фризы, тормоза могут быть по 2-3 секунды, а то и по 5, все завит от той причины, что создала эти проблемы. Давайте я покажу, как это устранять и диагностировать.

Описание ситуации с зависание RDP сессии в Windows Server 2022

С появлением флагманской серверной ОС в виде Windows Server 2022 компания Microsoft не перестает нас баловать очередной проблемой, будто нам прежних мало, например перезагружаете вы так виртуальную машину, а она просто не стартует, у вас висит ошибка "EFI Virtual disk (0.0) Not found" и все😀, ну да Бог с ними. Пару недель назад ко мне стал поступать шквал обращений от технической поддержки, о том, что на недавно созданной Remote Desktop Services High Availability ферме на Windows Server 2022 пользователи стали во время работы получать странное поведение удаленного рабочего стола в виде:

  1. Зависала панель задач (Taskbar) при попытке производить переключение между приложениями
  2. Зависал проводник или 1С приложение и переключение между ними
  3. Зависал браузер и переходы между вкладками
  4. Зависал сам сеанс RDP на 2 и более секунды
  5. При попытке открыть реестр Windows, окно так же напрочь висло

Завис редактор реестра

Конечно я первым делом попросил коллег провести диагностику на стороне пользователя:

  1. Произвести проверку скорости и стабильности интернета
  2. Проверить версию клиента подключения к удаленному рабочему столу
  3. Попробовать отключить антивирусное решение

Все это было в норме и не дало ни какого эффекта, я стал копать дальше. Ниже я опишу куда меня привели мои исследования.

Как устранить подвисания при RDP подключении к Windows Server 2022

Начав изучать этот вопрос, я нашел, что виной всему то ли февральское обновление KB5022842, то ли еще ранее вышедшее, не суть. Разобравшись в вопросе я понял, что виной всему была службы TabletInputService (Touch Keyboard and Handwriting Panel Service) и установленная MS Teams на RDS хостах.

Служба Touch Keyboard and Handwriting Panel Service в Windows Server отвечает за обеспечение функциональности ввода текста на устройствах с сенсорными экранами или с помощью пера. Она позволяет пользователям использовать экранную клавиатуру и рукописный ввод для ввода текста, а также обеспечивает поддержку различных языков и методов ввода.

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

Абсолютно бесполезная служба для Windows Server 2022 платформы, и подлежит выключению везде и всегда. Так же советую почитать статью, где я описываю какие службы нужно точно отключить в Windows Server

Служба Touch Keyboard and Handwriting Panel Service просто забивала ветку реестра HKLM\SYSTEM\Software\Microsoft\TIP\TestResults\27641370,  сотнями тысяч строк бесполезной для нас информации. В результате чего ее физический вес достигал критической массы, чтобы ОС его нормально могла обработать, что и приводило к зависаниям RDP подключений и тормозам при ответе интерфейсов Windows.

Такую неприятность с забиванием реестра мы уже встречали, когда у нас не работала кнопка пуск в Windows Server 2022, и там так же приходилось производить чистку реестра.

Ветка реестра Windows HKLM\SYSTEM\Software\Microsoft\TIP\TestResults\27641370 отвечает за хранение результатов тестирования функциональности ввода текста (Text Input Processor) в операционной системе Windows.

TIP - это компонент Windows, который отвечает за обработку и вывод текста, вводимого пользователем на клавиатуре или с помощью других устройств ввода. В данной ветке реестра хранятся результаты тестирования TIP, проводимого при установке операционной системы или при обновлении этого компонента. Эта информация может быть полезна для диагностики и устранения проблем, связанных с функциональностью ввода текста в Windows. Однако, для большинства пользователей эта ветка реестра не имеет прямого значения и доступна только для чтения.

  • 1️⃣Первое что вы должны сделать, это закрыть подключения к вашему хосту, где есть проблемы, для этого есть режим "Drain Mode"
  • 2️⃣После того, как вы выгнали всех пользователей, вам необходимо произвести действия со службой TabletInputService. К сожалению если вы попытаетесь ее потушить, то данная возможность будет заблокирована. Как видите на скриншоте ниже я не могу остановить службу сенсорной клавиатуры и панели рукописного ввода, просто кнопка не активна.

Служба сенсорной клавиатуры и панели рукописного ввода

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

Не удается остановить службу "Служба сенсорной клавиатуры и панели рукописного ввода (TabletInputService)" из-за следующей ошибки: Не удалось остановить TabletInputService службу на компьютере '.'.
строка:1 знак:34
+ Get-Service TabletInputService | Stop-Service -Force
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (System.ServiceProcess.ServiceController:ServiceController) [Stop-Service], ServiceCommandException
+ FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Commands.StopServiceCommand

Не удается остановить службу

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

Выключение TabletInputService через GPO

  • 3️⃣Далее, когда службу мы поправили нам необходимо перезагрузить сервер, можно если у вас много хостов использовать командлет Restart-Computer
  • 4️⃣После перезагрузки убедитесь, что служба TabletInputService не запущена. Теперь нам нужно решить вопрос с веткой реестра. Для этого откройте окно "Выполнить" и введите в нем:

Там найдите и откройте ветку реестра:

HKEY_LOCAL_MACHINE\SYSTEM\Software\Microsoft\TIP \TestResults\27641370

Обратите внимание сколько там записей.

Куст реестра 27641370

  • 5️⃣Перед тем как мы его удалим, я всегда сохраняю резервную копию, к чему и вас призываю. Сделать это можно через правый клик по данной папке. Я сохраню его под именем registry_export.reg.

Экспорт куста реестра 27641370

Обратите внимание, что размер файла registry_export.reg не должен быть большой, но если он у вас как в моем случае весит более 40 мегабайт, то со сто процентной точностью зависание во время сеанса RDP сессии на вашей RDS ферме Windows Server 2022 из-за него.

Огромный размер Куста рееста 27641370

Для удобства выгрузки и подсчета размера данного файла я воспользовался вот такими командами PowerShell.

$regPath = "HKLM\SYSTEM\Software\Microsoft\TIP\TestResults\27641370"
$exportPath = "C:\temp\registry_export.reg"

& reg export $regPath $exportPath

$fileSize = (Get-Item $exportPath).Length / 1MB
Write-Host "Exported registry file size: $fileSize MB"

Выгрузка куста реестра и подсчет его размера

 

  • 6️⃣Теперь когда у вас есть резервная копия данной ветки реестра, можно смело удалять куст 27641370. Щелкаем по нему правым кликом и из контекстного меню выбираем соответствующий пункт.

Удаление Куста реестра 27641370

Или можете так же воспользоваться командой PowerShell:

Remove-Item -Path "HKLM:\SYSTEM\Software\Microsoft\TIP\TestResults\27641370" -Recurse

  • 7️⃣Седьмым действием вам необходимо переименовать два исполняемых файла по путям:

 

C:\Program Files (x86)\Common Files\Microsoft Shared\ink\TabTip32.exe в TabTip32.exe.orig (Оригинальный)

C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe в TabTip.exe.orig (Оригинальный)

Но перед тем как вы это попытаетесь сделать, нам нужно стать владельцем данного файла и дать себе максимальные права. Для этого зайдите в свойства файла, далее вкладка "Безопасность - Дополнительно". В разделе "Назначение нового владельца файла "Владелец" нажмите "Изменить".

Назначение нового владельца файла

Находите нужного пользователя, у меня это моя административная запись.

Замена владельца на файле

Теперь нам нужно в список доступа добавить свою учетную запись, которая стала владельцем файла. Для того нажмите "Изменить - Добавить", найдите пользователя и выставите ему полный контроль на файл.

Редактирование ACL у файла

 

Произведите процедуру переименовывания файла TabTip32.exe в TabTip32.exe.orig, то же самое произведите и с файлом TabTip.exe.

Переименование файла TabTip32.exe

После всех этих действий ваш реестр не будет забиваться ненужными данными, что позволит убрать зависания RDP во время работы пользователей. Но что делать если у вас как и у меня огромная RDS ферма, тут нужна автоматизация.

Автоматическое исправление зависаний RDP через PowerShell скрипт

Суть метода состоит в трех вещах:

  1. ✅Первое, у вас есть основной скрипт который будет выполнятся удаленно
  2. ✅Второе есть скрипт, который удаленно на каждом из серверов запустит первый скрипт
  3. ✅И в третьих должен быть список серверов в виде тестового файла
  4. ✅Ну и умение запускать PowerShell скрипт

Первый скрипт

$regPath = "HKLM\SYSTEM\Software\Microsoft\TIP\TestResults\27641370"
$exportPath = "C:\temp\registry_export.reg"

& reg export $regPath $exportPath

#$fileSize = (Get-Item $exportPath).Length / 1MB
#Write-Host "Exported registry file size: $fileSize MB"

Remove-Item -Path "HKLM:\SYSTEM\Software\Microsoft\TIP\TestResults\27641370" -Recurse

#Становимся владельцем C:\Program Files (x86)\Common Files\Microsoft Shared\ink\TabTip32.exe

$Acl = Get-Acl "C:\Program Files (x86)\Common Files\Microsoft Shared\ink\TabTip32.exe"
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("pyatilistnik \sem","FullControl","Allow")
$Acl.SetOwner([System.Security.Principal.NTAccount]"pyatilistnik \sem")
$Acl.SetAccessRule($Ar)
Set-Acl "C:\Program Files (x86)\Common Files\Microsoft Shared\ink\TabTip32.exe" $Acl

# Переименовать файл в TabTip32.exe.orig
Rename-Item "C:\Program Files (x86)\Common Files\Microsoft Shared\ink\TabTip32.exe" "TabTip32.exe.orig"

#Становимся владельцем C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe

$Acl = Get-Acl "C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe"
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("pyatilistnik \sem","FullControl","Allow")
$Acl.SetOwner([System.Security.Principal.NTAccount]"pyatilistnik \sem")
$Acl.SetAccessRule($Ar)
Set-Acl "C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe" $Acl

# Переименовать файл в TabTip.exe.orig
Rename-Item "C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe" "TabTip.exe.orig"

Второй скрипт

$serverList = Get-Content "C:\temp\rds\servers-test.txt"

foreach ($server in $serverList) {
$result = Invoke-Command -ComputerName $server -FilePath "C:\temp\rds\Проблемы с зависаниями RDS 2022.ps1"
Write-Host "Результаты для сервера $($server)"
Write-Host $result
}

Не забудьте:

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

В результате данный скрипт пробежался по 50 RDSH хостам и исправил зависание RDP на Windows Server 2022 серверах.

Исправление зависания RDP

Автоматизация исправления зависания RDP через командную строку

В командной строке в режиме администратора выполнить.

taskkill /f /IM tabtip.exe
taskkill /f /IM tabtip32.exe

takeown /F "C:\Program Files\Common Files\microsoft shared\ink\tabtip.exe"
cacls "C:\Program Files\Common Files\microsoft shared\ink\tabtip.exe" /T /E /P Administrators:F
cacls "C:\Program Files\Common Files\microsoft shared\ink\tabtip.exe" /T /E /P SYSTEM:F
ren "C:\Program Files\Common Files\microsoft shared\ink\tabtip.exe" tabtip.exe.old

takeown /F "C:\Program Files (x86)\Common Files\microsoft shared\Ink\tabtip32.exe"
cacls "C:\Program Files (x86)\Common Files\microsoft shared\Ink\tabtip32.exe" /T /E /P Administrators:F
cacls "C:\Program Files (x86)\Common Files\microsoft shared\Ink\tabtip32.exe" /T /E /P SYSTEM:F
ren "C:\Program Files (x86)\Common Files\microsoft shared\Ink\tabtip32.exe" tabtip32.exe.old

Reg Delete HKEY_LOCAL_MACHINE\SYSTEM\Software\Microsoft\TIP\TestResults\ /f

Отключение UDP на стороне клиента

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

reg add "HKLM\software\policies\microsoft\windows nt\Terminal Services\Client" /v fClientDisableUDP /d 1 /t REG_DWORD

Перезагрузите компьютер и проверьте, не зависает ли RDP.

Отключение UDP у RDP клиента

Отключение через групповую или локальную политику UDP протокола

Если у вас Active Directory, то вы можете создать групповую политику, которая выключит использование на стороне клиента UDP протокол в окне "Подключение к удаленному рабочему столу". Для этого создайте новую политику на уровне нужной OU или возьмите готовую. Далее перейдите в ней по пути:

Конфигурация компьютера - Административные шаблоны - Компоненты Windows - Службы удаленных рабочих столов - Клиент подключения к удаленному рабочему столу (Computer Configuration - Administrative templates - Windows components - Remote Desktop Services - Remote Desktop Connection client)

Найдите там параметр "Отключение UDP на клиенте", переведя в состояние "Включено". После этого ждите обновления групповой политики.

Отключение UDP на клиенте

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

Зависание RDP сессии из-за UPD дисков

 

Дополнительно

  • https://www.ajni.it/2022/12/windows-server-2022-freezing-very-laggy-taskbar/
  • https://learn.microsoft.com/en-us/answers/questions/752491/server-2022-and-teams-bloats-hkey-local-machinesys.html
  • https://learn.microsoft.com/en-us/answers/questions/909494/windows-2022-server-rds-laggyslow-taskbar.html
Автор - Сёмин Иван

6 Responses to Зависает RDP подключение на Windows Server 2022

  1. Wolfsanger:

    На скрине «пути для смены владельца» не замазано имя сервера 🙂

  2. Иван Семин:

    спасибо поправил

  3. Дмитрий:

    Хм, произвел вышеописанные действия на хосте windows server 2022 с установленной ролью RDS, однако проблема сохраняется.

    Анамнез такой:
    TabTip — переименованы
    служба оставлена
    UDP в сессиях — выключен
    В одной из сессий работают с ms teams

    После перезагрузки сервера, через произвольный промежуток времени случайный из 12 сеансов начинает себя так вести. Любой щелчок мышью отстает на 2-3 секунды

    Может быть есть еще какие-нибудь предложения по исправлению ?

  4. Иван Семин:

    Обновления какие у вас последние установлены? Используете ли вы перемещаемые профили, на стороне железа HDD нет проблем? Опишите как у вас построена схема RDS

  5. Дмитрий:

    Домен, в нем один терминальный сервер, все роли установлены на нем одном. Установлены все последние обновления. Сервер это виртуальная машина на esxi. Профили пользователей — локальные, не перемещаемые. На стороне железа нет проблем, в логах windows нет ничего подозрительного

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

    Помогает только logoff из сеанса и повторный вход. Автозавершения сеансов — нет

    Клиенты работают через клиентов как с windows так и с macos

  6. Роман:

    Иван, добрый день! Подскажите, пжл, почему в Windows Server 2019/2022 возникают трудности с Яндекс Диском? Пытался установить стандартную программу (не WebDAV). Сначала появились сложности на этапе авторизации в ЯД. Вроде решил, он просил включить Javascript в настройках браузера. Правда потом стал требовать куки…настройки браузера все были включены на прием куков, решилось все добавлением ЯДа в исключения брандмауэра винды (это уже все было на 2022).
    В итоге, авторизация проходит, но дальше прога виснет и ничего не происходит (далее должен открыться Проводник Яндекса и должна начаться загрузка файлов).

    Понимаю, что где-то каких-то прав скорее всего не хватает, но никак не могу разобраться. Может вы сталкивались с установкой Диска и подобными проблемами?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *