Зависает RDP подключение на Windows Server 2022
- Описание ситуации с зависание RDP сессии в Windows Server 2022
- Как устранить подвисания при RDP подключении к Windows Server 2022
- Автоматическое исправление зависаний RDP через PowerShell скрипт
- Первый скрипт
- Второй скрипт
- Автоматизация исправления зависания RDP через командную строку
- Отключение UDP на стороне клиента
- Отключение через групповую или локальную политику UDP протокола
- Зависание RDP сессии из-за UPD дисков
- Дополнительно
Добрый день! Уважаемые читатели и гости 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 пользователи стали во время работы получать странное поведение удаленного рабочего стола в виде:
- Зависала панель задач (Taskbar) при попытке производить переключение между приложениями
- Зависал проводник или 1С приложение и переключение между ними
- Зависал браузер и переходы между вкладками
- Зависал сам сеанс RDP на 2 и более секунды
- При попытке открыть реестр Windows, окно так же напрочь висло
Конечно я первым делом попросил коллег провести диагностику на стороне пользователя:
- Произвести проверку скорости и стабильности интернета
- Проверить версию клиента подключения к удаленному рабочему столу
- Попробовать отключить антивирусное решение
Все это было в норме и не дало ни какого эффекта, я стал копать дальше. Ниже я опишу куда меня привели мои исследования.
Как устранить подвисания при RDP подключении к Windows Server 2022
Начав изучать этот вопрос, я нашел, что виной всему то ли февральское обновление KB5022842, то ли еще ранее вышедшее, не суть. Разобравшись в вопросе я понял, что виной всему была службы TabletInputService (Touch Keyboard and Handwriting Panel Service) и установленная MS Teams на RDS хостах.
Служба Touch Keyboard and Handwriting Panel Service в Windows Server отвечает за обеспечение функциональности ввода текста на устройствах с сенсорными экранами или с помощью пера. Она позволяет пользователям использовать экранную клавиатуру и рукописный ввод для ввода текста, а также обеспечивает поддержку различных языков и методов ввода.
Эта служба также может использоваться для управления настройками связанными с вводом текста, таких как размер и положение экранной клавиатуры, настройки автозамены и другие параметры.
Служба Touch Keyboard and Handwriting Panel Service просто забивала ветку реестра HKLM\SYSTEM\Software\Microsoft\TIP\TestResults\27641370, сотнями тысяч строк бесполезной для нас информации. В результате чего ее физический вес достигал критической массы, чтобы ОС его нормально могла обработать, что и приводило к зависаниям RDP подключений и тормозам при ответе интерфейсов Windows.
Ветка реестра Windows HKLM\SYSTEM\Software\Microsoft\TIP\TestResults\27641370 отвечает за хранение результатов тестирования функциональности ввода текста (Text Input Processor) в операционной системе Windows.
TIP - это компонент Windows, который отвечает за обработку и вывод текста, вводимого пользователем на клавиатуре или с помощью других устройств ввода. В данной ветке реестра хранятся результаты тестирования TIP, проводимого при установке операционной системы или при обновлении этого компонента. Эта информация может быть полезна для диагностики и устранения проблем, связанных с функциональностью ввода текста в Windows. Однако, для большинства пользователей эта ветка реестра не имеет прямого значения и доступна только для чтения.
- 1️⃣Первое что вы должны сделать, это закрыть подключения к вашему хосту, где есть проблемы, для этого есть режим "Drain Mode"
- 2️⃣После того, как вы выгнали всех пользователей, вам необходимо произвести действия со службой TabletInputService. К сожалению если вы попытаетесь ее потушить, то данная возможность будет заблокирована. Как видите на скриншоте ниже я не могу остановить службу сенсорной клавиатуры и панели рукописного ввода, просто кнопка не активна.
Тут хоть вы и не можете ее потушить, хотя бы переведите ее тип запуска в статус "Отключена", чтобы при перезагрузке сервера он просто не запустилась. Если захотите выключить службу через PowerShell, то получите ошибку:
строка: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 хостов, то мне долго обходить каждый, поэтому я сделал просто групповую политику, где указал всем для данной службы поменять тип ее запуска.
- 3️⃣Далее, когда службу мы поправили нам необходимо перезагрузить сервер, можно если у вас много хостов использовать командлет Restart-Computer
- 4️⃣После перезагрузки убедитесь, что служба TabletInputService не запущена. Теперь нам нужно решить вопрос с веткой реестра. Для этого откройте окно "Выполнить" и введите в нем:
Там найдите и откройте ветку реестра:
Обратите внимание сколько там записей.
- 5️⃣Перед тем как мы его удалим, я всегда сохраняю резервную копию, к чему и вас призываю. Сделать это можно через правый клик по данной папке. Я сохраню его под именем registry_export.reg.
Для удобства выгрузки и подсчета размера данного файла я воспользовался вот такими командами 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. Щелкаем по нему правым кликом и из контекстного меню выбираем соответствующий пункт.
Или можете так же воспользоваться командой PowerShell:
- 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 (Оригинальный)
Но перед тем как вы это попытаетесь сделать, нам нужно стать владельцем данного файла и дать себе максимальные права. Для этого зайдите в свойства файла, далее вкладка "Безопасность - Дополнительно". В разделе "Назначение нового владельца файла "Владелец" нажмите "Изменить".
Находите нужного пользователя, у меня это моя административная запись.
Теперь нам нужно в список доступа добавить свою учетную запись, которая стала владельцем файла. Для того нажмите "Изменить - Добавить", найдите пользователя и выставите ему полный контроль на файл.
Произведите процедуру переименовывания файла TabTip32.exe в TabTip32.exe.orig, то же самое произведите и с файлом TabTip.exe.
После всех этих действий ваш реестр не будет забиваться ненужными данными, что позволит убрать зависания RDP во время работы пользователей. Но что делать если у вас как и у меня огромная RDS ферма, тут нужна автоматизация.
Автоматическое исправление зависаний RDP через PowerShell скрипт
Суть метода состоит в трех вещах:
- ✅Первое, у вас есть основной скрипт который будет выполнятся удаленно
- ✅Второе есть скрипт, который удаленно на каждом из серверов запустит первый скрипт
- ✅И в третьих должен быть список серверов в виде тестового файла
- ✅Ну и умение запускать 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 через командную строку
В командной строке в режиме администратора выполнить.
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 введите:
Перезагрузите компьютер и проверьте, не зависает ли RDP.
Отключение через групповую или локальную политику UDP протокола
Если у вас Active Directory, то вы можете создать групповую политику, которая выключит использование на стороне клиента UDP протокол в окне "Подключение к удаленному рабочему столу". Для этого создайте новую политику на уровне нужной OU или возьмите готовую. Далее перейдите в ней по пути:
Найдите там параметр "Отключение 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
На скрине «пути для смены владельца» не замазано имя сервера 🙂
спасибо поправил
Хм, произвел вышеописанные действия на хосте windows server 2022 с установленной ролью RDS, однако проблема сохраняется.
Анамнез такой:
TabTip — переименованы
служба оставлена
UDP в сессиях — выключен
В одной из сессий работают с ms teams
После перезагрузки сервера, через произвольный промежуток времени случайный из 12 сеансов начинает себя так вести. Любой щелчок мышью отстает на 2-3 секунды
Может быть есть еще какие-нибудь предложения по исправлению ?
Обновления какие у вас последние установлены? Используете ли вы перемещаемые профили, на стороне железа HDD нет проблем? Опишите как у вас построена схема RDS
Домен, в нем один терминальный сервер, все роли установлены на нем одном. Установлены все последние обновления. Сервер это виртуальная машина на esxi. Профили пользователей — локальные, не перемещаемые. На стороне железа нет проблем, в логах windows нет ничего подозрительного
Проблема возникает совершенно рандомно и после перезагрузки и спустя несколько дней работы.
Помогает только logoff из сеанса и повторный вход. Автозавершения сеансов — нет
Клиенты работают через клиентов как с windows так и с macos
Иван, добрый день! Подскажите, пжл, почему в Windows Server 2019/2022 возникают трудности с Яндекс Диском? Пытался установить стандартную программу (не WebDAV). Сначала появились сложности на этапе авторизации в ЯД. Вроде решил, он просил включить Javascript в настройках браузера. Правда потом стал требовать куки…настройки браузера все были включены на прием куков, решилось все добавлением ЯДа в исключения брандмауэра винды (это уже все было на 2022).
В итоге, авторизация проходит, но дальше прога виснет и ничего не происходит (далее должен открыться Проводник Яндекса и должна начаться загрузка файлов).
Понимаю, что где-то каких-то прав скорее всего не хватает, но никак не могу разобраться. Может вы сталкивались с установкой Диска и подобными проблемами?