Пропадает языковая панель в RDP сеансе после завершения теневой сессии
На RDS серверах под Windows Server 2012 R2 / Windows Server 2016 есть довольно старый баг. После того, как администратор или сотрудник техподдержки отключается от RDP сессии пользователя в режиме управления через теневое подключение (shadow), в сеансе пользователя пропадает языковая панель. В итоге пользователь не может переключить язык в своей RDS сессии, горячие клавиши на переключение языка также не работают. Если администратор снова подключится к сессии пользователя – языковая панель опять появляется, при отключении – снова исчезает. Аналогичный баг возникает при Shadow подключении к рабочим станциям с Windows 10 и Windows 8.1.
Как оказалось, эта проблема проявляется только в тех случаях, если администратор инициирует теневое подключение с языковой раскладкой, которая не совпадает с языком системы (Display language) на компьютере пользователя. Т.е. если у пользователя установлен русский интерфейс системы, и к нему подключается админ с русской раскладкой – проблемы нет. Если подключается админ с английской раскладкой – языковая панель при отключении сессии пропадает.
На самом деле языковая панель просто скрывается, т.к. у пользователя удаляется неактивный язык, и система считает, что если у пользователя остался только один язык, то отображать панель переключения между языками не нужно.
Чтобы вернуть языковую панель, на клиенте нужно зайти в Панель управления\Часы, язык и регион\Язык, выбрать любой язык и кнопками Вверх/Вниз переместить его.
Для автоматизации этого действия можно добавить следующий PowerShell скрипт на рабочий стол пользователя:
addlanguage.ps1
$1 = New-WinUserLanguageList en-US
$1.Add(«ru-RU»)
Set-WinUserLanguageList $1 -force
В общем получается ручной костыль да еще и с ручным приводом.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]«IgnoreRemoteKeyboardLayout»=dword:00000001
Однако проблема с пропадающей языковой панелью все равно возникает, если различаются раскладки клавиатуры у админа и в терминальной сессии пользователя.
Попробуем немного автоматизировать костыль. При отключении от теневой сессии пользователя в журнале Microsoft -> Windows -> TerminalServices -> RemoteConnectionManager -> Operational появляется событие с «Shadow Control Session Ended» с EventId 20507.
Нам нужно привязать задание планировщика к этому событию (пункт Attach task to this event), которое бы запускало скрипт fixlangauge.ps1, который формирует новое задание планировщика и выполняет его у в сеансе пользователя.
fixlangauge.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
В задании запускается указанный выше PS скрипт addlanguage.ps1.
Таким образом, после того, как администратор отключает теневое сессию к пользователю, в системе срабатывает триггер по событию 20507 и из-под пользователя автоматически отрабатывает команда добавления языка.
Пропадает языковая панель у пользователя после выхода из теневой копии RDP
На RDS серверах под Windows Server 2012 R2 / Windows Server 2016 есть довольно старый баг. После того, как администратор или сотрудник техподдержки отключается от RDP сессии пользователя в режиме управления через теневое подключение (shadow) , в сеансе пользователя пропадает языковая панель. В итоге пользователь не может переключить язык в своей RDS сессии, горячие клавиши на переключение языка также не работают. Если администратор снова подключится к сессии пользователя – языковая панель опять появляется, при отключении – снова исчезает. Аналогичный баг возникает при Shadow подключении к рабочим станциям с Windows 10 и Windows 8.1.
Как оказалось, эта проблема проявляется только в тех случаях, если администратор инициирует теневое подключение с языковой раскладкой, которая не совпадает с языком системы (Display language) на компьютере пользователя. Т.е. если у пользователя установлен русский интерфейс системы, и к нему подключается админ с русской раскладкой – проблемы нет. Если подключается админ с английской раскладкой – языковая панель при отключении сессии пропадает.
На самом деле языковая панель просто скрывается, т.к. у пользователя удаляется неактивный язык, и система считает, что если у пользователя остался только один язык, то отображать панель переключения между языками не нужно.
Чтобы вернуть языковую панель, на клиенте нужно зайти в Панель управления\Часы, язык и регион\Язык , выбрать любой язык и кнопками Вверх / Вниз переместить его.
Для автоматизации этого действия можно добавить следующий PowerShell скрипт на рабочий стол пользователя:
$1 = New-WinUserLanguageList en-US
$1.Add(«ru-RU»)
Set-WinUserLanguageList $1 -force
В общем получается ручной костыль да еще и с ручным приводом.
Совет . Наткнулся еще на интересный параметр реестра IgnoreRemoteKeyboardLayout . Если на RDS сервере в ветке HKLM\System\CurrentControlSet\Control\Keyboard создать новый параметр типа DWORD со значением 1 (нужна перезагрузка), то сервер начинает игнорировать раскладку клавиатуры клиента.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]«IgnoreRemoteKeyboardLayout»=dword:00000001
Однако проблема с пропадающей языковой панелью все равно возникает, если различаются раскладки клавиатуры у админа и в терминальной сессии пользователя.
Попробуем немного автоматизировать костыль. При отключении от теневой сессии пользователя в журнале Microsoft -> Windows -> TerminalServices -> RemoteConnectionManager -> Operational появляется событие с «Shadow Control Session Ended» с EventId 20507 .
Нам нужно привязать задание планировщика к этому событию (пункт Attach task to this event ), которое бы запускало скрипт fixlangauge.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
В задании запускается указанный выше PS скрипт addlanguage.ps1.
Таким образом, после того, как администратор отключает теневое сессию к пользователю, в системе срабатывает триггер по событию 20507 и из-под пользователя автоматически отрабатывает команда добавления языка.
Пропала панель языков
Пропала языковая панель.
Случается, что пропадает языковая панель в windows.
Плавающая панель вполне может находиться за рабочей областью экрана. Чтобы найти её нужно в любом свободном от ярлыков месте рабочего стола щелкнуть правой кнопкой мыши выбрать «Разрешение экрана». Запомнить текущее и увеличить его. Применяем. Появилась панель? Перетаскиваем поближе к центру экрана и возвращаем предыдущее разрешение повторим выше описанные действия. Панель найти не удалось? Читаем дальше..
Для восстановления панели языков ставим мышь на пустое место в панели, где кнопка «Пуск». Жмем правую кнопку мыши. В появившемся меню сверху «Панели», в выпавшем меню ставим галочку у пункта «Языковая панель». Такого пункта нет — переходим к следующему этапу.
Проблема решена? Если нет, то идем дальше:
Пуск — Панель управления — Язык и региональные настройки. Находим вкладку «Язык и клавиатуры». Кнопка «Изменить клавиатуру. «. В новом окне переходим на вкладку «Языковая панель» и на ней указываем нужное свойство для панели языков: «закрепить на панели задач». Рекомендую закрепить, поскольку после этого обычно панель перестает пропадать. Плавающая по экрану панель очень чувствительна и легко подцепляется мышкой и уносится за пределы рабочего стола, получается что панель языков вроде есть, но найти её нет возможности. То о чем было написано в самом начале.
Ещё один метод поиска пропавшей панели языков заключается в установке программы PuntoSwitcher. Особенностью программы является дублирование или замещение (по желанию) панели языков. Подробнее о программе можно прочитать по ссылке http://punto.yandex.ru/win/ — версия от Яндекса. Бесплатная, функциональная, на русском языке. Автоматическое переключение можно убрать правой клавиши на значке панели языков Punto сняв соответствующую галочку в появившемся меню. Давно и успешно пользуюсь этой программой — рекомендую!
В случае проблем с переключением раскладки, пожалуйста, посмотрите статью «Не работает контрл + Шифт»
Рекомендую свои статьи:
Помог материал — поставьте лайк, оставьте комментарий. Это поможет и другим пользователям интернета найти решение аналогичной проблемы.