На серверах Windows Server 2012 R2, 2016, а также рабочих станциях Windows 10 и 8.1 пользователи сталкиваются с проблемой, когда после отключения администратора от RDP-сессии через теневое подключение (shadow) исчезает языковая панель. В результате пользователь не может переключать раскладку клавиатуры, а стандартные горячие клавиши (например, Alt+Shift или Ctrl+Shift) перестают работать. При повторном подключении администратора панель возвращается, но исчезает снова после его выхода.
Проблема возникает, если раскладка клавиатуры администратора отличается от языка интерфейса системы (Display Language) в сессии пользователя. Например, если у пользователя русская раскладка, а администратор подключается с английской, система удаляет неактивный язык, считая, что панель не нужна при наличии только одной раскладки. В этой статье рассмотрены способы восстановления языковой панели с использованием PowerShell, реестра и автоматизации через Планировщик задач.
Решение 1: Ручное восстановление языковой панели
Для восстановления языковой панели пользователь может вручную добавить дополнительный язык в настройках системы.
1. Откройте Панель управления -> Часы, язык и регион -> Язык (Control Panel -> Clock, Language, and Region -> Language).
2. Нажмите Добавить язык, выберите, например, Английский (en-US) или Русский (ru-RU).
3. Используйте кнопки Вверх или Вниз для изменения порядка языков.
4. Примените настройки и проверьте, появилась ли языковая панель.
Решение 2: Автоматизация добавления языка через PowerShell
Для упрощения процесса создайте скрипт, который автоматически добавляет дополнительный язык в сессии пользователя.
1. Создайте файл addlanguage.ps1 с содержимым:
$list = New-WinUserLanguageList en-US
$list.Add("ru-RU")
Set-WinUserLanguageList $list -Force
2. Поместите скрипт в папку, доступную пользователю, например, C:\PS.
3. Запустите скрипт вручную или добавьте его на рабочий стол пользователя для быстрого доступа.
Этот скрипт добавляет русский и английский языки в список раскладок, возвращая языковую панель.
Решение 3: Игнорирование раскладки клиента через реестр
Параметр реестра IgnoreRemoteKeyboardLayout позволяет серверу игнорировать раскладку клавиатуры клиента, но не всегда решает проблему.
1. Откройте Редактор реестра (regedit.exe) на RDS-сервере.
2. Перейдите в ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout.
3. Создайте параметр типа DWORD с именем IgnoreRemoteKeyboardLayout и значением 1.
Или импортируйте готовый .reg файл:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] "IgnoreRemoteKeyboardLayout"=dword:00000001
4. Перезагрузите сервер и проверьте, сохраняется ли проблема.
Ограничение
Этот метод не всегда устраняет исчезновение языковой панели, если раскладки администратора и пользователя различаются.
Решение 4: Автоматизация через Планировщик задач
Для автоматического восстановления языковой панели после отключения теневой сессии можно настроить триггер на событие Shadow Control Session Ended (EventID 20507) в журнале событий.
1. Проверьте журнал событий:
— Откройте Просмотр событий (eventvwr.msc).
— Перейдите в Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational.
— Найдите событие с EventID 20507 («Shadow Control Session Ended»).
2. Создайте скрипт fixlanguage.ps1 для автоматизации:
$User = Get-WinEvent -LogName "Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational" | Where-Object {$_.ID -eq "20507"} | Select-Object -First 1 | ForEach-Object {"$($_.Properties[2].Value)"}
schtasks.exe /create /RU $User /IT /TN $User /TR "powershell.exe -File C:\PS\addlanguage.ps1" /SC DAILY
schtasks.exe /run /TN $User
Start-Sleep -Milliseconds 10000
schtasks.exe /Delete /TN $User /F
3. Поместите скрипты fixlanguage.ps1 и addlanguage.ps1 в папку C:\PS.
4. Настройте задание в Планировщике задач (taskschd.msc):
— Создайте новое задание с именем, например, RestoreLanguagePanel.
— На вкладке Триггеры выберите При событии и укажите:
— Журнал: Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational.
— Источник: RemoteConnectionManager.
— Код события: 20507.
— На вкладке Действия укажите запуск powershell.exe с аргументом -File C:\PS\fixlanguage.ps1.
— На вкладке Условия включите Запускать только при подключении к сети.
5. Проверьте выполнение задания после отключения теневой сессии.
Этот скрипт автоматически добавляет языки в сессии пользователя после завершения теневого подключения.
Дополнительные рекомендации
— Убедитесь, что на сервере и клиентских устройствах установлены последние обновления Windows через Центр обновления Windows.
— Проверьте настройки языков в Панели управления -> Часы, язык и регион -> Административные -> Язык интерфейса на RDS-сервере.
— Если проблема сохраняется, временно отключите теневое подключение и используйте прямое подключение через mstsc.exe для диагностики.
— Проверьте журналы событий в разделе Microsoft-Windows-TerminalServices для выявления дополнительных ошибок.
— Рассмотрите использование сторонних инструментов управления, таких как Remote Desktop Manager, для упрощения администрирования RDP-сессий.
Эти методы восстановят языковую панель в RDP-сессиях и обеспечат стабильное переключение раскладок клавиатуры.