Можно ли создать виртуальный последовательный порт в WSL, доступный за пределами среды WSL? - PullRequest
0 голосов
/ 24 января 2019

У меня есть последовательное устройство, которое я подключаю по сети, используя socat от linux box до WSL, работающего на windows box.На стороне WSL можно ли сделать виртуальный последовательный порт, созданный socat, видимым для приложения, работающего в Windows, за пределами WSL?

У меня есть решение, работающее с использованием виртуального последовательного порта HW, но мне было интересно, еслибыл способ сделать это исключительно из WSL.

1 Ответ

0 голосов
/ 24 января 2019

Это не прямые решения, но я надеюсь, что они будут полезны.

Нет ответа, но был похожий вопрос.
Ошибка передачи допустимых аргументов командной строки дляsocat


После этого кажется, что он поддерживается Build 17107 из Insider Build 17063 / 17093.
AF_UNIX входит в Windows

Unsupported \ unavailable:
Подводя итог вышесказанному, следующие функции сокетов Unix для Linux либо в настоящее время недоступны, либо не поддерживаются в реализации сокетов Unix для Windows.

  • Тип сокета дейтаграммы AF_UNIX (SOCK_DGRAM) или пакета последовательности (SOCK_SEQPACKET).
  • Вспомогательные данные: реализация сокетов Unix для Linux поддерживает передачу вспомогательных данных, таких как дескрипторы файлов (SCM_RIGHTS) или учетные данные ('SCM_CREDENTIALS`), через сокет.В реализации сокетов unix Windows нет поддержки вспомогательных данных.
  • Функция автоматической привязки (подробности см. В разделе «sockaddr_un»).
  • socketpair: API сокетов socketpair не поддерживается в Winsock 2.0.

Взаимодействие Windows / WSL с AF_UNIX

Требования и ограничения:

  1. A сокет WSL Unixможет взаимодействовать только с сокетом Win32 Unix ИЛИ с сокетом WSL Unix, но не обоими.Например, сервер сокетов WSL Unix может принимать подключения только из сокетов WSL Unix ИЛИ сокетов Win32 Unix.Итак, как определяется, какой это?Он основан на пути, с которым сокет связан или подключен, как указано в системном вызове bind или connect.Если путь к сокету Unix - это путь DrvFS (т. Е. Системные тома, смонтированные в WSL, например: / mnt / c, / mnt / d и т. Д.), То он может обмениваться данными только с сокетом Windows Unix.Если путь представляет собой путь LxFS (т. Е. Смонтированный том Linux в WSL, например: / home, / var, / usr и т. Д.), То он может взаимодействовать только с сокетами WSL Unix.
  2. Для сокета WSL Unix дляустановить соединение с сокетами Windows Unix, первой операцией после создания сокета должна быть либо привязка, либо подключение.Любая другая операция с сокетом сделает его эксклюзивным сокетом WSL Unix, который может взаимодействовать только с другими сокетами WSL Unix.
  3. Поскольку реализация сокета Windows Unix в настоящее время не поддерживает передачу вспомогательных данных, таких как SCM_RIGHTS и т. Д.,вспомогательные данные также не поддерживаются для взаимодействия Win32 <-> WSL через сокеты Unix.

socat не работает с жалобой на tsetaddr # 2552 Закрыто

Это может быть, как вы говорите, виртуальный последовательный порт HW.
Доступ к COM-порту в WSL # 1929 Закрыт

После этого, похоже, существуют различные модификации отношений сокетов.
Замечания к выпуску подсистемы Windows для Linux


Даже другие программы, использующие socat, работают, но некоторые работают нестабильно.
WSL ら ら pageant を10 す る
benpye / wsl-ssh-pageant

jstarks / npiperelay

Использовать ssh-agentв WSL с твоим ssh setup из windows 10
Как использовать GPG с YubiKey (бонус: WSL)

...