====== Настройка и проброс COM-портов под Wine в ОС Astra Linux ======
===== 1. Общие сведения =====
Документ описывает порядок настройки последовательных портов (COM) в ОС Astra Linux и их проброса в Windows-приложения, запускаемые через Wine. Рассмотрены два типа источников портов:
* **Штатные / встроенные COM-порты** — порты, реализованные на материнской плате или на плате расширения (PCI/PCIe-картах последовательных портов, мультипортовых адаптерах), которым в Linux соответствуют устройства ''%%/dev/ttyS*%%'' (а также ''%%/dev/ttyMI*%%'', ''%%/dev/ttyAP*%%'', ''%%/dev/ttyXR*%%'' и др. — в зависимости от драйвера платы расширения).
* **USB-to-COM (USB2COM) адаптеры** — преобразователи интерфейсов USB ↔ RS-232/485, которым в Linux соответствуют устройства ''%%/dev/ttyUSB*%%'' (драйверы ''%%ftdi_sio%%'', ''%%pl2303%%'', ''%%ch341%%'', ''%%cp210x%%'' и др.) или ''%%/dev/ttyACM*%%'' (устройства класса CDC-ACM).
Принцип проброса в обоих случаях одинаков: устройство Linux (''%%/dev/tty*%%'') связывается символьной ссылкой с именем COM-порта в каталоге ''%%dosdevices%%'' нужного Wine-префикса, после чего Windows-приложение видит его как ''%%COM1%%'', ''%%COM2%%'' и т. д.
**Рисунок 1 — Общая схема проброса последовательного порта из ОС Astra Linux в Windows-приложение под Wine**
{{:doc:serialflow.png?400|Общая схема проброса COM-порта в Wine}}
===== 2. Предварительные требования =====
^Параметр ^Значение ^
|Операционная система|Astra Linux Special Edition / Common Edition |
|Wine |установлен и настроен Wine-префикс целевого приложения |
|Права |пользователь должен входить в группу доступа к COM-устройствам (''%%dialout%%'')|
|Оборудование |подключённая плата расширения COM либо адаптер USB-to-COM |
===== 3. Определение устройства в системе =====
==== 3.1 Штатные COM-порты и платы расширения ====
Просмотр доступных последовательных портов, зарегистрированных ядром:
ls -l /dev/ttyS*
dmesg | grep -i ttyS
Уточнение реально присутствующих (а не зарезервированных) портов с помощью утилиты ''%%setserial%%'':
setserial -g /dev/ttyS*
Порты с типом ''%%unknown%%'' физически отсутствуют; рабочему порту соответствует тип UART (например ''%%16550A%%'') и ненулевой адрес ввода-вывода.
Для плат расширения (PCI/PCIe) проверяется, что плата определена системой и для неё загружен драйвер:
lspci | grep -i serial
dmesg | grep -iE 'tty|serial|uart'
В зависимости от платы порты могут именоваться ''%%/dev/ttyS4%%'', ''%%/dev/ttyS5%%''… либо иметь собственный префикс (например ''%%/dev/ttyAP0%%'', ''%%/dev/ttyXR0%%''). При отсутствии портов после установки платы устанавливается соответствующий драйвер (модуль ядра) от производителя.
==== 3.2 USB-to-COM адаптеры ====
Подключить адаптер и определить присвоенное ему устройство:
dmesg | grep -i tty
ls -l /dev/ttyUSB* /dev/ttyACM*
Определить параметры адаптера (производитель, модель, серийный номер) — они понадобятся для закрепления имени устройства через ''%%udev%%'':
lsusb
udevadm info -a -n /dev/ttyUSB0 | grep -E 'idVendor|idProduct|serial'
===== 4. Настройка прав доступа =====
Доступ к последовательным устройствам в Astra Linux предоставляется членам группы ''%%dialout%%''.
Проверка членства пользователя в группе:
groups $USER
Добавление пользователя в группу (при отсутствии):
sudo usermod -aG dialout $USER
Изменение вступает в силу после повторного входа в сессию (logout/login) либо после перезагрузки.
Проверка прав на конкретное устройство:
ls -l /dev/ttyS0
ls -l /dev/ttyUSB0
Устройство должно принадлежать группе ''%%dialout%%'' с правами ''%%crw-rw----%%''.
> **Замечание по мандатному контролю целостности (МКЦ) Astra Linux.** В защищённых режимах Astra Linux доступ к устройству может дополнительно ограничиваться мандатными атрибутами. При недоступности порта из-под Wine, несмотря на корректное членство в ''%%dialout%%'', следует проверить мандатные метки устройства и при необходимости согласовать уровень целостности процесса Wine и устройства.
===== 5. Закрепление имени устройства (udev) =====
Имена ''%%/dev/ttyUSB*%%'' назначаются по порядку подключения и могут изменяться при переподключении адаптера или перезагрузке. Для предсказуемого именования создаётся правило ''%%udev%%'', привязывающее устройство к стабильной символьной ссылке по уникальным признакам (''%%idVendor%%'', ''%%idProduct%%'', серийный номер).
Создать файл правила, например ''%%/etc/udev/rules.d/99-com-chromos.rules%%'':
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", \
ATTRS{serial}=="A12B3C4D", SYMLINK+="com_chromos", GROUP="dialout", MODE="0660"
Значения ''%%idVendor%%''/''%%idProduct%%''/''%%serial%%'' берутся из вывода ''%%udevadm%%'' (п. 3.2).
Применить правила без перезагрузки:
sudo udevadm control --reload-rules
sudo udevadm trigger
Проверить появление стабильной ссылки:
ls -l /dev/com_chromos
После этого вместо изменчивого ''%%/dev/ttyUSB0%%'' в пробросе используется постоянный путь ''%%/dev/com_chromos%%''. Для штатных портов плат расширения путь обычно стабилен, и отдельное правило не требуется.
**Рисунок 2 — Привязка USB-to-COM адаптера к стабильному имени устройства правилом udev**
{{:doc:serialudev.png?400| Привязка устройства правилом udev}}
===== 6. Проброс порта в Wine-префикс =====
Проброс выполняется созданием символьной ссылки в каталоге ''%%dosdevices%%'' целевого Wine-префикса. Имя ссылки (''%%com1%%'', ''%%com2%%'', …) задаёт номер COM-порта, под которым устройство будет видно Windows-приложению.
Перейти к каталогу ''%%dosdevices%%'' нужного префикса (пример для префикса win32):
WINEPREFIX=/home/user/.local/share/wineprefixes/win32
ls -l "$WINEPREFIX/dosdevices"
Создать ссылку на устройство:
# для USB-to-COM, закреплённого через udev:
ln -s /dev/com_chromos "$WINEPREFIX/dosdevices/com1"
# или напрямую на устройство:
ln -s /dev/ttyUSB0 "$WINEPREFIX/dosdevices/com1"
# для штатного порта / платы расширения:
ln -s /dev/ttyS0 "$WINEPREFIX/dosdevices/com2"
Проверить созданные ссылки:
ls -l "$WINEPREFIX/dosdevices/" | grep -i com
**Рисунок 3 — Сопоставление устройств Linux именам COM-портов Windows-приложения через каталог ''%%dosdevices%%''**
{{:doc:serialmapping.png?400| Сопоставление устройств именам COM-портов}}
===== 7. Проверка и настройка портов в Wine =====
Запустить конфигуратор Wine для нужного префикса:
WINEPREFIX=/home/user/.local/share/wineprefixes/win32 winecfg
Сопоставление портов хранится в реестре префикса в разделе ''%%[Software\\Wine\\Ports]%%''. При необходимости его можно задать напрямую, создав файл ''%%ports.reg%%'' и импортировав его:
REGEDIT4
[HKEY_LOCAL_MACHINE\Software\Wine\Ports]
"COM1"="/dev/com_chromos"
"COM2"="/dev/ttyS0"
WINEPREFIX=/home/user/.local/share/wineprefixes/win32 wine regedit ports.reg
После изменения реестра перезапустить службу Wine, чтобы порты были перечитаны:
WINEPREFIX=/home/user/.local/share/wineprefixes/win32 wineserver -k
===== 8. Проверка работоспособности порта =====
На стороне Linux — базовая проверка параметров и доступности порта:
stty -F /dev/ttyUSB0 -a
На стороне Linux — контроль обмена (например, чтение «сырых» данных):
cat /dev/ttyUSB0
На стороне Windows-приложения — выбор соответствующего COM-порта (''%%COM1%%'', ''%%COM2%%'', …) в настройках подключения к устройству и проверка связи (опрос, чтение статуса/данных). Параметры обмена (скорость, биты данных, чётность, стоп-биты) задаются средствами приложения и должны соответствовать настройкам подключаемого устройства.
===== 9. Типовые неисправности и их устранение =====
^Признак ^Возможная причина ^Действие ^
|Приложение не видит COM-порт |Не создана ссылка в ''%%dosdevices%%'' |Выполнить п. 6 для нужного префикса |
|«Доступ запрещён» при открытии порта |Пользователь не в группе ''%%dialout%%''|Выполнить п. 4, перезайти в сессию |
|Порт «пропадает» после переподключения |Изменилось имя ''%%/dev/ttyUSB*%%'' |Закрепить имя через ''%%udev%%'' (п. 5) |
|Порт платы расширения отсутствует в ''%%/dev%%''|Не загружен драйвер платы |Установить модуль ядра производителя (п. 3.1) |
|Нет обмена при корректном порту |Несовпадение скорости/параметров |Согласовать параметры порта с устройством (п. 8)|
|Порт недоступен, права корректны |Ограничения МКЦ Astra Linux |Проверить мандатные метки устройства и процесса |
===== 10. Краткая последовательность действий (чек-лист) =====
- Подключить устройство (плату расширения или USB-to-COM).
- Определить путь устройства ''%%/dev/ttyS*%%'' или ''%%/dev/ttyUSB*%%'' (раздел 3).
- Убедиться в членстве пользователя в группе ''%%dialout%%'' (раздел 4).
- При необходимости закрепить имя устройства через ''%%udev%%'' (раздел 5).
- Создать символьную ссылку ''%%comN%%'' в ''%%dosdevices%%'' Wine-префикса (раздел 6).
- Проверить/задать сопоставление портов в реестре Wine (раздел 7).
- Проверить связь с устройством из Windows-приложения (раздел 8).