Не переключается раскладка клавиатуры на терминальном сервере

На терминальном сервере периодически ломается переключение раскладки: пользователь нажимает привычное сочетание клавиш, индикатор на панели задач меняется с RU на EN, а печатаются всё равно русские буквы. Помогает только выбор языка мышью в меню индикатора. Впервые я столкнулся с этим на Windows Server 2008 R2 (английская система с русским языковым пакетом), но похожие жалобы встречаются и на Windows Server 2019, 2022 и 2025.

Коротко: проблема возникает, когда при подключении текущая раскладка на клиенте и в профиле на сервере различаются — сервер по умолчанию берёт язык ввода с клиентского компьютера. Лечится это параметром реестра IgnoreRemoteKeyboardLayout = 1 на сервере и аккуратной настройкой языков в профиле по умолчанию, чтобы у всех пользователей был одинаковый набор раскладок и одинаковые сочетания клавиш.

Откуда берётся раскладка в RDP-сессии

При первом входе пользователя на терминальный сервер создаётся профиль, и региональные настройки он наследует из профиля по умолчанию на сервере. Исключение — язык ввода по умолчанию: по описанию Microsoft (KB924852), он берётся с клиентского компьютера, с которого установлено подключение. Клиентский RDP-клиент сообщает серверу свою раскладку, и сессия стартует с ней.

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

Решение 1. Запретить серверу брать раскладку клиента

Параметр IgnoreRemoteKeyboardLayout меняет поведение по умолчанию: при значении 1 язык ввода в сессии берётся из профиля пользователя на сервере, а не с клиента. Сделать это можно через «Редактор реестра»:

  1. Откройте regedit.exe на сервере от имени администратора.
  2. Перейдите в раздел HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout.
  3. Создайте параметр DWORD (32 бита) с именем IgnoreRemoteKeyboardLayout и значением 1.
  4. Перезагрузите сервер.

Или одной командой из командной строки с правами администратора:

reg add "HKLMSYSTEMCurrentControlSetControlKeyboard Layout" /v IgnoreRemoteKeyboardLayout /t REG_DWORD /d 1 /f

То же самое в PowerShell:

New-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetControlKeyboard Layout" `
  -Name IgnoreRemoteKeyboardLayout -PropertyType DWord -Value 1 -Force

Если серверов несколько (ферма RDS), параметр нужно задать на каждом узле сеансов. В домене удобно раздать его через «Настройки» групповой политики (Group Policy Preferences → Реестр), чтобы новые серверы получали его автоматически.

Важно понимать последствие: после этого раскладку определяет только сервер. Если в профиле пользователя на сервере нет нужного языка, взять его с клиента сервер уже не сможет. Поэтому первое решение всегда идёт в паре со вторым.

Решение 2. Настроить языки в профиле по умолчанию

Цель — чтобы любой новый пользователь получал на сервере одинаковый набор: русский и английский, с понятным порядком и одинаковыми сочетаниями клавиш.

  1. Войдите на сервер под администратором и откройте Параметры → Время и язык → Язык и регион. Добавьте русский и английский, у каждого оставьте по одной раскладке, задайте порядок.
  2. Настройте сочетание клавиш: Время и язык → Ввод → Дополнительные параметры клавиатуры → «Сочетания клавиш для языков ввода» (в интерфейсе Windows 10 и Server 2019/2022 — «Параметры языковой панели»), вкладка «Переключение клавиатуры» → «Сменить сочетание клавиш». Выберите Alt+Shift или Ctrl+Shift — главное, одинаково для всех.
  3. Скопируйте эти настройки в системный профиль и профиль новых пользователей: Панель управления → Региональные стандарты → «Дополнительно» → «Копировать параметры», отметьте оба флажка. В Windows 11 и новых версиях Windows Server для этого есть командлет Copy-UserInternationalSettingsToSystem -WelcomeScreen $True -NewUser $True.
  4. Перезагрузите сервер.

Уже существующие профили эти действия не меняют: их настройки остаются прежними. Для старых пользователей языки и сочетания клавиш придётся поправить в каждом профиле (под пользователем или скриптом входа), либо, если в профиле нет ничего ценного, пересоздать его.

Решение 3. Выровнять клиентские компьютеры

Если параметр IgnoreRemoteKeyboardLayout по каким-то причинам ставить не хочется (например, на сервере работают люди с разными языками), можно пойти от клиента: сделать так, чтобы язык по умолчанию на клиентских ПК совпадал с серверным. В Windows 10/11 это Параметры → Время и язык → Ввод → Дополнительные параметры клавиатуры → Переопределение для метода ввода по умолчанию или командлет Set-WinDefaultInputMethodOverride -InputTip "0419:00000419" (русский язык с русской раскладкой; для английского США — 0409:00000409). Минус подхода — клиентов обычно больше, чем серверов, и часть из них (домашние ноутбуки, macOS) вы не контролируете.

Таблица: симптом, причина, решение

Симптом Причина Решение
Индикатор переключился, ввод остался прежним Язык ввода сессии взят с клиента и не совпадает с профилем IgnoreRemoteKeyboardLayout = 1 + настройка профиля
В сессии лишняя раскладка, которой нет на сервере Её принёс клиент при подключении То же; удалить лишнюю раскладку из профиля
У новых пользователей только английский Профиль по умолчанию не настроен (частый случай при англоязычной установке) «Копировать параметры» для новых пользователей
У одних Alt+Shift, у других Ctrl+Shift Сочетание хранится в профиле каждого пользователя Настроить в профиле по умолчанию и в существующих профилях
Не работает Win+Пробел Сочетания с клавишей Windows уходят в сессию только при соответствующей настройке клиента Параметр «Применять комбинации клавиш Windows» в клиенте или keyboardhook в RDP-файле

Если пользователи работают через RemoteApp

Для опубликованных приложений (чаще всего 1С) логика похожая, но добавляется локальная языковая панель клиента: в окне RemoteApp доступны и клиентская раскладка по умолчанию, и языки из профиля на сервере. Это отдельная история, я разобрал её в статье «Не переключается язык ввода в RemoteApp».

Если вы не хотите сами разбираться с профилями, языковыми пакетами и реестром на каждом узле, можно взять сервер, который уже настроен и обслуживается: тарифы на аренду терминального сервера для 1С — у нас на Service4biz.

Первоисточник по параметру — статья Microsoft о том, как применяются региональные и языковые параметры на терминальном сервере (KB924852).

Частые вопросы

Работает ли IgnoreRemoteKeyboardLayout на Windows Server 2022 и 2025?

Официальная статья Microsoft написана для Windows Server 2003 SP1, отдельного описания для новых версий нет, а отзывы администраторов о Windows Server 2019 и новее встречаются разные. Поэтому включайте параметр и сразу проверяйте на тестовом пользователе с «неудобной» клиентской раскладкой. Если не помогло — проблема, скорее всего, в самом профиле (решение 2).

Нужно ли перезагружать сервер?

Да. После изменения параметра в HKLM и после копирования языковых параметров в системный профиль нужна перезагрузка. Изменения в профиле отдельного пользователя применяются после его повторного входа.

Почему у одного пользователя всё хорошо, а у другого нет?

Языковые настройки хранятся в профиле, а профили создавались в разное время, иногда — до настройки профиля по умолчанию. Сравните языки и сочетания клавиш у «хорошего» и «плохого» пользователя; при перемещаемых профилях проверьте и их.

Можно ли запретить пользователям менять раскладки?

Полностью — нет смысла: пользователю нужно переключаться между языками. Но базовую конфигурацию лучше задавать централизованно: через профиль по умолчанию для новых пользователей и скрипт входа или групповые политики для существующих.