1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-wslg

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
CONTRIBUTING.md 16 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 25.11.2024 08:49 c9279c8

Вклад в проект

Этот проект приветствует вклад и предложения. Большинство вкладов требуют от вас согласия с Лицензионным соглашением участника (CLA), которое подтверждает, что у вас есть право и вы фактически предоставляете нам права на использование вашего вклада. Подробнее см. по адресу https://cla.microsoft.com.

Когда вы отправляете запрос на вытягивание (pull request), бот CLA автоматически определит, нужно ли вам предоставить CLA, и соответствующим образом украсит PR (например, меткой, комментарием). Просто следуйте инструкциям, предоставленным ботом. Вам нужно будет сделать это только один раз для всех репозиториев, использующих нашу CLA.

В этом проекте принят Кодекс поведения Microsoft с открытым исходным кодом. Дополнительную информацию см. в FAQ по Кодексу поведения или свяжитесь с opencode@microsoft.com с любыми дополнительными вопросами или комментариями.

Создание системного дистрибутива WSLg

Сердцем WSLg является то, что мы называем системным дистрибутивом WSL. Здесь работают компоновщик Weston, XWayland и сервер PulseAudio. Системный дистрибутив запускает эти компоненты и проецирует их коммуникационные сокеты в пользовательский дистрибутив. Каждому пользовательскому дистрибутиву соответствует уникальный экземпляр системного дистрибутива. На диске существует единственная версия системного дистрибутива, которая создаётся в памяти при запуске пользовательского дистрибутива.

Системный дистрибутив — это, по сути, контейнер Linux, упакованный и распространяемый как виртуальный жёсткий диск (vhd). Системный дистрибутив доступен пользователю, но смонтирован только для чтения. Любые изменения, внесённые пользователем в системный дистрибутив во время его работы, будут отброшены при перезапуске WSL. Хотя пользователь может войти в системный дистрибутив, он не предназначен для использования в качестве общего пользовательского дистрибутива. Причина этого выбора связана с тем, как мы обслуживаем WSLg. При обновлении WSLg мы просто заменяем существующий системный дистрибутив новым. Если бы данные пользователя были встроены в vhd системного дистрибутива, эти данные были бы потеряны.

Для тех, кто хочет повозиться или настроить свой системный дистрибутив, мы предоставляем возможность запустить частную версию системного дистрибутива. При запуске частной версии WSLg Windows загрузит и запустит вашу частную версию и проигнорирует опубликованную Microsoft. Если вы обновите свою настройку WSL (wsl --update), опубликованный Microsoft vhd WSLg будет обновлён, но вы продолжите использовать свой частный. Вы можете переключаться между опубликованным Microsoft системным дистрибутивом WSLg и частным в любое время, хотя для этого требуется перезапуск WSL (wsl --shutdown).

Системный дистрибутив WSLg строится с помощью docker build. Мы начинаем с базового образа CBL-Mariner, устанавливаем различные пакеты, затем собираем и устанавливаем версии Weston, FreeRDP и PulseAudio из нашего зеркального репозитория. Этот репозиторий содержит Dockerfile и вспомогательные инструменты для сборки контейнера WSLg и преобразования контейнера в ext4 vhd, который Windows будет загружать как системный дистрибутив.

Инструкции по сборке

  1. Установите и запустите Docker в среде Linux или WSL 2.
    sudo apt-get update
    sudo apt install docker.io golang-go
    sudo dockerd
  1. Клонируйте проект WSLg:
    git clone https://github.com/microsoft/wslg wslg
  1. Клонируйте зеркало FreeRDP, Weston и PulseAudio. Они должны находиться в подкаталоге vendor, где вы клонируете проект wslg (например, wslg/vendor), именно здесь наш скрипт сборки ожидает найти исходный код. Обязательно проверьте ветку working каждого из этих проектов, ветка main ссылается на основной код.

    git clone https://github.com/microsoft/FreeRDP-mirror wslg/vendor/FreeRDP -b working
    git clone https://github.com/microsoft/weston-mirror wslg/vendor/weston -b working
    git clone https://github.com/microsoft/PulseAudio-mirror wslg/vendor/pulseaudio -b working
    git clone https://github.com/microsoft/DirectX-Headers.git wslg/vendor/DirectX-Headers-1.0 -b v1.608.0
    git clone https://gitlab.freedesktop.org/mesa/mesa.git wslg/vendor/mesa -b
    
  1. Создайте VHD:

    2.1 Из родительского каталога, где вы клонировали wslg, клонируйте hcsshim, который содержит tar2ext4 и будет использоваться для создания системного образа VHD.

    git clone --branch v0.8.9 --single-branch https://github.com/microsoft/hcsshim.git

    2.2 В родительском каталоге соберите и экспортируйте образ Docker:

    sudo docker build -t system-distro-x64  ./wslg  --build-arg SYSTEMDISTRO_VERSION=`git --git-dir=wslg/.git rev-parse --verify HEAD` --build-arg SYSTEMDISTRO_ARCH=x86_64
    sudo docker export `sudo docker create system-distro-x64` > system_x64.tar

    2.3 Создайте системный образ VHD с помощью tar2ext4:

    cd hcsshim/cmd/tar2ext4
    go run tar2ext4.go -vhd -i ../../../system_x64.tar -o ../../../system.vhd

    Это создаст системный образ system.vhd.

Установка частной версии системного образа WSLg

Вы можете указать WSL загрузить частную версию WSLg, добавив следующую опцию в файл .wslconfig (расположенный в C:\Users\MyUser\.wslconfig).

[wsl2]
systemDistro=C:\\Files\\system.vhd

Вам необходимо перезапустить WSL, чтобы это изменение вступило в силу. Из командной строки с повышенными привилегиями выполните команду wsl --shutdown. Когда WSL запустится снова, Windows загрузит ваш частный VHD как системный образ.

Проверка системного образа WSLg во время выполнения

Если системный образ работает неправильно или вам нужно проверить, что работает внутри системного образа, вы можете получить терминал в системном образе, выполнив следующую команду из командной строки с повышенными правами.

wsl --system -d [DistroName]

Существует экземпляр системного образа для каждого запущенного пользовательского дистрибутива. DistroName относится к имени пользовательского дистрибутива, для которого вы хотите получить парный системный образ. Если вы опустите DistroName, вы получите терминал в системном образе, связанном с вашим дистрибутивом по умолчанию.

Имейте в виду, что системный образ загружается только для чтения из своего резервного VHD. Например, если вам нужно установить инструменты (например, отладчик или редактор) в системный образ, вы должны сделать это в файле Dockerfile, который создаёт системный образ, чтобы он попал в частный VHD, который вы используете. Вы можете динамически устанавливать новые пакеты после того, как у вас появится терминал в системном образе, но любые изменения будут сброшены при перезапуске WSL.

Создание отладочной версии

Чтобы создать отладочную версию системного образа, аргумент сборки docker SYSTEMDISTRO_DEBUG_BUILD должен быть установлен и передан значение «true». Следующая команда заменит команду сборки docker в шаге 3.2.2 раздела «Инструкции по сборке».

sudo docker build -t system-distro-x64  ./wslg  --build-arg SYSTEMDISTRO_VERSION=`git --git-dir=wslg/.git rev-parse --verify HEAD` --build-arg SYSTEMDISTRO_ARCH=x86_64 --build-arg SYSTEMDISTRO_DEBUG_BUILD=true

Полученный системный образ VHD будет иметь установленные полезные пакеты разработки, такие как gdb, и все зависимости времени выполнения будут скомпилированы с типом сборки «debug» для Meson, а не «release».

Плагин mstsc

На стороне Windows WSLg использует собственный клиент RDP mstsc.exe и плагин для этого клиента, который обрабатывает интеграцию WSLg в меню «Пуск». Исходный код этого плагина доступен в открытом доступе как часть репозитория WSLg здесь.

При создании WSLg было важно обеспечить, чтобы все протоколы между Linux и Windows были полностью документированы и доступны для всех. Хотя почти всё взаимодействие по RDP между Linux/Weston и Windows проходит через стандартные и официально задокументированные протоколы Windows, связанные со стандартом RDP, нам потребовалось немного нестандартного взаимодействия между Linux и Windows для обработки интеграции в меню «Пуск». Мы думали о добавлении какого-нибудь официального протокола RDP для этого, Но это было слишком специфично для WSLg и не применимо к произвольному решению на основе RDP.

Поэтому мы решили использовать пользовательский канал RDP между сервером WSLg RDP, работающим внутри Weston, и плагином WSLg RDP, размещённым в mstsc. Такие пользовательские динамические каналы являются частью спецификации RDP, но требуют, чтобы и сервер RDP, и клиент RDP поддерживали этот канал для его использования. Это путь, который мы выбрали для WSLg, где Weston предоставляет пользовательский канал RDP для интеграции с WSLg. В духе полного документирования всех каналов связи между Linux и Windows мы делаем исходный код плагина, который обрабатывает сторону Windows этого пользовательского канала RDP доступным как часть проекта WSLg.

Этот пользовательский канал и связанный с ним плагин довольно малы и просты. В двух словах, Weston перечисляет все установленные приложения внутри пользовательского дистрибутива Linux (то есть приложения, у которых есть явный файл рабочего стола) и предоставляет этот список приложений вместе со строкой команд для их запуска и значком для их представления через этот пользовательский канал RDP. Плагин mstsc обрабатывает этот список и создаёт ссылки в меню «Пуск» Windows для этих приложений, чтобы их можно было запускать прямо из него.

Создание плагина mstsc

Исходный код для плагина имеет файл проекта Visual Studio, который можно использовать для его создания. Вы можете загрузить и установить бесплатную версию Visual Studio Community Edition для его сборки.

Регистрация частного плагина mstsc

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

Редактор реестра Windows версии 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default\AddIns\WSLDVCPlugin]
"Name"="C:\\users\\MyUser\\Privates\\WSLDVCPlugin.dll"

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-wslg.git
git@api.gitlife.ru:oschina-mirror/mirrors-wslg.git
oschina-mirror
mirrors-wslg
mirrors-wslg
main