Заметки

Как нормально работать с Windows по RDP с Mac

Подключиться с Mac к Windows по RDP несложно. Неудобства начинаются позже: Control + Space меняет язык только в macOS, индикатор раскладки в удалённой Windows остаётся прежним, а привычные сочетания с Command работают не всегда так, как ожидаешь.

Переназначать системное переключение языка на Mac не обязательно. В Windows App есть режим Unicode, при котором раскладкой управляет macOS, а в удалённую систему передаются уже готовые символы.

Почему раскладки Mac и Windows расходятся

При удалённом подключении участвуют две системы ввода: локальная раскладка macOS и раскладка удалённой Windows.

В режиме Scancode приложение передаёт на удалённый компьютер информацию о нажатых клавишах. Windows получает позицию клавиши и сама решает, какой символ ей соответствует.

Из-за этого переключение языка на Mac и раскладка внутри RDP могут жить отдельно. Нажимаешь привычное Control + Space, macOS переключается на русский, а удалённая Windows продолжает считать, что выбрана английская раскладка.

Переназначение клавиш внутри Windows здесь не всегда поможет. Если сочетание уже обработала macOS, удалённая система его не получит.

Чем Unicode отличается от Scancode

В Windows App для macOS есть два режима обработки клавиатуры.

Scancode передаёт на удалённый компьютер нажатия и отпускания физических клавиш. Итоговый символ определяет раскладка Windows. Такой режим нужен программам, которым важны сами клавиатурные события: некоторым виртуальным консолям, играм, старым приложениям и специфическим сочетаниям клавиш.

Unicode передаёт готовые символы. Сначала macOS с учётом активной раскладки определяет, что было введено, например а или f, а затем Windows App отправляет этот символ в удалённую сессию.

Для работы с текстом, браузером, редактором кода и документами Unicode обычно удобнее. Переключение языка остаётся на Mac и работает привычным сочетанием Control + Space.

Индикатор языка в панели задач Windows при этом может не меняться. Это нормально: раскладку выбирает macOS, а Windows получает уже сформированный текст.

Как включить Unicode в Windows App

Открой удалённое подключение и в верхнем меню macOS выбери:

Connections → Keyboard Mode → Unicode

То же самое можно сделать сочетанием:

Control + Command + U

После переключения открой в RDP обычное текстовое поле, нажми Control + Space и напечатай несколько символов. Язык должен меняться на Mac, а введённый текст — соответствовать выбранной раскладке.

Вернуться в Scancode можно через то же меню или сочетанием:

Control + Command + K

Горячие клавиши с Command

Windows App автоматически преобразует несколько привычных сочетаний macOS:

На Mac Действие в Windows
Command + C Копировать
Command + X Вырезать
Command + V Вставить
Command + A Выделить всё
Command + Z Отменить
Command + F Найти
Command + W Закрыть окно или вкладку

Command + S в официальном списке Microsoft не указан. Если сочетание работает неправильно, его можно переназначить на удалённом компьютере через AutoHotkey v2:

#Requires AutoHotkey v2.0

#s::Send "^s"

Символ # в AutoHotkey обозначает клавишу Windows, в которую обычно преобразуется Command, а ^ — клавишу Control. Скрипт должен быть запущен на удалённой Windows.

Когда Unicode не подходит

Unicode удобен для повседневного ввода, но не заменяет Scancode во всех программах. Отдельные приложения ожидают физическое событие клавиатуры, а не готовый символ. Проблемы возможны в виртуальных консолях, некоторых программах на Qt и при работе со специальными системными сочетаниями.

Если текст вводится правильно, но функциональные клавиши или специальные сочетания перестали работать, временно включи Scancode через Control + Command + K. После этого всегда можно вернуться в Unicode.

Для обычной работы схема простая: язык переключается привычным Control + Space на Mac, Windows App передаёт готовые символы, а распространённые сочетания с Command преобразует автоматически.

Документация Microsoft о клавиатуре в Windows App