<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Development Environment on kenji.blog</title><link>http://kenji.blog/ru/tags/development-environment/</link><description>Recent content in Development Environment on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ru</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 12 Sep 2026 23:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/ru/tags/development-environment/index.xml" rel="self" type="application/rss+xml"/><item><title>Идеальное руководство по настройке среды разработки WSL2 (Windows Subsystem for Linux)</title><link>http://kenji.blog/ru/p/wsl2-ultimate-development-setup-guide/</link><pubDate>Sat, 12 Sep 2026 23:00:00 +0900</pubDate><guid>http://kenji.blog/ru/p/wsl2-ultimate-development-setup-guide/</guid><description>&lt;img src="http://kenji.blog/p/wsl2-ultimate-development-setup-guide/img/eyecatch.jpg" alt="Featured image of post Идеальное руководство по настройке среды разработки WSL2 (Windows Subsystem for Linux)" />&lt;p>WSL2 (Windows Subsystem for Linux 2), предоставляющая нативную среду разработки Linux в Windows, стала незаменимым инструментом в современной разработке программного обеспечения. Однако существует огромная разница в производительности и удобстве разработки между использованием её по умолчанию и правильной настройкой с пониманием архитектуры.&lt;/p>
&lt;p>В этой статье мы подробно, в объёме более 10 000 символов, рассмотрим все этапы создания &amp;ldquo;идеальной среды разработки&amp;rdquo;, востребованной профессиональными инженерами: начиная с объяснения архитектуры, лежащей в основе WSL2, и заканчивая настройками для максимальной производительности, созданием комфортной терминальной среды, бесшовной интеграцией с Docker и VS Code, а также расширенными сетевыми настройками.&lt;/p>
&lt;hr>
&lt;h2 id="1-архитектура-wsl2-и-эволюция-от-wsl1">1. Архитектура WSL2 и эволюция от WSL1
&lt;/h2>&lt;p>Чтобы полностью раскрыть потенциал WSL2, важно сначала понять её внутреннюю структуру. В оригинальной WSL (WSL1) и WSL2 подходы к запуску бинарных файлов Linux на Windows принципиально отличаются.&lt;/p>
&lt;h3 id="wsl1-слой-трансляции-системных-вызовов">WSL1: Слой трансляции системных вызовов
&lt;/h3>&lt;p>WSL1 использовала механизм трансляции (перевода) системных вызовов Linux в API Windows NT в реальном времени. Поскольку виртуальная машина (ВМ) не использовалась, преимуществом были очень низкие накладные расходы на ресурсы. Однако было сложно полностью эмулировать сложные системные вызовы, такие как операции ввода-вывода файловой системы, что приводило к катастрофическому падению производительности при обработке большого количества мелких файлов, особенно в таких задачах, как &lt;code>npm install&lt;/code> в Node.js или операции с репозиториями Git.&lt;/p>
&lt;h3 id="wsl2-легковесная-служебная-вм-и-полноценное-ядро-linux">WSL2: Легковесная служебная ВМ и полноценное ядро Linux
&lt;/h3>&lt;p>В WSL2 архитектура была полностью переработана: теперь настоящее ядро Linux, собранное Microsoft, работает напрямую на &lt;strong>&amp;ldquo;легковесной служебной ВМ&amp;rdquo; (Lightweight Utility VM), использующей подмножество архитектуры Hyper-V&lt;/strong>. Это гарантирует 100% совместимость системных вызовов, а использование виртуального диска (VHDX) с нативной файловой системой Linux ext4 кардинально повысило производительность файлового ввода-вывода по сравнению с WSL1.&lt;/p>
&lt;p>Следующая диаграмма Mermaid показывает структурные различия между WSL1 и WSL2.&lt;/p>
&lt;pre class="mermaid">
flowchart TD
subgraph &amp;#34;Среда ОС Windows&amp;#34;
A[&amp;#34;Ядро Windows NT&amp;#34;]
A --&amp;gt; F[&amp;#34;Файловая система NTFS (Диск C:)&amp;#34;]
end
subgraph &amp;#34;Архитектура WSL2&amp;#34;
B[&amp;#34;Гипервизор Hyper-V&amp;#34;]
B --&amp;gt; C[&amp;#34;Легковесная служебная ВМ&amp;#34;]
C --&amp;gt; D[&amp;#34;Ядро Linux (Microsoft)&amp;#34;]
D --&amp;gt; E[&amp;#34;Пространство пользователя Ubuntu (glibc, bash и т.д.)&amp;#34;]
D --&amp;gt; G[&amp;#34;Виртуальный диск ext4 (.vhdx)&amp;#34;]
end
A -.-&amp;gt;|&amp;#34;Сетевой общий ресурс по протоколу Plan 9 (9P)&amp;#34;| D
style B fill:#f9f,stroke:#333,stroke-width:2px
style D fill:#bbf,stroke:#333,stroke-width:2px
&lt;/pre>
&lt;p>Важный урок из этой структуры: &lt;strong>&amp;ldquo;Доступ к файлам на стороне Linux (внутри VHDX) работает чрезвычайно быстро, но доступ к файлам на стороне Windows (&lt;code>/mnt/c/&lt;/code>) очень медленный, так как осуществляется через протокол 9P&amp;rdquo;&lt;/strong>. Исходный код проекта обязательно должен располагаться в домашнем каталоге на стороне WSL (&lt;code>~&lt;/code>).&lt;/p>
&lt;hr>
&lt;h2 id="2-математический-анализ-производительности-почему-wsl2-такая-быстрая">2. Математический анализ производительности: Почему WSL2 такая быстрая?
&lt;/h2>&lt;p>Давайте количественно оценим прирост производительности WSL2 с использованием математической модели. Одной из самых ресурсоемких операций в разработке программного обеспечения является обработка большого количества файлового ввода-вывода (например, установка библиотек или сборка).&lt;/p>
&lt;p>Общее время выполнения некоторого процесса $T_{total}$ выражается как сумма времени вычислений процессора $T_{compute}$ и времени дискового ввода-вывода $T_{io}$.&lt;/p>
$$ T_{total} = T_{compute} + T_{io} $$&lt;p>В случае WSL1 возникают накладные расходы на преобразование операций Linux в операции NTFS, поэтому время ввода-вывода моделируется следующим образом. Где $n$ — количество файловых операций, $t_{ntfs\_syscall_i}$ — время выполнения системного вызова на стороне Windows, а $t_{trans_i}$ — накладные расходы слоя трансляции.&lt;/p>
$$ T_{wsl1\_io} = \sum_{i=1}^{n} (t_{ntfs\_syscall_i} + t_{trans_i}) $$&lt;p>С другой стороны, в случае WSL2 ядро напрямую обращается к файловой системе ext4, поэтому накладные расходы составляют лишь незначительную задержку от виртуализации $t_{virt_i}$.&lt;/p>
$$ T_{wsl2\_io} = \sum_{i=1}^{n} (t_{ext4_i} + t_{virt_i}) $$&lt;p>В обычных файловых системах $t_{ext4} \ll t_{ntfs\_syscall} + t_{trans}$, поэтому когда $n$ очень велико (сотни тысяч файловых операций), разница во времени ввода-вывода между WSL1 и WSL2 растет экспоненциально.&lt;/p>
&lt;p>Кроме того, если обозначить долю накладных расходов на вычисления CPU в виртуализированной среде как $\rho$, то благодаря современной аппаратной поддержке виртуализации (Intel VT-x / AMD-V) значение $\rho \approx 0.01 \sim 0.03$ (около 1–3%). Следовательно, даже в чисто вычислительных задачах производительность составляет от $97\% \sim 99\%$ и не уступает нативной среде Linux.&lt;/p>
&lt;hr>
&lt;h2 id="3-установка-и-базовая-настройка">3. Установка и базовая настройка
&lt;/h2>&lt;p>В Windows 10/11 установка WSL2 стала очень простой. Достаточно открыть PowerShell от имени администратора и выполнить следующую команду.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># По умолчанию установит WSL2 и Ubuntu&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-install&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Для указания конкретного дистрибутива&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Можно проверить с помощью wsl --list --online&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-install&lt;/span> &lt;span class="n">-d&lt;/span> &lt;span class="n">Ubuntu&lt;/span>&lt;span class="p">-&lt;/span>&lt;span class="mf">24.04&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>После установки и перезагрузки при первом запуске вам будет предложено создать имя пользователя UNIX и пароль. Этот пользователь не зависит от пользователя Windows и действителен только внутри WSL.&lt;/p>
&lt;p>Если вы уже используете WSL1, вы можете конвертировать её в WSL2 с помощью следующей команды:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Конвертировать существующий дистрибутив в WSL2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-set-version&lt;/span> &lt;span class="n">Ubuntu&lt;/span> &lt;span class="mf">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Установить WSL2 по умолчанию для новых дистрибутивов&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-set-default-version&lt;/span> &lt;span class="mf">2&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="4-секреты-управления-ресурсами-wslconfig-и-wslconf">4. Секреты управления ресурсами: .wslconfig и wsl.conf
&lt;/h2>&lt;p>Одной из главных ловушек WSL2 является &amp;ldquo;безграничное потребление памяти (разрастание процесса Vmmem)&amp;rdquo;. Поскольку WSL2 использует страничный кэш ядра Linux, каждая операция ввода-вывода безостановочно поглощает память хоста (Windows). Чтобы предотвратить это, обязательно нужно ограничить ресурсы через файлы конфигурации.&lt;/p>
&lt;p>Конфигурационные файлы WSL2 разделены на два типа: &lt;strong>&lt;code>.wslconfig&lt;/code> (влияет на всю Windows)&lt;/strong> и &lt;strong>&lt;code>wsl.conf&lt;/code> (влияет на внутреннюю часть каждого дистрибутива)&lt;/strong>.&lt;/p>
&lt;h3 id="41-wslconfig-на-стороне-windows">4.1. .wslconfig (на стороне Windows)
&lt;/h3>&lt;p>Создайте файл в каталоге профиля пользователя Windows (&lt;code>C:\Users\&amp;lt;Имя_пользователя&amp;gt;\.wslconfig&lt;/code>), чтобы управлять выделением ресурсов для ВМ.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-ini" data-lang="ini">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># C:\Users\&amp;lt;Имя_пользователя&amp;gt;\.wslconfig&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[wsl2]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Максимальный объем памяти, выделяемый ВМ. Рекомендуется около 50%–75% от общей памяти хоста.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">memory&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">16GB&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Количество используемых ядер процессора (если не указано, используются все ядра).&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">processors&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Размер файла подкачки (swap).&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">swap&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">8GB&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Расположение файла подкачки (если хотите сэкономить место на диске C).&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># swapfile=D:\\wsl\\swap.vhdx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Включить переадресацию localhost (для доступа к WSL из Windows через localhost).&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">localhostForwarding&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Автоматически освобождать память (только для Windows 11).&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Динамически освобождает страничный кэш, предотвращая разрастание Vmmem.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">autoMemoryReclaim&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">dropcache&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[experimental]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Расширенные сетевые функции, доступные в Windows 11 22H2 и новее.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Включает поддержку IPv6 и использование одного и того же IP-адреса между WSL и Windows.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">networkingMode&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">mirrored&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">dnsTunneling&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">firewall&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">autoProxy&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="42-wslconf-на-стороне-linux">4.2. wsl.conf (на стороне Linux)
&lt;/h3>&lt;p>Отредактируйте &lt;code>/etc/wsl.conf&lt;/code> внутри WSL, чтобы управлять поведением конкретного дистрибутива.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-ini" data-lang="ini">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># /etc/wsl.conf (Редактируется внутри WSL)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[network]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Отключить автоматическую генерацию /etc/resolv.conf при запуске WSL.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Полезно, если вы хотите установить собственный DNS (например, 8.8.8.8).&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">generateResolvConf&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">false&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Установить собственное имя хоста.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">hostname&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">WSL-DevNode&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[automount]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Настройки монтирования дисков Windows.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">enabled&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">options&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;metadata,uid=1000,gid=1000,umask=022&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Изменить точку монтирования диска C с /mnt/c на /c (сокращает пути).&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">root&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[boot]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Включить systemd (WSL 0.67.6 и новее).&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Позволяет нативно запускать snap и различные демоны (например, Docker).&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">systemd&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[user]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Пользователь для входа по умолчанию.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">default&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">kenji&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Чтобы применить эти настройки, необходимо выполнить команду &lt;code>wsl --shutdown&lt;/code> в PowerShell, полностью остановить ВМ WSL, а затем перезапустить её.&lt;/p>
&lt;hr>
&lt;h2 id="5-идеальная-терминальная-среда-zsh--powerlevel10k">5. Идеальная терминальная среда: Zsh + Powerlevel10k
&lt;/h2>&lt;p>bash по умолчанию не способствует высокой продуктивности. Мы создадим мощную строку приглашения, объединив Zsh, который может похвастаться мощным автодополнением и отличной читаемостью, со сверхбыстрой темой &amp;ldquo;Powerlevel10k&amp;rdquo;.&lt;/p>
&lt;h3 id="51-установка-и-настройка-windows-terminal">5.1. Установка и настройка Windows Terminal
&lt;/h3>&lt;p>Установите &amp;ldquo;Windows Terminal&amp;rdquo; из Microsoft Store. Откройте настройки JSON (&lt;code>settings.json&lt;/code>), установите WSL (Ubuntu) в качестве профиля по умолчанию и измените шрифт на Nerd Font, подходящий для разработки (например, &lt;code>HackGen Console NF&lt;/code> или &lt;code>MesloLGS NF&lt;/code>).&lt;/p>
&lt;h3 id="52-установка-zsh-и-oh-my-zsh">5.2. Установка Zsh и Oh My Zsh
&lt;/h3>&lt;p>Выполните следующие команды в терминале WSL:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Обновление пакетов и установка Zsh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt update &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> sudo apt upgrade -y
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install -y zsh git curl
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Запуск скрипта установки Oh My Zsh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sh -c &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="53-установка-powerlevel10k-и-плагинов">5.3. Установка Powerlevel10k и плагинов
&lt;/h3>&lt;p>Мы установим плагины для дальнейшего расширения Zsh (подсветка синтаксиса и автодополнение ввода) и тему Powerlevel10k.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Powerlevel10k&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone --depth&lt;span class="o">=&lt;/span>&lt;span class="m">1&lt;/span> https://github.com/romkatv/powerlevel10k.git &lt;span class="si">${&lt;/span>&lt;span class="nv">ZSH_CUSTOM&lt;/span>&lt;span class="k">:-&lt;/span>&lt;span class="nv">$HOME&lt;/span>&lt;span class="p">/.oh-my-zsh/custom&lt;/span>&lt;span class="si">}&lt;/span>/themes/powerlevel10k
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># zsh-autosuggestions&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone https://github.com/zsh-users/zsh-autosuggestions &lt;span class="si">${&lt;/span>&lt;span class="nv">ZSH_CUSTOM&lt;/span>&lt;span class="k">:-&lt;/span>&lt;span class="p">~/.oh-my-zsh/custom&lt;/span>&lt;span class="si">}&lt;/span>/plugins/zsh-autosuggestions
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># zsh-syntax-highlighting&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone https://github.com/zsh-users/zsh-syntax-highlighting.git &lt;span class="si">${&lt;/span>&lt;span class="nv">ZSH_CUSTOM&lt;/span>&lt;span class="k">:-&lt;/span>&lt;span class="p">~/.oh-my-zsh/custom&lt;/span>&lt;span class="si">}&lt;/span>/plugins/zsh-syntax-highlighting
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Отредактируйте &lt;code>~/.zshrc&lt;/code>, чтобы включить тему и плагины:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Изменения в ~/.zshrc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">ZSH_THEME&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;powerlevel10k/powerlevel10k&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Добавьте в массив плагинов&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">plugins&lt;/span>&lt;span class="o">=(&lt;/span>git zsh-autosuggestions zsh-syntax-highlighting&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Сохраните изменения и выполните &lt;code>source ~/.zshrc&lt;/code>, запустится мастер настройки Powerlevel10k (&lt;code>p10k configure&lt;/code>). Следуйте инструкциям на экране, чтобы настроить строку приглашения на свой вкус (стиль приглашения, наличие иконок, отображаемая информация и т.д.). Имя ветки Git и статус, версия Node.js, время выполнения команд будут отображаться в реальном времени, что значительно повысит эффективность разработки.&lt;/p>
&lt;hr>
&lt;h2 id="6-vs-code-remote---бесшовная-интеграция-с-wsl">6. VS Code Remote - Бесшовная интеграция с WSL
&lt;/h2>&lt;p>В разработке на WSL2 механизм бесшовного доступа к файлам внутри WSL из IDE (Visual Studio Code), установленной на Windows, обеспечивается расширением &amp;ldquo;Remote - WSL&amp;rdquo;.&lt;/p>
&lt;h3 id="объяснение-архитектуры">Объяснение архитектуры
&lt;/h3>&lt;p>Следующая диаграмма последовательности показывает, как VS Code взаимодействует с WSL2.&lt;/p>
&lt;pre class="mermaid">
sequenceDiagram
autonumber
participant U as &amp;#34;Разработчик&amp;#34;
participant V as &amp;#34;VS Code UI (Windows)&amp;#34;
participant S as &amp;#34;VS Code Server (WSL2)&amp;#34;
participant F as &amp;#34;Файловая система ext4 (WSL2)&amp;#34;
U-&amp;gt;&amp;gt;V: &amp;#34;Ввести `code .` в терминале WSL&amp;#34;
V-&amp;gt;&amp;gt;S: &amp;#34;Установить RPC-соединение через Vsock&amp;#34;
Note over V,S: Общение через сокеты Hyper-V вместо TCP/IP
S-&amp;gt;&amp;gt;F: &amp;#34;Чтение исходных файлов / Запуск линтера&amp;#34;
F--&amp;gt;&amp;gt;S: &amp;#34;Возврат данных и результатов анализа&amp;#34;
S--&amp;gt;&amp;gt;V: &amp;#34;Потоковая передача результатов Language Server в интерфейс&amp;#34;
V--&amp;gt;&amp;gt;U: &amp;#34;Отображение подсветки синтаксиса и ошибок&amp;#34;
&lt;/pre>
&lt;p>VS Code на стороне Windows работает как простой &amp;ldquo;тонкий клиент (UI)&amp;rdquo;, в то время как все тяжелые процессы, такие как Language Server, отладчик и выполнение терминала, обрабатываются &amp;ldquo;сервером VS Code&amp;rdquo; на стороне WSL. Благодаря этому вы можете поддерживать чистоту среды на стороне WSL без необходимости устанавливать Node.js или Python на Windows.&lt;/p>
&lt;h3 id="обязательные-настройки-vs-code">Обязательные настройки VS Code
&lt;/h3>&lt;p>Из раздела &amp;ldquo;Расширения&amp;rdquo; в VS Code установите &lt;strong>&amp;ldquo;WSL&amp;rdquo; (ms-vscode-remote.remote-wsl)&lt;/strong>. После этого просто перейдите в директорию вашего проекта в терминале WSL и выполните &lt;code>code .&lt;/code>, и VS Code на стороне Windows запустится с открытой директорией.&lt;/p>
&lt;p>&lt;strong>Важное замечание (проблема символов переноса строки):&lt;/strong>
Символы переноса строки в Windows и Linux отличаются (в Windows — &lt;code>CRLF&lt;/code>, в Linux — &lt;code>LF&lt;/code>). При разработке в WSL обязательно унифицируйте настройки &lt;code>core.autocrlf&lt;/code> в Git и настройки файлов по умолчанию в VS Code на &lt;code>LF&lt;/code>. Игнорирование этого приведет к загадочным ошибкам при выполнении скриптов оболочки или запуске контейнеров Docker.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Настройка символов переноса строки Git на стороне WSL&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git config --global core.autocrlf input
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Также добавьте следующее в &lt;code>settings.json&lt;/code> (Удаленные настройки) VS Code:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;files.eol&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;\n&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;terminal.integrated.defaultProfile.linux&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;zsh&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="7-docker-desktop-и-оптимизация-интеграции-с-wsl2">7. Docker Desktop и оптимизация интеграции с WSL2
&lt;/h2>&lt;p>В среде WSL2 существует два основных подхода к использованию Docker:&lt;/p>
&lt;ol>
&lt;li>Установить &lt;strong>Docker Desktop for Windows&lt;/strong> и включить функцию интеграции WSL2.&lt;/li>
&lt;li>Установить &lt;strong>нативный Docker Engine&lt;/strong> напрямую внутри WSL2 (например, Ubuntu).&lt;/li>
&lt;/ol>
&lt;h3 id="подход-1-docker-desktop-рекомендуется">Подход 1: Docker Desktop (рекомендуется)
&lt;/h3>&lt;p>Этот вариант рекомендуется в большинстве случаев из-за простоты управления через GUI и прозрачного доступа к контейнерам между Windows и WSL. Проверьте следующие настройки (Settings) в Docker Desktop:&lt;/p>
&lt;ul>
&lt;li>Установите галочку &lt;code>General&lt;/code> -&amp;gt; &lt;code>Use the WSL 2 based engine&lt;/code>.&lt;/li>
&lt;li>Перейдите в &lt;code>Resources&lt;/code> -&amp;gt; &lt;code>WSL Integration&lt;/code> -&amp;gt; установите галочку на &lt;code>Enable integration with my default WSL distro&lt;/code> и включите переключатель для используемого дистрибутива (Ubuntu).&lt;/li>
&lt;/ul>
&lt;p>Теперь команду &lt;code>docker&lt;/code> можно будет вызывать прямо из терминала WSL2, а связь с демоном Docker будет осуществляться через специальную легковесную ВМ (&lt;code>docker-desktop&lt;/code> и &lt;code>docker-desktop-data&lt;/code>), управляемую Docker Desktop.&lt;/p>
&lt;h3 id="подход-2-прямая-установка-нативного-docker-engine">Подход 2: Прямая установка нативного Docker Engine
&lt;/h3>&lt;p>Если у вас есть корпоративные сетевые ограничения (например, чтобы избежать платы за Docker Desktop) или вы хотите минимизировать накладные расходы до предела, включите &lt;code>systemd&lt;/code> в &lt;code>/etc/wsl.conf&lt;/code> и установите Docker напрямую, как на обычном сервере Ubuntu.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Фрагмент официальной инструкции по установке Docker для WSL2 Ubuntu с включенным systemd&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt-get update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt-get install ca-certificates curl gnupg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo install -m &lt;span class="m">0755&lt;/span> -d /etc/apt/keyrings
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl -fsSL https://download.docker.com/linux/ubuntu/gpg &lt;span class="p">|&lt;/span> sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo chmod a+r /etc/apt/keyrings/docker.gpg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Добавление репозитория&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> &lt;span class="s2">&amp;#34;deb [arch=&amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>dpkg --print-architecture&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34; signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>. /etc/os-release &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nb">echo&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$VERSION_CODENAME&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34; stable&amp;#34;&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt-get update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Добавьте текущего пользователя в группу docker (чтобы запускать команды без sudo)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo usermod -aG docker &lt;span class="nv">$USER&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>После перезагрузки &lt;code>systemctl start docker&lt;/code> будет работать точно так же, как в нативной среде Linux, обеспечивая высокую производительность.&lt;/p>
&lt;hr>
&lt;h2 id="8-интеграция-ssh-ключей-бесшовная-аутентификация-в-windows-и-wsl">8. Интеграция SSH ключей: Бесшовная аутентификация в Windows и WSL
&lt;/h2>&lt;p>При клонировании через SSH в Git или подключении к удаленным серверам управлять отдельными SSH-ключами для Windows и WSL очень неудобно. Чтобы совместить безопасность и удобство, мы настроим мост (переадресацию) от SSH-агента, работающего на стороне Windows (или менеджера паролей, такого как 1Password), в сторону WSL.&lt;/p>
&lt;p>Здесь мы рассмотрим самый современный и безопасный подход: использование &lt;strong>функции SSH-агента 1Password&lt;/strong> или &lt;strong>OpenSSH Authentication Agent для Windows&lt;/strong> и переадресацию их в UNIX-сокет домена в WSL2 с помощью &lt;code>npiperelay&lt;/code> и &lt;code>socat&lt;/code>.&lt;/p>
&lt;h3 id="переадресация-сокета-ssh-agent">Переадресация сокета ssh-agent
&lt;/h3>&lt;p>Обычно SSH-агент в Windows предоставляется как Named Pipe (именованный канал), и его нужно преобразовать в файл сокета для WSL. Это легко сделать с помощью &lt;code>wsl-ssh-agent&lt;/code> или функций, предлагаемых 1Password.&lt;/p>
&lt;p>В настройках 1Password перейдите в &amp;ldquo;Developer&amp;rdquo; и включите &amp;ldquo;Использовать SSH-агент&amp;rdquo;.
Затем добавьте следующие настройки в &lt;code>~/.zshrc&lt;/code> или &lt;code>~/.bashrc&lt;/code> на стороне WSL, чтобы автоматически привязывать сокет при входе в систему.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Добавление в ~/.zshrc (Пример при использовании SSH-агента 1Password)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">SSH_AUTH_SOCK&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nv">$HOME&lt;/span>/.ssh/agent.sock
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Если сокет не существует при запуске WSL или процесс не привязан, используйте socat и npiperelay для переадресации&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">ALREADY_RUNNING&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="k">$(&lt;/span>ps -aux &lt;span class="p">|&lt;/span> grep &lt;span class="s2">&amp;#34;[n]piperelay.exe -ei -s //./pipe/openssh-ssh-agent&amp;#34;&lt;/span> &lt;span class="p">|&lt;/span> wc -l&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> &lt;span class="nv">$ALREADY_RUNNING&lt;/span> -eq &lt;span class="m">0&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> -S &lt;span class="nv">$SSH_AUTH_SOCK&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> rm &lt;span class="nv">$SSH_AUTH_SOCK&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Запустите socat в фоновом режиме, чтобы соединить Named Pipe Windows с UNIX-сокетом WSL&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">(&lt;/span>setsid socat UNIX-LISTEN:&lt;span class="nv">$SSH_AUTH_SOCK&lt;/span>,fork EXEC:&lt;span class="s2">&amp;#34;npiperelay.exe -ei -s //./pipe/openssh-ssh-agent&amp;#34;&lt;/span>,nofork &lt;span class="p">&amp;amp;&lt;/span>&lt;span class="o">)&lt;/span> &amp;gt;/dev/null 2&amp;gt;&lt;span class="p">&amp;amp;&lt;/span>&lt;span class="m">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>*Вам потребуется предварительно установить &lt;code>npiperelay.exe&lt;/code> в Windows и добавить его в переменную среды PATH.&lt;/p>
&lt;p>После завершения настройки при выполнении команды &lt;code>ssh-add -l&lt;/code> в терминале WSL вы увидите список публичных ключей SSH, зарегистрированных в 1Password или на стороне Windows. Это позволяет безопасно проходить аутентификацию без необходимости копировать файлы секретных ключей внутрь WSL.&lt;/p>
&lt;hr>
&lt;h2 id="9-обслуживание-оптимизация-сжатие-раздутого-vhdx">9. Обслуживание: Оптимизация (сжатие) раздутого VHDX
&lt;/h2>&lt;p>Один из самых больших недостатков WSL2 заключается в том, что &amp;ldquo;размер файла виртуального диска (.vhdx) в Windows не уменьшается автоматически даже после удаления образов Docker или удаления файлов&amp;rdquo;. В течение длительной разработки размер файла ext4.vhdx может вырасти до десятков или сотен гигабайт.&lt;/p>
&lt;p>Чтобы освободить дисковое пространство, необходимо регулярно оптимизировать (Compact) VHDX со стороны Windows.&lt;/p>
&lt;ol>
&lt;li>Сначала полностью завершите работу WSL:
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-shutdown&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>Откройте PowerShell с правами администратора и выполните следующую команду &lt;code>diskpart&lt;/code> или команду &lt;code>Optimize-VHD&lt;/code> из модуля Hyper-V (последняя доступна, только если включен Hyper-V).&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Если доступен модуль Hyper-V&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Optimize-VHD&lt;/span> &lt;span class="n">-Path&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$env:LOCALAPPDATA&lt;/span>&lt;span class="s2">\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx&amp;#34;&lt;/span> &lt;span class="n">-Mode&lt;/span> &lt;span class="n">Full&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># При использовании diskpart&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">diskpart&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Введите команды интерактивно в открывшемся окне&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="nb">select &lt;/span>&lt;span class="n">vdisk&lt;/span> &lt;span class="n">file&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;C:\Users\&amp;lt;Имя_пользователя&amp;gt;\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">attach&lt;/span> &lt;span class="n">vdisk&lt;/span> &lt;span class="n">readonly&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">compact&lt;/span> &lt;span class="n">vdisk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">detach&lt;/span> &lt;span class="n">vdisk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">exit&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Регулярно выполняя эту операцию, вы сможете вернуть впустую израсходованное пространство на диске C.&lt;/p>
&lt;hr>
&lt;h2 id="10-заключение">10. Заключение
&lt;/h2>&lt;p>WSL2 полностью переросла рамки &amp;ldquo;просто бонуса Linux для Windows&amp;rdquo; и превратилась в мощную платформу разработки, не уступающую, а порой и превосходящую MacOS или нативные компьютеры на Linux.&lt;/p>
&lt;p>Применив все описанные здесь настройки (оптимизацию ресурсов через &lt;code>.wslconfig&lt;/code>, улучшение терминала с помощью Zsh + Powerlevel10k, прозрачный доступ с помощью VS Code Remote, а также настройку интеграции SSH и обслуживание VHDX), вы получите &amp;ldquo;идеальную среду разработки&amp;rdquo; — быструю, безопасную и не вызывающую стресса.&lt;/p>
&lt;p>Настройка среды требует некоторых усилий, но как только всё будет настроено, ваша продуктивность как инженера обязательно возрастет. Не стесняйтесь использовать это руководство в качестве основы и исследовать дальнейшие настройки в соответствии с требованиями ваших проектов и вашими предпочтениями.&lt;/p></description></item></channel></rss>