Не переключается язык ввода в RemoteApp: причины и решение

Классическая жалоба пользователей 1С, которые работают через RemoteApp: окно программы выглядит как локальное, индикатор языка на панели задач переключается с RU на EN, а в поле ввода продолжают печататься русские буквы. Или наоборот — сочетание клавиш срабатывает через раз, и приходится щёлкать мышью по индикатору. С обычным удалённым рабочим столом такого почти не бывает, а с RemoteApp — регулярно.

Коротко: в RemoteApp раскладку «согласовывают» клиентский компьютер и профиль пользователя на сервере. Проблема почти всегда в том, что набор языков или язык ввода по умолчанию у них разный. Выровняйте языки ввода по умолчанию на клиенте и в профиле на сервере, проверьте параметры переключения на клиенте, а при необходимости заставьте сервер игнорировать клиентскую раскладку параметром IgnoreRemoteKeyboardLayout.

Почему в RemoteApp раскладка ведёт себя иначе

В полноэкранной RDP-сессии у вас есть удалённый рабочий стол со своей панелью задач и своим индикатором языка — всё переключение происходит внутри сервера. В RemoteApp удалённого рабочего стола не видно: окно 1С встроено в ваш локальный рабочий стол, а индикатор на панели задач — локальный. При этом сама программа работает на сервере и получает раскладку из серверного профиля.

В архивной статье инженеров Microsoft описано, как формируется набор языков, доступных для RemoteApp-окна: это сумма двух вещей — языка и раскладки по умолчанию на клиенте и всех языков, которые заданы в профиле пользователя на сервере. Если на клиенте первым стоит английский, а на сервере в профиле только русский (или наоборот), получаются рассинхронизация и тот самый эффект «индикатор переключился, а ввод — нет». Ещё один источник различий — профили: у одного и того же пользователя на разных серверах фермы профиль может быть создан по-разному, поэтому проблема «то есть, то нет».

Шаг 1. Проверьте языки в профиле на сервере

Зайдите на сервер обычной RDP-сессией (не RemoteApp) под проблемным пользователем и откройте Параметры → Время и язык → Язык и регион. В списке предпочитаемых языков должны быть и русский, и английский, у каждого — по своей раскладке (русская и «США»). Лишние раскладки, которые пользователь не использует, лучше удалить.

Чтобы новые пользователи сразу получали правильный набор, настройте языки у своей учётной записи и скопируйте их в профиль по умолчанию: Панель управления → Региональные стандарты → вкладка «Дополнительно» → «Копировать параметры», отметьте «Экран приветствия и системные учётные записи» и «Новые учётные записи пользователей». В Windows 11 и новых версиях Windows Server то же самое делает командлет:

Copy-UserInternationalSettingsToSystem -WelcomeScreen $True -NewUser $True

Изменения вступают в силу после перезагрузки. Уже существующие профили эта настройка не трогает — их правят у каждого пользователя.

Шаг 2. Выровняйте язык ввода по умолчанию на клиенте

На компьютере пользователя (Windows 10/11) откройте Параметры → Время и язык → Ввод → Дополнительные параметры клавиатуры. Здесь три полезных настройки:

  • Переопределение для метода ввода по умолчанию (Override for default input method) — выберите тот же язык, что первым стоит в профиле на сервере. Обычно я ставлю одинаково везде, например английский (США) или русский — главное, чтобы совпадало.
  • Позволить выбирать метод ввода для каждого окна приложения (Let me use a different input method for each app window) — при включённой опции каждое окно помнит свой язык. Для RemoteApp это часто только запутывает: попробуйте снять галочку и проверить поведение.
  • Использовать языковую панель на рабочем столе, если она доступна (Use the desktop language bar when it’s available) — по описанию Microsoft, начиная с Windows 8 / Windows Server 2012 эта опция позволяет показывать «удалённую» языковую панель, которая применяется, когда активно окно RemoteApp.

Переопределение языка по умолчанию можно задать и из PowerShell под пользователем:

Set-WinDefaultInputMethodOverride -InputTip "0409:00000409"

Здесь 0409:00000409 — английский (США) с раскладкой US, для русского языка и русской раскладки используется 0419:00000419. После изменения закройте все RemoteApp-окна и подключитесь заново: раскладка согласуется в момент подключения.

Шаг 3. Старый рецепт с реестром клиента

В Windows 7 эту проблему часто решали правкой реестра на клиенте: в разделе HKEY_USERS.DEFAULTKeyboard LayoutPreload меняли местами значения 1 и 2, чтобы первым стоял английский (00000409), а вторым — русский (00000419).

Раздел реестра HKEY_USERS.DEFAULTKeyboard LayoutPreload на клиентском компьютере

Раздел .DEFAULT — это настройки экрана входа и системных учётных записей, а не текущего пользователя. На Windows 10/11 я не правлю его руками: тот же результат даёт «Копировать параметры» в региональных стандартах (флажок «Экран приветствия и системные учётные записи») или командлет Copy-UserInternationalSettingsToSystem -WelcomeScreen $True -NewUser $False. Если же у вас ещё работают клиенты на Windows 7, старый рецепт по-прежнему применим, но саму систему пора обновлять — она давно без поддержки.

Шаг 4. Серверная настройка IgnoreRemoteKeyboardLayout

Если клиентов много и выровнять их все нельзя (разные ПК, ноутбуки сотрудников, домашние компьютеры), можно пойти с другой стороны: запретить серверу брать раскладку у клиента. По умолчанию язык ввода по умолчанию в сессии берётся с клиентского компьютера; параметр IgnoreRemoteKeyboardLayout со значением 1 заставляет сервер использовать раскладку из профиля пользователя на сервере. В описании RemoteApp-панели Microsoft отдельно отмечает, что при этом параметре клиентская раскладка по умолчанию в языковую панель не добавляется.

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

Параметр описан в статье Microsoft KB924852 (изначально для Windows Server 2003 SP1), а в материале инженеров Microsoft о языковой панели RemoteApp он упоминается уже для серверов и клиентов RDP 8.1, то есть поколения Windows Server 2012 R2. После изменения перезагрузите сервер и проверьте на тестовом пользователе. Подробнее эта настройка разобрана в статье о проблемах с переключением раскладки на терминальном сервере.

Что проверить, если ничего не помогло

Симптом Вероятная причина Решение
Проблема только у части пользователей Разные профили на сервере Сравнить языки в профилях, при необходимости пересоздать профиль
То работает, то нет у одного пользователя Ферма из нескольких серверов, профили отличаются Выровнять профиль по умолчанию на всех серверах
Индикатор переключается, ввод нет Разный язык по умолчанию на клиенте и сервере Шаг 2 или IgnoreRemoteKeyboardLayout
Не работает сочетание Win+Пробел Сочетания с клавишей Windows обрабатываются по настройке «Применять комбинации клавиш Windows» Использовать Alt+Shift или Ctrl+Shift, проверить параметр keyboardhook в RDP-файле

Бывает, что проще не бороться с десятком разных клиентских машин, а дать пользователям единообразную среду. Если 1С через RemoteApp вам нужна, но поддерживать сервер самостоятельно не хочется, можно воспользоваться арендой 1С в облаке — такие серверы мы сдаём в Service4biz.

Описание того, как формируется языковая панель для RemoteApp, есть в архиве блога Microsoft (на французском) и в официальном описании параметров RDP-файла: Supported RDP properties.

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

Почему в полноэкранной сессии всё работает, а в RemoteApp нет?

В полноэкранной сессии есть удалённая панель задач и переключение идёт внутри сервера. В RemoteApp индикатор языка локальный, а программа — удалённая, и их языковые настройки должны совпадать. Отсюда и рассинхронизация.

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

Нет. На Windows 10/11 то же самое делается в «Дополнительных параметрах клавиатуры» или командлетом Set-WinDefaultInputMethodOverride, а в домене — скриптом входа. Если клиентов много, практичнее серверный параметр IgnoreRemoteKeyboardLayout.

Влияет ли на это версия 1С?

Как правило, нет: раскладку программе отдаёт Windows, и клиент 1С в RemoteApp обычно ведёт себя так же, как «Блокнот», опубликованный через RemoteApp. Удобный способ проверки — опубликовать notepad.exe и посмотреть, повторяется ли проблема.

Нужно ли перезагружать клиентский компьютер?

После изменения языка по умолчанию у пользователя обычно хватает закрыть все RemoteApp-окна и подключиться заново. После копирования параметров на экран приветствия или правки .DEFAULT нужна перезагрузка.