Jazyková lišta zmizí v relaci RDP po ukončení stínové relace

Na serverech RDS pod Windows Server 2012 R2 / Windows Server 2016 je poměrně stará chyba. Poté, co se administrátor nebo zaměstnanec technické podpory odpojí od relace RDP uživatele v kontrolním režimu prostřednictvím stínového připojení, panel jazyka v uživatelské relaci zmizí. V důsledku toho uživatel nemůže přepínat jazyk ve své relaci RDS, klávesové zkratky pro přepínání jazyka také nefungují. Pokud se správce znovu připojí k relaci uživatele, znovu se objeví lišta jazyků, po odpojení znovu zmizí. K podobné chybě dochází, když se stín připojí k pracovním stanicím se systémem Windows 10 a Windows 8.1..

Jak se ukázalo, tento problém se objeví pouze v případě, že správce iniciuje stínové připojení s rozvržením jazyka, které neodpovídá systémovému jazyku (jazyk zobrazení) v počítači uživatele. I.e. pokud má uživatel nainstalované ruské systémové rozhraní a je k němu připojen správce s ruským rozvržením, není problém. Pokud je připojen správce s anglickým rozvržením, panel jazyků po odpojení relace zmizí.

Ve skutečnosti se panel jazyků jen skrývá, protože neaktivní jazyk je odstraněn od uživatele a systém se domnívá, že pokud má uživatel pouze jeden jazyk, není třeba zobrazovat panel pro přepínání jazyků.

Chcete-li vrátit jazykovou lištu, musíte na klienta jít do Ovládací panel \ Hodiny, Jazyk a region \ Jazyk, zvolte libovolný jazyk a tlačítka Nahoru/Dolů pohni to.

K automatizaci této akce můžete na plochu uživatele přidat následující skript PowerShell:

addlanguage.ps1

$ 1 = New-WinUserLanguageList cs-USA
$ 1.Add („ru-RU“)
Set-WinUserLanguageList $ 1 -force

Obecně se získá ruční berle, a to dokonce i s ručním pohonem.

Tip. Narazil jsem na zajímavé nastavení registru IgnoreRemoteKeyboardLayout. Pokud je na serveru RDS ve větvi HKLM \ System \ CurrentControlSet \ Control \ Keyboard vytvořit nový parametr typu DWORD s hodnotou 1 (je třeba restartovat), pak server začne ignorovat rozložení klávesnice klienta.

Editor registru systému Windows verze 5.00
[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Keyboard Layout]
"IgnoreRemoteKeyboardLayout" = dword: 00000001

Problém s mizejícím jazykovým pruhem však stále přetrvává, pokud se rozložení klávesnice liší mezi relací administrátora a uživatele..

Zkusme automatizovat malou berlu. Při odpojování ze stínové relace se uživatel přihlásí do Microsoft -> Windows -> TerminalServices -> RemoteConnectionManager -> událost operačního protokolu s „Shadow Control Session Ended“ with EventId 20507.

K této události (položka.) Musíme svázat plánovač Připojit úkol k této události), který by spustil skript fixlangauge.ps1, který vytvoří nový úkol pro plánovače a provede jej v uživatelské relaci.

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 -Soubor c: \ ps \ addlanguage.ps1" / SC DAILY
schtasks.exe / run / TN $ User
Start-Sleep-milisekundy 10000
schtasks.exe / Odstranit / TN $ Uživatel / F

Úkol spustí výše uvedený skript PS addlanguage.ps1.

Poté, co správce odpojí stínovou relaci od uživatele, je v systému spuštěna spouštěcí událost 20507 a příkaz add language se automaticky spustí zpod uživatele.