<?xml version='1.0' encoding='utf-8' ?>

<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>uzverss</title>
  <link>https://uzverss.dreamwidth.org/</link>
  <description>uzverss - Dreamwidth Studios</description>
  <lastBuildDate>Sat, 22 Aug 2026 19:36:13 GMT</lastBuildDate>
  <generator>LiveJournal / Dreamwidth Studios</generator>
  <lj:journal>uzverss</lj:journal>
  <lj:journaltype>personal</lj:journaltype>
  <image>
    <url>https://v2.dreamwidth.org/2560769/1123271</url>
    <title>uzverss</title>
    <link>https://uzverss.dreamwidth.org/</link>
    <width>64</width>
    <height>64</height>
  </image>

<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/5879495.html</guid>
  <pubDate>Sat, 22 Aug 2026 19:36:13 GMT</pubDate>
  <title>среда рабочего стола, часть 2</title>
  <link>https://uzverss.dreamwidth.org/5879495.html</link>
  <description>&lt;br /&gt;&lt;br&gt;&lt;img src=&quot;https://lonelymachines.org/screenshots/sleep_shot.jpg&quot; width=&quot;438&quot;&gt;&lt;br /&gt;&lt;br&gt;&lt;a href=&quot;https://uzverss.livejournal.com/95250.html&quot;&gt;среда рабочего стола, часть 1 LJ&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5849645.html&quot;&gt;среда рабочего стола, часть 1 DW&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;a href=&quot;https://uzverss.livejournal.com/116285.html&quot;&gt;среда рабочего стола часть 3  LJ&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5868483.html&quot;&gt;среда рабочего стола часть 3 DW&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;&lt;b&gt;Windows&lt;/b&gt;&lt;/summary&gt;&lt;br /&gt;&lt;h3&gt;Litestep&lt;/h3&gt;&lt;br /&gt;&lt;a href=&quot;https://sysadmins.ru/topic254684.html&quot;&gt;Litestep как альтернативный рабочий стол на TS&lt;/a&gt;&lt;br /&gt;Создание тем для LiteStep&lt;br /&gt;&lt;a href=&quot;http://litestep.info/overview/litestep-manual.html&quot;&gt;http://litestep.info/overview/litestep-manual.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;blackbox&lt;/h3&gt;&lt;br /&gt;&lt;a href=&quot;https://bb4win.sourceforge.net/bblean/&quot;&gt;https://bb4win.sourceforge.net/bblean/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://blackbox4windows.com&quot;&gt;http://blackbox4windows.com&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://spoonm.org/bbzero/&quot;&gt;https://spoonm.org/bbzero/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.boxshots.org/&quot;&gt;http://www.boxshots.org/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.boxshots.org/styles.zip&quot;&gt;http://www.boxshots.org/styles.zip&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;http://xoblite.net/&quot;&gt;http://xoblite.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://bb4win.sourceforge.net/styles.html&quot;&gt;http://bb4win.sourceforge.net/styles.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://winreview.ru/radikalnoe-reshenie-vsex-problem-s-interfejsom-windows-8/&quot;&gt;Радикальное решение всех проблем с интерфейсом Windows 8&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;bblean не отображается tray windows&lt;/summary&gt;&lt;br /&gt; Причина, по которой половина или более значков не отображаются, связана с тем, что explorer работает под bblean. Вам нужно будет убить его перед запуском оболочки blackbox, попробуйте что-то вроде этого &lt;br /&gt;&lt;br /&gt;start_bb.bat&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
:: stop explorer and wait with executing the next bit
start /wait taskkill /IM explorer.exe /f
start /wait taskkill /IM MyClip.exe /f
:: start it again
start &quot;&quot; C:\bbLean\blackbox.exe
&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;или грохнуть в taskmgr процесс explorer, затем запустить bbLean&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;bbIconBox.rc&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
# --------------------------------------------------
# bbIconBox.rc

bbIconBox.id.count: 9
bbIconBox.id.1: Quick Launch
bbIconBox.id.2: task1
bbIconBox.id.3: task2
bbIconBox.id.4: task3
bbIconBox.id.6: task4
bbIconBox.id.5: Desktop
bbIconBox.id.7: Desktop1

bbIconBox.Desktop.placement: TopRight
bbIconBox.Desktop.position.x: 0
bbIconBox.Desktop.position.y: 0
bbIconBox.Desktop.useSlit: false
bbIconBox.Desktop.alwaysOnTop: false
bbIconBox.Desktop.AutoHide: false
bbIconBox.Desktop.clickRaise: true
bbIconBox.Desktop.snapWindow: true
bbIconBox.Desktop.pluginToggle: true
bbIconBox.Desktop1.placement: User
bbIconBox.Desktop1.position.x: 20
bbIconBox.Desktop1.position.y: 20
bbIconBox.Desktop1.useSlit: false
bbIconBox.Desktop1.alwaysOnTop: false
bbIconBox.Desktop1.autoHide: true
bbIconBox.Desktop1.clickRaise: true
bbIconBox.Desktop1.snapWindow: true
bbIconBox.Desktop1.pluginToggle: true
bbIconBox.Desktop1.alpha.enabled: false
bbIconBox.Desktop1.alpha.value: 192
bbIconBox.Desktop1.orientation: horizontal
bbIconBox.Desktop1.path: DESKTOP
bbIconBox.Desktop1.title: Desktop1
bbIconBox.Desktop1.rows: 2
bbIconBox.Desktop1.columns: 4
bbIconBox.Desktop1.icon.size: 16
bbIconBox.Desktop1.icon.saturation: 80
bbIconBox.Desktop1.icon.hue: 60
bbIconBox.Desktop1.drawTitle: false
bbIconBox.Desktop1.drawBorder: true
bbIconBox.Desktop1.toolTips: true
bbIconBox.Desktop.alpha.enabled: false
bbIconBox.Desktop.alpha.value: 192
bbIconBox.Desktop.orientation: vertical
bbIconBox.Desktop.path: DESKTOP
bbIconBox.Desktop.title: Desktop
bbIconBox.Desktop.rows: 16
bbIconBox.Desktop.columns: 3
bbIconBox.Desktop.icon.size: 16
bbIconBox.Desktop.icon.saturation: 80
bbIconBox.Desktop.icon.hue: 60
bbIconBox.Desktop.drawTitle: false
bbIconBox.Desktop.drawBorder: true
bbIconBox.Desktop.toolTips: true

bbIconBox.Quick+Launch.placement: User
bbIconBox.Quick+Launch.position.x: 20
bbIconBox.Quick+Launch.position.y: 20
bbIconBox.Quick+Launch.useSlit: true
bbIconBox.Quick+Launch.alwaysOnTop: false
# bbIconBox.Quick+Launch.autoHide: false
bbIconBox.Quick+Launch.autoHide: true
bbIconBox.Quick+Launch.clickRaise: true
bbIconBox.Quick+Launch.snapWindow: true
bbIconBox.Quick+Launch.pluginToggle: true
bbIconBox.Quick+Launch.alpha.enabled: false
bbIconBox.Quick+Launch.alpha.value: 192
bbIconBox.Quick+Launch.orientation: vertical
bbIconBox.Quick+Launch.path: APPDATA\Microsoft\Internet Explorer\Quick Launch
bbIconBox.Quick+Launch.title: Quick
bbIconBox.Quick+Launch.rows: 4
bbIconBox.Quick+Launch.columns: 2
bbIconBox.Quick+Launch.icon.size: 16
bbIconBox.Quick+Launch.icon.saturation: 80
bbIconBox.Quick+Launch.icon.hue: 0
bbIconBox.Quick+Launch.drawTitle: true
bbIconBox.Quick+Launch.drawBorder: true
bbIconBox.Quick+Launch.toolTips: true

bbIconBox.task1.placement: User
bbIconBox.task1.position.x: 765
bbIconBox.task1.position.y: 167
bbIconBox.task1.useSlit: true
bbIconBox.task1.alwaysOnTop: false
bbIconBox.task1.autoHide: false
bbIconBox.task1.clickRaise: true
bbIconBox.task1.snapWindow: true
bbIconBox.task1.pluginToggle: true
bbIconBox.task1.alpha.enabled: false
bbIconBox.task1.alpha.value: 192
bbIconBox.task1.orientation: vertical
bbIconBox.task1.path: TASK1
bbIconBox.task1.title: A
bbIconBox.task1.rows: 4
bbIconBox.task1.columns: 2
bbIconBox.task1.icon.size: 16
bbIconBox.task1.icon.saturation: 80
bbIconBox.task1.icon.hue: 0
bbIconBox.task1.drawTitle: true
bbIconBox.task1.drawBorder: true
bbIconBox.task1.toolTips: true

bbIconBox.task2.placement: User
bbIconBox.task2.position.x: 765
bbIconBox.task2.position.y: 193
bbIconBox.task2.useSlit: true
bbIconBox.task2.alwaysOnTop: false
bbIconBox.task2.autoHide: false
bbIconBox.task2.clickRaise: true
bbIconBox.task2.snapWindow: true
bbIconBox.task2.pluginToggle: true
bbIconBox.task2.alpha.enabled: false
bbIconBox.task2.alpha.value: 192
bbIconBox.task2.orientation: vertical
bbIconBox.task2.path: TASK2
bbIconBox.task2.title: B
bbIconBox.task2.rows: 4
bbIconBox.task2.columns: 2
bbIconBox.task2.icon.size: 16
bbIconBox.task2.icon.saturation: 80
bbIconBox.task2.icon.hue: 0
bbIconBox.task2.drawTitle: true
bbIconBox.task2.drawBorder: true
bbIconBox.task2.toolTips: true

bbIconBox.task3.placement: User
bbIconBox.task3.position.x: 735
bbIconBox.task3.position.y: 128
bbIconBox.task3.useSlit: true
bbIconBox.task3.alwaysOnTop: false
bbIconBox.task3.autoHide: false
bbIconBox.task3.clickRaise: true
bbIconBox.task3.snapWindow: true
bbIconBox.task3.pluginToggle: true
bbIconBox.task3.alpha.enabled: false
bbIconBox.task3.alpha.value: 192
bbIconBox.task3.orientation: vertical
bbIconBox.task3.path: TASK3
bbIconBox.task3.title: C
bbIconBox.task3.rows: 4
bbIconBox.task3.columns: 2
bbIconBox.task3.icon.size: 16
bbIconBox.task3.icon.saturation: 80
bbIconBox.task3.icon.hue: 0
bbIconBox.task3.drawTitle: true
bbIconBox.task3.drawBorder: true
bbIconBox.task3.toolTips: true

bbIconBox.task4.placement: User
bbIconBox.task4.position.x: 735
bbIconBox.task4.position.y: 128
bbIconBox.task4.useSlit: true
bbIconBox.task4.alwaysOnTop: false
bbIconBox.task4.autoHide: false
bbIconBox.task4.clickRaise: true
bbIconBox.task4.snapWindow: true
bbIconBox.task4.pluginToggle: true
bbIconBox.task4.alpha.enabled: false
bbIconBox.task4.alpha.value: 192
bbIconBox.task4.orientation: vertical
bbIconBox.task4.path: TASK4
bbIconBox.task4.title: D
bbIconBox.task4.rows: 4
bbIconBox.task4.columns: 2
bbIconBox.task4.icon.size: 16
bbIconBox.task4.icon.saturation: 80
bbIconBox.task4.icon.hue: 0
bbIconBox.task4.drawTitle: true
bbIconBox.task4.drawBorder: true
bbIconBox.task4.toolTips: true
&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Прочие&lt;/h3&gt;&lt;br /&gt;&lt;a href=&quot;https://gnustep.github.io/windows/installer.html&quot;&gt;https://gnustep.github.io/windows/installer.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://sharpe.sourceforge.net/Download.html&quot;&gt;http://sharpe.sourceforge.net/Download.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/McYoloSwagHam/win3wm&quot;&gt;https://github.com/McYoloSwagHam/win3wm&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/fuhsjr00/bug.n&quot;&gt;https://github.com/fuhsjr00/bug.n&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/workspacer/workspacer&quot;&gt;https://github.com/workspacer/workspacer&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/TimUntersberger/nog&quot;&gt;https://github.com/TimUntersberger/nog&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/LGUG2Z/komorebi&quot;&gt;https://github.com/LGUG2Z/komorebi&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.astonshell.ru/&quot;&gt;https://www.astonshell.ru/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.lighttek.com/talisman.htm&quot;&gt;https://www.lighttek.com/talisman.htm&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.stardock.com/products/windowblinds/&quot;&gt;https://www.stardock.com/products/windowblinds/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.actualtools.com/windowmanager/&quot;&gt;https://www.actualtools.com/windowmanager/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://maxto.net/ru&quot;&gt;https://maxto.net/ru&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://virtuawin.sourceforge.io/&quot;&gt;https://virtuawin.sourceforge.io/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://windowspager.sourceforge.net/&quot;&gt;https://windowspager.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://winlaunch.org/&quot;&gt;https://winlaunch.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://learn.microsoft.com/ru-ru/windows/powertoys/always-on-top&quot;&gt;https://learn.microsoft.com/ru-ru/windows/powertoys/always-on-top&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://learn.microsoft.com/ru-ru/windows/powertoys/fancyzones&quot;&gt;https://learn.microsoft.com/ru-ru/windows/powertoys/fancyzones&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=5879495&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/5879495.html</comments>
  <category>linux</category>
  <category>bsd</category>
  <category>centos</category>
  <category>de</category>
  <category>windows</category>
  <category>debian</category>
  <category>dpkg</category>
  <category>wm</category>
  <category>archlinux</category>
  <category>ubuntu</category>
  <category>ноут</category>
  <category>themes</category>
  <category>подборка</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/5879249.html</guid>
  <pubDate>Fri, 21 Aug 2026 12:42:56 GMT</pubDate>
  <title>Ollama разворачивание и использование</title>
  <link>https://uzverss.dreamwidth.org/5879249.html</link>
  <description>&lt;br&gt;&lt;a href=&quot;https://github.com/ollama/ollama/&quot;&gt;&lt;img src=&quot;https://wpcork.com/wp-content/uploads/2024/10/Ollama-Logo-Image.jpg&quot; alt=&quot;image&quot; border=&quot;0&quot; width=&quot;411&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;ознакомиться&lt;/summary&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;модели&lt;/summary&gt;&lt;br /&gt;калькулятор моделей&lt;br /&gt;&lt;a href=&quot;https://ggufloader.github.io/gguf-memory-calculator.html&quot;&gt;https://ggufloader.github.io/gguf-memory-calculator.html&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;
Размер модели | Место на диске | Оперативная память | Видеокарта
--------------|----------------|--------------------|----------------------------------
1–4B          | 1–3 ГБ         | 8 ГБ               | Необязательна
7–8B          | ~5 ГБ          | 16 ГБ              | Желательна, но работает и на CPU
14B           | ~9 ГБ          | 32 ГБ              | Нужна, от 12 ГБ VRAM
30B+          | 20+ ГБ         | 64 ГБ              | Обязательна, от 24 ГБ VRAM

характеристики моделей для установки на ноутбук

| Модель            | Архитектура          | Вес файла   | Нужно ОЗУ | Статус для ПК 16 ГБ                           |
|-------------------|----------------------|-------------|-----------|-----------------------------------------------|
| Gemma 4 E2B       | Плотная (Dense)      | ~1.6 ГБ     | ~4–5 ГБ   | Идеально 🚀 (Макс. скорость)                  |
| Gemma 4 E4B       | Плотная (Dense)      | ~2.6 ГБ     | ~7–8 ГБ   | Отлично 🛠️ (Оптимальный умный кодер)          |
| Qwen 2.5 Coder 7B | Плотная (Dense)      | ~4.7 ГБ     | ~10 ГБ    | Хорошо 📝 (Сильный кодинг, средняя скорость)  |
| Llama 3.1 8B      | Плотная (Dense)      | ~4.7 ГБ     | ~10 ГБ    | Хорошо 🧠 (Универсальная эрудиция)            |
| Gemma 4 12B       | Плотная (Dense)      | ~7.6 ГБ     | ~12 ГБ    | На грани 🐢 (Займет всю ОЗУ, будет медленной) |
| Gemma 4 26B A4B   | Смесь экспертов (MoE)| ~18 ГБ      | ~24+ ГБ   | Не запустится ❌ (Вызовет Out of Memory)       |
&lt;/pre&gt;&lt;br /&gt;ollama run hf.co/bartowski/Qwen2.5.1-Coder-7B-Instruct-GGUF:Q3_K_M&lt;br /&gt;Распределение оперативной памяти&lt;br /&gt;Суммарно процесс Ollama при генерации займет от 4.2 ГБ до 5.5 ГБ оперативной памяти. Она разделяется на две ключевые составляющие:&lt;br /&gt;1. Веса модели (Фиксированная память) — ~3.6 ГБ&lt;br /&gt;Базовый вес: Сама модель Qwen2.5-Coder-7B в квантовании Q3_K_M весит на диске около 3.6 ГБ.&lt;br /&gt;При вызове команды Ollama полностью загрузит эти 3.6 ГБ в оперативную память. Эта цифра неизменна и не зависит от длины вашего диалога.&lt;br /&gt;2. Кэш контекста (KV-Cache) (Динамическая память) — от 0.6 ГБ до 1.9 ГБ&lt;br /&gt;&lt;br /&gt;Поскольку у вас нет видеокарты, контекст (память беседы) тоже рассчитывается в ОЗУ. Потребление памяти здесь строго зависит от того, какой размер контекста (num_ctx) задан в системе:&lt;br /&gt;По умолчанию в Ollama (2048 токенов): Добавит всего около 0.6 ГБ ОЗУ. Суммарно модель займет ~4.2 ГБ.&lt;br /&gt;Если выставить рабочий лимит для кода (8192 токенов): Потребует около 1.1 ГБ ОЗУ. Суммарно модель займет ~4.7 ГБ.&lt;br /&gt;Если выжать максимум для 16 ГБ ОЗУ (16384 токенов): Потребует порядка 1.9 ГБ ОЗУ. Суммарно выйдет около 5.5 ГБ.&lt;br /&gt;&lt;br /&gt;Общая карта распределения ОЗУ на ноутбуке во время генерации:&lt;br /&gt;🟩 Свободно для программ: ~6.5 ГБ (под Sublime Text, терминалы и инструменты сборки).&lt;br /&gt;🟨 Занято моделью (Qwen 7B Q3_K_M + KV): ~5.5 ГБ (максимальный пик при длинном коде).&lt;br /&gt;🟥 Занято операционной системой: ~4.0 ГБ (стандартное потребление чистой ОС)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://huggingface.co/Qwen/Qwen2.5-Coder-7B-Instruct-GGUF/tree/main&quot;&gt;https://huggingface.co/Qwen/Qwen2.5-Coder-7B-Instruct-GGUF/tree/main&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://huggingface.co/bartowski/Qwen2.5.1-Coder-7B-Instruct-GGUF/tree/main&quot;&gt;https://huggingface.co/bartowski/Qwen2.5.1-Coder-7B-Instruct-GGUF/tree/main&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://huggingface.co/bartowski/Meta-Llama-3.1-8B-Instruct-GGUF/tree/main&quot;&gt;https://huggingface.co/bartowski/Meta-Llama-3.1-8B-Instruct-GGUF/tree/main&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://huggingface.co/bartowski/Mistral-7B-Instruct-v0.3-GGUF/tree/main&quot;&gt;https://huggingface.co/bartowski/Mistral-7B-Instruct-v0.3-GGUF/tree/main&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://huggingface.co/bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF/tree/main&quot;&gt;https://huggingface.co/bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF/tree/main&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
python3 -c &quot;import urllib.request; urllib.request.urlretrieve(&apos;https://huggingface.co/bartowski/Qwen2.5-Coder-7B-Instruct-GGUF/resolve/main/Qwen2.5-Coder-7B-Instruct-Q4_K_M.gguf&apos;, &apos;qwen2.5-coder-7b-instruct-q4_k_m.gguf&apos;)&quot;
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;спецификации шаблонов, в зависимости от семейства модели для Modelfile&lt;br /&gt;1. Gemma (Шаблон: Gemma 2 / 4)&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
FROM /root/.ollama/gemma-YOUR-FILE.gguf
PARAMETER num_ctx 16384
TEMPLATE &quot;&amp;lt;start_of_turn&amp;gt;system\n&amp;lt;end_of_turn&amp;gt;\n&amp;lt;start_of_turn&amp;gt;user\n&amp;lt;end_of_turn&amp;gt;\n&amp;lt;start_of_turn&amp;gt;model\n&amp;lt;end_of_turn&amp;gt;\n&quot;
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;2. Qwen и DeepSeek (включая DeepSeek-V3, R1 и дистилляции) (Шаблон: ChatML)&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
FROM /root/.ollama/your-file.gguf
PARAMETER num_ctx 16384
TEMPLATE &quot;&amp;lt;|im_start|&amp;gt;system\n&amp;lt;|im_end|&amp;gt;\n&amp;lt;|im_start|&amp;gt;user\n&amp;lt;|im_end|&amp;gt;\n&amp;lt;|im_start|&amp;gt;assistant\n&amp;lt;|im_end|&amp;gt;\n&quot;
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;3. Meta Llama (Llama 3, 3.1, 3.2, 3.3)Использует сложную разметку с указанием ID заголовков (&amp;lt;|start_header_id|&amp;gt;) и токенами конца текста (&amp;lt;|eot_id|&amp;gt;).&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
FROM /root/.ollama/llama3-YOUR-FILE.gguf
PARAMETER num_ctx 16384
TEMPLATE &quot;&amp;lt;|start_header_id|&amp;gt;system&amp;lt;|end_header_id|&amp;gt;\n\n&amp;lt;|eot_id|&amp;gt;&amp;lt;|start_header_id|&amp;gt;user&amp;lt;|end_header_id|&amp;gt;\n\n&amp;lt;|eot_id|&amp;gt;&amp;lt;|start_header_id|&amp;gt;assistant&amp;lt;|end_header_id|&amp;gt;\n\n&amp;lt;|eot_id|&amp;gt;\n&quot;
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;4. Mistral AI (Mistral, Mixtral)Классический формат французской нейросети с тегами [INST] и [/INST]&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
FROM /root/.ollama/mistral-YOUR-FILE.gguf
PARAMETER num_ctx 16384
TEMPLATE &quot; [INST]  [/INST] \n&quot;
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;взаимодействие с моделью через ollama&lt;/summary&gt;&lt;br /&gt;подключиться к модели&lt;br /&gt;ollama run модель&lt;br /&gt;&lt;br /&gt;например&lt;br /&gt;docker exec -it ollama-server ollama run qwen2.5-coder-3b:latest&lt;br /&gt;&lt;br /&gt;Основные команды управления сессией&lt;br /&gt;/exit или /bye — полностью завершить работу и выйти из режима чата обратно в консоль вашего компьютера.&lt;br /&gt;/clear — полностью очистить историю текущего диалога в памяти. Модель «забудет» всё, о чем вы говорили строчками выше, и начнет беседу с чистого листа (помогает, если контекст забился или модель начала путаться).&lt;br /&gt;&lt;br /&gt;Команды для работы с кодом и настройками&lt;br /&gt;/set — позволяет на лету менять параметры модели для текущего диалога.&lt;br /&gt;Пример: /set parameter temperature 0.1 — сделает ответы модели максимально строгими, точными и техническими (идеально для кодинга).&lt;br /&gt;Пример: /set parameter num_ctx 8192 — временно изменит размер окна контекста.&lt;br /&gt;&lt;br /&gt;/show — показать подробную техническую информацию о запущенной модели.&lt;br /&gt;/show info — выведет архитектуру сети, тип квантования и метаданные.&lt;br /&gt;/show license — покажет лицензию модели.&lt;br /&gt;/show system — отобразит текущий системный промпт (инструкцию), с которым работает модель.&lt;br /&gt;&lt;br /&gt;Дополнительные возможности&lt;br /&gt;/help — выведет на экран быструю справку по всем доступным встроенным командам.&lt;br /&gt;/? — делает абсолютно то же самое, что и /help&lt;br /&gt;&lt;br /&gt;/set parameter temperature&lt;br /&gt;Available Parameters:&lt;br /&gt;  /set parameter seed &amp;lt;int&amp;gt;             Random number seed&lt;br /&gt;  /set parameter num_predict &amp;lt;int&amp;gt;      Max number of tokens to predict&lt;br /&gt;  /set parameter top_k &amp;lt;int&amp;gt;            Pick from top k num of tokens&lt;br /&gt;  /set parameter top_p &amp;lt;float&amp;gt;          Pick token based on sum of probabilities&lt;br /&gt;  /set parameter min_p &amp;lt;float&amp;gt;          Pick token based on top token probability * min_p&lt;br /&gt;  /set parameter num_ctx &amp;lt;int&amp;gt;          Set the context size&lt;br /&gt;  /set parameter temperature &amp;lt;float&amp;gt;    Set creativity level&lt;br /&gt;  /set parameter repeat_penalty &amp;lt;float&amp;gt; How strongly to penalize repetitions&lt;br /&gt;  /set parameter repeat_last_n &amp;lt;int&amp;gt;    Set how far back to look for repetitions&lt;br /&gt;  /set parameter num_gpu &amp;lt;int&amp;gt;          The number of layers to send to the GPU&lt;br /&gt;  /set parameter stop &amp;lt;string&amp;gt; &amp;lt;string&amp;gt; ...   Set the stop parameters&lt;br /&gt;&lt;br /&gt;1. temperature &amp;lt;float&amp;gt; (Уровень креативности)&lt;br /&gt;По умолчанию температура обычно равна 0.7 или 0.8. Для кодинга это много — модель начинает «фантазировать», придумывать несуществующие библиотеки или ошибаться в синтаксисе.&lt;br /&gt;Рекомендация для кодинга: &lt;br /&gt;Снизьте её до 0.1 или вообще до 0. Модель станет строгой, предсказуемой и будет выбирать только самые логичные и проверенные варианты написания кода.&lt;br /&gt;Как ввести:&lt;br /&gt;/set parameter temperature 0.1&lt;br /&gt;&lt;br /&gt;2. repeat_penalty &amp;lt;float&amp;gt; (Штраф за повторения)&lt;br /&gt;Иногда маленькие модели (вроде 3B) могут «зацикливаться» — бесконечно повторять одну и ту же строчку кода или один и тот же комментарий. Этот параметр заставляет модель подбирать новые слова, если она начинает повторяться.&lt;br /&gt;Рекомендация: &lt;br /&gt;Значение в районе 1.1 – 1.2 обычно идеально решает проблему циклов.&lt;br /&gt;Как ввести:&lt;br /&gt;/set parameter repeat_penalty 1.15&lt;br /&gt;&lt;br /&gt;3. num_predict &amp;lt;int&amp;gt; (Максимальная длина ответа)&lt;br /&gt;Этот параметр ограничивает количество токенов (слов/символов), которое модель может выдать за один раз. Если вы просите написать большой класс или развесистый скрипт, а модель внезапно обрывает ответ на середине слова — значит, она уперлась в лимит num_predict.&lt;br /&gt;Рекомендация: &lt;br /&gt;Для генерации больших кусков кода можно поднять лимит, например, до 2048 или 4096.&lt;br /&gt;Как ввести:&lt;br /&gt;/set parameter num_predict 2048&lt;br /&gt;&lt;br /&gt;Как проверить, что параметры применились?&lt;br /&gt;После того как вы ввели нужные настройки (например, изменили температуру), вы можете выполнить команду:&lt;br /&gt;/show info&lt;br /&gt;&lt;br /&gt;Когда настройки сбросятся автоматически?&lt;br /&gt;При выходе из чата: &lt;br /&gt;Как только вы напишете /exit или закрывающее диалог сообщение, сессия завершится. При следующем запуске ollama run параметры снова будут дефолтными.&lt;br /&gt;При очистке контекста: &lt;br /&gt;Если вы напишете команду /clear, модель забудет историю разговора и одновременно сбросит измененную температуру к стандартному значению.&lt;br /&gt;&lt;br /&gt;Как зафиксировать настройки навсегда (Чтобы не вводить каждый раз)&lt;br /&gt;&lt;br /&gt;В Modelfile для любой модели перед её сборкой через ollama create. И Ollama намертво применит эти дефолтные параметры именно к этой сборке&lt;br /&gt;FROM /root/.ollama/qwen2.5-coder-3b.gguf&lt;br /&gt;PARAMETER num_ctx 16384&lt;br /&gt;PARAMETER temperature 0.1&lt;br /&gt;PARAMETER repeat_penalty 1.1&lt;br /&gt;&lt;br /&gt;В графических интерфейсах (Page Assist / Open WebUI)&lt;br /&gt;Поскольку эти интерфейсы общаются с Ollama через единый API, ползунки настроек (Temperature, Top-P, Context Length) там работают универсально для любой выбранной модели. Они просто подставляют нужные цифры в каждый ваш запрос «на лету».&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;команды&lt;/summary&gt;&lt;br /&gt;ollama serve — запускает Ollama как сервис. Эта команда нужна, если вы хотите работать через API или использовать Ollama в связке с другими приложениями.&lt;br /&gt;&lt;br /&gt;ollama create &amp;lt;name&amp;gt; — создаёт новую модель на основе существующей. Например, можно добавить свои инструкции или дообучить под конкретную задачу.&lt;br /&gt;&lt;br /&gt;ollama show &amp;lt;model&amp;gt; — показывает подробную информацию о модели: её размер, параметры и настройки.&lt;br /&gt;&lt;br /&gt;ollama run &amp;lt;model&amp;gt; — запускает модель в интерактивном режиме. Самая популярная команда: после её вызова можно сразу общаться с LLM прямо в терминале.&lt;br /&gt;&lt;br /&gt;ollama stop &amp;lt;model&amp;gt; — останавливает запущенную модель, освобождая ресурсы.&lt;br /&gt;&lt;br /&gt;ollama pull &amp;lt;model&amp;gt; — скачивает модель из репозитория. Обычно это первый шаг перед запуском: без загрузки модель не запустится.&lt;br /&gt;&lt;br /&gt;ollama push &amp;lt;model&amp;gt; — отправляет модель в репозиторий. Полезно, если вы сделали свою сборку и хотите поделиться ей или использовать на другом устройстве.&lt;br /&gt;&lt;br /&gt;ollama list — показывает все модели, которые установлены на вашем компьютере.&lt;br /&gt;&lt;br /&gt;ollama ps — выводит список запущенных моделей. Удобно, чтобы посмотреть, что сейчас работает.&lt;br /&gt;&lt;br /&gt;ollama cp &amp;lt;source&amp;gt; &amp;lt;destination&amp;gt; — копирует модель из одного места в другое, например для резервного хранения или переноса.&lt;br /&gt;&lt;br /&gt;ollama rm &amp;lt;model&amp;gt; — удаляет модель, освобождая место на диске. Особенно актуально, учитывая, что модели могут весить десятки гигабайт.&lt;br /&gt;&lt;br /&gt;ollama help — выводит справку по всем командам. Хорошая подсказка, если вдруг забыли синтаксис или название.&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;развернуть на железе&lt;/summary&gt;&lt;br /&gt;curl -fsSL &lt;a href=&quot;https://ollama.com/install.sh&quot;&gt;https://ollama.com/install.sh&lt;/a&gt; | sh&lt;br /&gt;&lt;br /&gt;или развернуть самостоятельно в ~/.local&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
curl -L https://github.com/ollama/ollama/releases/download/v0.32.14/ollama-linux-amd64.tar.zst | tar -I zstd -xf - -C ~/.local
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;скачать модель&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
sudo wget -P /mnt/newdisk/ollama_models -c https://huggingface.co/Qwen/Qwen2.5-Coder-7B-Instruct-GGUF/resolve/main/qwen2.5-coder-7b-instruct-q4_k_m.gguf
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;файл для подключения модели&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
cat &amp;lt;&amp;lt; &apos;EOF&apos; &amp;gt; ~/Modelfile
FROM /mnt/newdisk/ollama_models/qwen2.5-coder-7b-instruct-q4_k_m.gguf
PARAMETER num_ctx 16384
TEMPLATE &quot;\n&quot;
EOF
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Зарегистрируйте модель в Ollama&lt;br /&gt;Убедитесь, что сервер Ollama запущен (ollama serve), откройте соседний терминал и выполните команду сборки:&lt;br /&gt;ollama create qwen2.5-coder:3b -f ~/Modelfile&lt;br /&gt;rm ~/Modelfile&lt;br /&gt;&lt;br /&gt;вывод моделей&lt;br /&gt;ollama list&lt;br /&gt;&lt;br /&gt;юнит systemd&lt;br /&gt;&lt;br /&gt;mkdir -p ~/.config/systemd/user/&lt;br /&gt;vim ~/.config/systemd/user/ollama.service&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
[Unit]
Description=Ollama Service (Local)
After=network.target

[Service]
Environment=&quot;OLLAMA_MODELS=/mnt/newdisk/ollama_models&quot;
ExecStart=%h/.local/bin/ollama serve
Restart=always
RestartSec=3

[Install]
WantedBy=default.target
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;systemctl --user enable --now ollama.service&lt;br /&gt;systemctl --user daemon-reload&lt;br /&gt;systemctl --user restart ollama.service&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;агенты, плагины, расширения&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/open-webui/open-webui&quot;&gt;Open WebUI&lt;/a&gt; (localhost:3000) — это личный локальный ChatGPT.&lt;br /&gt;&lt;a href=&quot;https://github.com/Aider-AI/aider&quot;&gt;Aider&lt;/a&gt; — это автономный робот-программист. Он запускается в терминале и умеет сам создавать, изменять и удалять файлы проекта, а также делать авто-коммиты в Git.&lt;br /&gt;Open Interpreter — это Исполнитель Задач. Он общается терминами операционной системы Linux. Вы можете сказать ему: «Найди в этой папке все файлы со словом &quot;error&quot;, собери их в один архив, создай Python-скрипт для отправки этого архива и протестируй его». Он сам напишет Bash и Python скрипты и сам выполнит их по очереди внутри контейнера.&lt;br /&gt;&lt;a href=&quot;https://github.com/danielmiessler/fabric&quot;&gt;fabric&lt;/a&gt; (бинарь на Go) Имеет встроенные системные промты (Patterns) для написания кода, создания архитектуры и разбора логов.&lt;br /&gt;Плагин &lt;a href=&quot;https://github.com/taketwo/llm-ollama&quot;&gt;llm-ollama&lt;/a&gt; позволяет запускать локальные языковые модели через движок Ollama прямо в терминале с автоматическим логированием истории в SQLite&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;плагины для браузера&lt;/summary&gt;&lt;br /&gt;Page Assist - Веб-интерфейс для локальных моделей искусственного интеллекта&lt;br /&gt;&lt;a href=&quot;https://github.com/n4ze3m/page-assist&quot;&gt;https://github.com/n4ze3m/page-assist&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/page-assist-a-web-ui-for/jfgfiigpkhlkbnfnbobbkinehhfdhndo?hl=ru&quot;&gt;https://chromewebstore.google.com/detail/page-assist-a-web-ui-for/jfgfiigpkhlkbnfnbobbkinehhfdhndo?hl=ru&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;использование fabric&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/danielmiessler/fabric&quot;&gt;https://github.com/danielmiessler/fabric&lt;/a&gt;&lt;br /&gt;~/.local/bin/fabric --setup&lt;br /&gt;Запуск: fabric -m qwen2.5-coder-3b:latest --stream&lt;br /&gt;&lt;br /&gt;fabric -m qwen2.5-coder-3b:latest &quot;Напиши hello world на python&quot;&lt;br /&gt;echo &quot;Напиши hello world на python&quot; | fabric -m qwen2.5-coder-3b:latest&lt;br /&gt;&lt;br /&gt;cat лог_ошибок.txt | fabric -p analyze_logs (находит причину падения сервера) [v1/chat/completions].&lt;br /&gt;fabric -y &quot;ссылка_на_youtube&quot; (cам скачивает субтитры длинного часового видео, отдаёт ИИ и выводит вам краткое саммари за 10 секунд) [v1/chat/completions].&lt;br /&gt;cat плохой_код.py | fabric -p refactor_code (Переписывает код по стандартам чистого программирования) [v1/chat/completions].&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Установка Aider&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://aider.chat/&quot;&gt;https://aider.chat/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/lloydchang/Aider-AI-aider-fka-paul-gauthier-aider&quot;&gt;https://github.com/lloydchang/Aider-AI-aider-fka-paul-gauthier-aider&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;на железо&lt;/summary&gt;&lt;br /&gt;необходим python 3.12 иначе баги при установке&lt;br /&gt;&lt;br /&gt;pyenv install -s 3.12&lt;br /&gt;~/.pyenv/versions/3.12.*/bin/python -m venv ~/.local/share/aider-env&lt;br /&gt;source ~/.local/share/aider-env/bin/activate&lt;br /&gt;&lt;br /&gt;# Ставим сам Aider&lt;br /&gt;pip install --upgrade pip&lt;br /&gt;pip install aider-chat&lt;br /&gt;&lt;br /&gt;deactivate&lt;br /&gt;&lt;br /&gt;ln -sf ~/.local/share/aider-env/bin/aider ~/.local/bin/aider&lt;br /&gt;&lt;br /&gt;Запуск:&lt;br /&gt;aider --model ollama/qwen2.5-coder-3b:latest&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;в докер&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://hub.docker.com/r/paulgauthier/aider&quot;&gt;https://hub.docker.com/r/paulgauthier/aider&lt;/a&gt;&lt;br /&gt;paulgauthier/aider 3.89GB&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
docker run -it --rm \
  --net=host \
  -v $(pwd):/workspace \
  -w /workspace \
  paulgauthier/aider --model ollama/qwen2.5-coder-3b:latest
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Собрать менее жирный&lt;br /&gt;my-aider 872MB&lt;br /&gt;&lt;br /&gt;vim Dockerfile&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
FROM python:3.12-slim

# Устанавливаем git и vim-tiny
RUN apt-get update &amp;&amp; \
    apt-get install -y git vim-tiny &amp;&amp; \
    rm -rf /var/lib/apt/lists/*

# Настройка системных альтернатив для Vim
RUN update-alternatives --install /usr/bin/vim vim /usr/bin/vim.tiny 10

WORKDIR /workspace

RUN pip install --no-cache-dir aider-chat
RUN git config --global --add safe.directory &apos;*&apos;

# Назначаем редактор
ENV EDITOR=vim
ENV VISUAL=vim

ENTRYPOINT [&quot;aider&quot;]
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Соберите локальный образ&lt;br /&gt;docker build -t my-aider .&lt;br /&gt;&lt;br /&gt;Запустите my-aider&lt;br /&gt;доступ к /mnt/newdisk/builds&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
docker run -it --rm --net=host \
  -v /mnt/newdisk/builds:/workspace \
  -v /mnt/newdisk/builds/.aider_metadata:/root/.aider \
  -w /workspace \
  -e OPENAI_API_BASE=&quot;http://localhost:11434/v1&quot; \
  -e OPENAI_API_KEY=&quot;ollama&quot; \
  my-aider --model openai/qwen2.5-coder-3b:latest \
  --edit-format whole \
  --chat-language russian \
  --no-show-model-warnings
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;Как вернуть модель в рабочее состояние прямо сейчас&lt;br /&gt;Удаляем фейковый файл из Git&lt;br /&gt;/undo&lt;br /&gt;&lt;br /&gt;Удаляем фейковые файлы из отслеживания &lt;br /&gt;/git rm -r --cached path/ hello.txt&lt;br /&gt;Делаем чистый коммит изменений&lt;br /&gt;/git commit -m &quot;clean up fake files from previous session&quot;&lt;br /&gt;&lt;br /&gt;Вариант 1. Тестовый (Проверить создание кода и логику)&lt;br /&gt;Промпт:&lt;br /&gt;Напиши на Python скрипт check_system.py, который проверяет свободное место на диске, объем свободной оперативной памяти и выводит топ-5 самых тяжелых процессов в системе. Скрипт должен красиво форматировать вывод в терминал.&lt;br /&gt;Используй формат diff-fenced и добавь строку &apos;import shutil&apos; в самое начало файла check_system.py. Измени только импорты.&lt;br /&gt;Что произойдет: &lt;br /&gt;Модель создаст файл check_system.py, напишет туда рабочий код (скорее всего, используя библиотеку psutil) и сама закоммитит его в Git.&lt;br /&gt;&lt;br /&gt;Перепиши файл check_system.py целиком. Добавь в самое начало строки:&lt;br /&gt;import os&lt;br /&gt;import psutil&lt;br /&gt;import shutil&lt;br /&gt;&lt;br /&gt;Вариант 2. Практический (Если вы хотите настроить линтер проекта)&lt;br /&gt;Промпт:&lt;br /&gt;Создай файл конфигурации .flake8 для линтера Python. Настрой его так, чтобы максимальная длина строки была 120 символов, и добавь в игнорирование папки .git, .aider_metadata и виртуальное окружение venv.&lt;br /&gt;Что произойдет: &lt;br /&gt;Модель создаст правильный системный конфиг для вашей папки сборок.&lt;br /&gt;&lt;br /&gt;Вариант 3. Интерактивный (Проверить, как она исправляет свой же код)&lt;br /&gt;Сначала отправьте Вариант 1, дождитесь, пока она создаст файл, а затем отправьте этот промпт вдогонку. Это покажет, как работает формат diff-fenced (когда модель меняет только нужные строчки в существующем файле).&lt;br /&gt;Промпт:&lt;br /&gt;Добавь в созданный скрипт check_system.py логику: если свободного места на диске осталось меньше 10%, пусть скрипт выводит предупреждение красным цветом в консоль.&lt;br /&gt;если не справится&lt;br /&gt;Перепиши файл check_system.py целиком. Внутри функции main() посчитай процент свободного места на диске. Если free / total &amp;lt; 0.10, выведи сообщение &quot;\033[91mВНИМАНИЕ: Свободного места меньше 10%!\033[0m&quot; красным цветом.&lt;br /&gt;&lt;br /&gt;На что обратить внимание во время генерации:&lt;br /&gt;Вы увидите, как на экране побегут строчки кода.&lt;br /&gt;После завершения Aider спросит вас или сразу покажет лог вроде: Commit [хэш] feat: add system check script.&lt;br /&gt;Вы сможете зайти в свою папку /mnt/newdisk/builds через обычный проводник или терминал Linux и запустить созданный файл командой python3 check_system.py.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Перепиши файл check_system.py целиком. Добавь в самое начало строки:&lt;br /&gt;import os&lt;br /&gt;import psutil&lt;br /&gt;import shutil&lt;br /&gt;&lt;br /&gt;Затем напиши полностью рабочий код функций check_disk_space, check_memory_usage, get_top_processes и main. Не придумывай другие файлы.&lt;br /&gt;&lt;br /&gt;выполнить команду прямо внутри чата Aider с помощью символа ! или команды /run&lt;br /&gt;!python3 check_system.py&lt;br /&gt;&lt;br /&gt;текстовое поле Aider предназначено только для общения с ИИ. Модель не умеет сама выполнять системные команды Linux, если вы просто просите её об этом текстом&lt;br /&gt;Запускайте вашей командой с флагом --edit-format whole.&lt;br /&gt;Пишите модели только прямые технические задания (без «Привет» и «Как дела»).&lt;br /&gt;Используйте !команда для запуска терминальных утилит (например, !python3 check_system.py).Используйте /undo для отмены, если модель 3B запуталась и сделала не то.&lt;br /&gt;&lt;br /&gt;переключение формата&lt;br /&gt;Режим вопросов&lt;br /&gt;/chat-mode ask&lt;br /&gt;&lt;br /&gt;Облегченный формат поиска и замены&lt;br /&gt;/chat-mode diff-fenced&lt;br /&gt;&lt;br /&gt;Режим полной перезаписи файлов&lt;br /&gt;/chat-mode whole&lt;br /&gt;&lt;br /&gt;выполнить команду прямо внутри чата Aider с помощью символа ! или команды /run&lt;br /&gt;!python3 check_system.py&lt;br /&gt;/run ls -la&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Open Interpreter&lt;/summary&gt;&lt;br /&gt;Создайте Dockerfile&lt;br /&gt;vim Dockerfile&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
FROM python:3.11-slim

# Устанавливаем системные зависимости для работы с кодом
RUN apt-get update &amp;&amp; apt-get install -y \
    git \
    curl \
    &amp;&amp; rm -rf /var/lib/apt/lists/*

# Устанавливаем сам Open Interpreter
RUN pip install --no-cache-dir open-interpreter

# Точка входа
ENTRYPOINT [&quot;interpreter&quot;]
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;добавить поддержку Си JavaScript&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
FROM python:3.12-slim

# Устанавливаем ВСЕ основные компиляторы и утилиты сборки
RUN apt-get update &amp;&amp; apt-get install -y --no-install-recommends \
    git \
    nano \
    build-essential \    # Сюда входят gcc, g++, make для C/C++
    nodejs \             # Для JavaScript
    npm \
    &amp;&amp; rm -rf /var/lib/apt/lists/*

WORKDIR /workspace
RUN pip install --no-cache-dir open-interpreter
ENV EDITOR=nano
ENTRYPOINT [&quot;interpreter&quot;]
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Соберите образ&lt;br /&gt;docker build -t my-interpreter .&lt;br /&gt;&lt;br /&gt;Запуск my-interpreter&lt;br /&gt;доступ к /mnt/newdisk/builds&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
docker run -it --rm \
  --net=host \
  -v /mnt/newdisk/builds:/workspace \
  -v /mnt/newdisk/builds/.interpreter_metadata:/root/.cache/open-interpreter \
  -w /workspace \
  -e OPENAI_API_BASE=&quot;http://localhost:11434/v1&quot; \
  -e OPENAI_API_KEY=&quot;ollama&quot; \
  my-interpreter --model openai/qwen2.5-coder-3b:latest -y \
  --context_window 16384 \
  --max_tokens 4096 \
--system_message &quot;You are Qwen2.5-Coder, a local large language model trained by Alibaba Cloud. 
You are running locally via Ollama on the user&apos;s Linux machine. 
Answer user requests directly as a professional coding assistant. 
If asked who you are, explicitly state you are Qwen, not OpenAI.&quot;
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;для 7B модели можно добавить вывод на русском&lt;br /&gt;в --system_message &quot;CRITICAL RULE: Always communicate, explain your thoughts, and reply to the user strictly in RUSSIAN language.&quot;&lt;br /&gt;&lt;br /&gt;Промпт&lt;br /&gt;Создай файл hello.txt и напиши туда &quot;Привет из локального ИИ&quot;&lt;br /&gt;&lt;br /&gt;Промпт&lt;br /&gt;выведи в столбик результат выполнения команды bash ls -la .&lt;br /&gt;&lt;br /&gt;Промпт&lt;br /&gt;Write and run a Python script to create a file named local_success.txt with the text &quot;Hello from Qwen 3B!&quot; inside.&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Open WebUI&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/open-webui/open-webui&quot;&gt;https://github.com/open-webui/open-webui&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/open-webui/open-webui/pkgs/container/open-webui&quot;&gt;https://github.com/open-webui/open-webui/pkgs/container/open-webui&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;слабые модели на слабом компьютере не потянут&lt;br /&gt;&lt;br /&gt;ghcr.io/open-webui/open-webui  5.09GB&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
docker run -d --net=host \
  -v open-webui:/app/backend/data \
  -e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
  -e PORT=3000 \
  --name open-webui \
  --restart always \
  ghcr.io/open-webui/open-webui:main
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;docker stop open-webui&lt;br /&gt;docker start open-webui&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://localhost:3000&quot;&gt;http://localhost:3000&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;загрузка&lt;br /&gt;docker exec -it ollama-server ollama ps&lt;br /&gt;&lt;br /&gt;ошибки&lt;br /&gt;docker logs --tail 20 open-webui&lt;br /&gt;&lt;br /&gt;если &lt;a href=&quot;http://localhost:3000/error&quot;&gt;http://localhost:3000/error&lt;/a&gt; а в инкогнито открывается&lt;br /&gt;Как окончательно очистить кеш этого адреса в Chrome:&lt;br /&gt;Откройте вкладку с ошибкой в Chrome (&lt;a href=&quot;http://localhost:3000&quot;&gt;http://localhost:3000&lt;/a&gt;).&lt;br /&gt;Нажмите клавишу F12 (или Ctrl + Shift + I), чтобы открылась панель разработчика (неважно, на какой вкладке она откроется).&lt;br /&gt;Теперь нажмите правой кнопкой мыши на иконку «Обновить страницу» (закругленная стрелка) в самом верху браузера, рядом с адресной строкой.&lt;br /&gt;В появившемся секретном меню выберите самый нижний пункт: «Очистка кэша и аппаратная перезагрузка» (Empty Cache and Hard Reload).&lt;br /&gt;После этого Chrome сотрет скрытые фоновые скрипты старого контейнера, и страница мгновенно заработает в обычном режиме. Панель F12 можно будет закрыть.&lt;br /&gt;&lt;br /&gt;Сброс пароля&lt;br /&gt;Open WebUI хранит учетные записи и чаты в базе данных SQLite, находящейся в Docker-томе по умолчанию /var/lib/docker/volumes/open-webui/_data/webui.db. &lt;br /&gt;Сбросить пароль с сохранением данных можно командой &lt;br /&gt;docker exec -it open-webui open-webui admin reset-password&lt;br /&gt;либо удалить том, чтобы начать регистрацию заново.&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;взаимодействие с редакторами&lt;/summary&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Sublime Text&lt;/summary&gt;&lt;br /&gt;расширения для Sublime Text, которые взаимодействуют с моделями AI&lt;br /&gt;&lt;br /&gt;CodeAI:&lt;br /&gt;Синтаксический анализ: CodeAI выполняет синтаксический анализ и корректировку кода.&lt;br /&gt;Генерация кода: CodeAI генерирует код на основе предоставленного контекста.&lt;br /&gt;Обработка ошибок: CodeAI обрабатывает ошибки и предупреждения в коде.&lt;br /&gt;&lt;br /&gt;AI Code Companion:&lt;br /&gt;Автоматическое завершение: AI Code Companion автоматически завершает слова и команды.&lt;br /&gt;Генерация кода: AI Code Companion генерирует код на основе предоставленного контекста.&lt;br /&gt;Обработка ошибок: AI Code Companion обрабатывает ошибки и предупреждения в коде.&lt;br /&gt;&lt;br /&gt;AI Code Generator:&lt;br /&gt;Генерация кода: AI Code Generator генерирует код на основе предоставленного контекста.&lt;br /&gt;Обработка ошибок: AI Code Generator обрабатывает ошибки и предупреждения в коде.&lt;br /&gt;&lt;br /&gt;AI Code Completion:&lt;br /&gt;Автоматическое завершение: AI Code Completion автоматически завершает слова и команды.&lt;br /&gt;Генерация кода: AI Code Completion генерирует код на основе предоставленного контекста.&lt;br /&gt;Обработка ошибок: AI Code Completion обрабатывает ошибки и предупреждения в коде.&lt;br /&gt;&lt;br /&gt;AI Code Review:&lt;br /&gt;Ревью кода: AI Code Review выполняет ревью кода и выявляет ошибки и проблемы.&lt;br /&gt;Синтаксический анализ: AI Code Review выполняет синтаксический анализ и корректировку кода.&lt;br /&gt;Обработка ошибок: AI Code Review обрабатывает ошибки и предупреждения в коде.&lt;br /&gt;&lt;br /&gt;AI Code Refactoring:&lt;br /&gt;Рефакторинг кода: AI Code Refactoring выполняет рефакторинг кода и улучшает его читаемость и производительность.&lt;br /&gt;Синтаксический анализ: AI Code Refactoring выполняет синтаксический анализ и корректировку кода.&lt;br /&gt;Обработка ошибок: AI Code Refactoring обрабатывает ошибки и предупреждения в коде.&lt;br /&gt;&lt;br /&gt;AI Code Formatting:&lt;br /&gt;Форматирование кода: AI Code Formatting выполняет форматирование кода в соответствии с правилами стиля.&lt;br /&gt;Синтаксический анализ: AI Code Formatting выполняет синтаксический анализ и корректировку кода.&lt;br /&gt;Обработка ошибок: AI Code Formatting обрабатывает ошибки и предупреждения в коде.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/yaroslavyaroslav/OpenAI-sublime-text&quot;&gt;https://github.com/yaroslavyaroslav/OpenAI-sublime-text&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/dapepe/OllamaSublime&quot;&gt;https://github.com/dapepe/OllamaSublime&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Zed&lt;/summary&gt;&lt;br /&gt;Как подключить Zed к вашей Docker-Олламе за 1 минуту:&lt;br /&gt;Откройте Zed.Перейдите в его файлы глобальных настроек: нажмите комбинацию клавиш Ctrl + , (или в меню Zed -&amp;gt; Open Settings).&lt;br /&gt;В открывшийся JSON-файл конфигурации добавьте следующий блок настроек (пропишите точное имя вашей проиндексированной модели qwen2.5-coder-3b):&lt;br /&gt;~/.config/zed/settings.json&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;language_models&quot;: {
    &quot;ollama&quot;: {
      &quot;api_url&quot;: &quot;http://localhost:11434&quot;,
      &quot;auto_discover&quot;: false,
      &quot;available_models&quot;: [
        {
          &quot;name&quot;: &quot;qwen2.5-coder-3b:latest&quot;,
          &quot;display_name&quot;: &quot;Local Qwen 3B&quot;,
          &quot;max_tokens&quot;: 16384
        }
      ]
    }
  },
  &quot;assistant&quot;: {
    &quot;version&quot;: &quot;2&quot;,
    &quot;default_model&quot;: {
      &quot;provider&quot;: &quot;ollama&quot;,
      &quot;model&quot;: &quot;qwen2.5-coder-3b:latest&quot;
    }
  }
}

&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Сохраните файл настроек (Ctrl + S).&lt;br /&gt;&lt;br /&gt;Как пользоваться ИИ прямо в коде:&lt;br /&gt;Откройте любой файл с кодом проекта.Выделите кусок кода, нажмите Ctrl + Enter (вызов Inline-ассистента Zed), напишите текстовый запрос на русском (например: «Добавь обработку исключений») и нажмите Enter.&lt;br /&gt;В этот момент Zed отправит сетевой запрос на порт 11434. Ваш изолированный Docker-контейнер подхватит его, прочитает веса модели с диска /mnt/newdisk/ollama_models и начнет выводить код прямо в редакторе&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Vim&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/gergap/vim-ollama&quot;&gt;https://github.com/gergap/vim-ollama&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/greeschenko/vim9-ollama&quot;&gt;https://github.com/greeschenko/vim9-ollama&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/olimorris/codecompanion.nvim&quot;&gt;https://github.com/olimorris/codecompanion.nvim&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/tzachar/cmp-ai&quot;&gt;https://github.com/tzachar/cmp-ai&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/JosefAlbers/vim-lm&quot;&gt;https://github.com/JosefAlbers/vim-lm&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/nathanbraun/nvim-ai&quot;&gt;https://github.com/nathanbraun/nvim-ai&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/Davidyz/VectorCode&quot;&gt;https://github.com/Davidyz/VectorCode&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/olimorris/codecompanion.nvim&quot;&gt;https://github.com/olimorris/codecompanion.nvim&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/Exafunction/windsurf.vim&quot;&gt;https://github.com/Exafunction/windsurf.vim&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/whatever555/vim-code-checker&quot;&gt;https://github.com/whatever555/vim-code-checker&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/nomnivore/ollama.nvim&quot;&gt;https://github.com/nomnivore/ollama.nvim&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/avante-corp/avante.nvim&quot;&gt;https://github.com/avante-corp/avante.nvim&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/carlos-algms/agentic.nvim&quot;&gt;https://github.com/carlos-algms/agentic.nvim&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/saya-ashen/agent-workbench.nvim&quot;&gt;https://github.com/saya-ashen/agent-workbench.nvim&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/David-Kunz/gen.nvim&quot;&gt;https://github.com/David-Kunz/gen.nvim&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/huggingface/llm.nvim&quot;&gt;https://github.com/huggingface/llm.nvim&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/yacineMTB/dingllm.nvim&quot;&gt;https://github.com/yacineMTB/dingllm.nvim&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/frankroeder/parrot.nvim&quot;&gt;https://github.com/frankroeder/parrot.nvim&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/GeorgesAlkhouri/nvim-aider&quot;&gt;https://github.com/GeorgesAlkhouri/nvim-aider&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/nekowasabi/aider.vim&quot;&gt;https://github.com/nekowasabi/aider.vim&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/joshuavial/aider.nvim&quot;&gt;https://github.com/joshuavial/aider.nvim&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/neovim/neovim&quot;&gt;https://github.com/neovim/neovim&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/LazyVim/LazyVim&quot;&gt;https://github.com/LazyVim/LazyVim&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;развернуть в докере&lt;/summary&gt;&lt;br /&gt;для изоляции моделей лучше использовать докер&lt;br /&gt;&lt;br /&gt;Перенос образов docker&lt;br /&gt;sudo systemctl stop docker.socket&lt;br /&gt;sudo mkdir -p /mnt/newdisk/docker&lt;br /&gt;sudo rsync -aP /var/lib/docker/ /mnt/newdisk/docker/&lt;br /&gt;sudo rsync -aP /var/lib/docker/ /mnt/newdisk/docker/&lt;br /&gt;&lt;br /&gt;sudo vim /etc/docker/daemon.json&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;data-root&quot;: &quot;/mnt/newdisk/docker&quot;
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;sudo systemctl daemon-reload&lt;br /&gt;sudo systemctl start docker.socket&lt;br /&gt;docker info | grep &quot;Docker Root Dir&quot;&lt;br /&gt;docker images&lt;br /&gt;sudo rm -rf /var/lib/docker&lt;br /&gt;&lt;br /&gt;Запуск Олламы как фонового сервера (Для работы Open WebUI или Aider)&lt;br /&gt;mkdir -p /mnt/newdisk/ollama_models&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
cat &amp;lt;&amp;lt; &apos;EOF&apos; &amp;gt; Modelfile
FROM /workspace/qwen2.5-coder-3b-instruct-q4_k_m.gguf
PARAMETER num_ctx 16384
TEMPLATE &quot;\n&quot;
EOF
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;образ 5 гигов&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
docker run -it --rm \
  -v /mnt/newdisk/ollama_models:/root/.ollama \
  -v $(pwd):/workspace -w /workspace \
  --entrypoint &quot;&quot; \
  ollama/ollama sh -c &quot;ollama serve &amp; sleep 3 &amp;&amp; ollama create qwen2.5-coder-3b -f /workspace/Modelfile&quot;
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Сделать более лёгкий образ&lt;br /&gt;vim Dockerfile&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
FROM debian:bookworm-slim

# Устанавливаем сертификаты, curl и zstd, очищая кэш apt
RUN apt-get update &amp;&amp; apt-get install -y ca-certificates curl zstd &amp;&amp; rm -rf /var/lib/apt/lists/*

WORKDIR /workspace

# Скачиваем и распаковываем в один поток прямо в память контейнера
RUN curl -L https://github.com/ollama/ollama/releases/download/v0.32.14/ollama-linux-amd64.tar.zst | tar -I zstd -xf - -C /usr

ENTRYPOINT [&quot;/usr/bin/ollama&quot;]
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Собрать&lt;br /&gt;docker build -t ollama-debian12 .&lt;br /&gt;&lt;br /&gt;индексация модели, запустить&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
docker run -it --rm --net=host \
  -v /mnt/newdisk/ollama_models:/root/.ollama \
  -v &quot;$(pwd)&quot;:/workspace -w /workspace \
  --entrypoint &quot;&quot; \
  ollama-debian12 sh -c &quot;ollama serve &amp; sleep 3 &amp;&amp; ollama create qwen2.5-coder-3b -f /workspace/Modelfile&quot;
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;rm ~/Modelfile&lt;br /&gt;&lt;br /&gt;Чат с моделью&lt;br /&gt;vim ~/.local/bin/ai-chat&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
#!/bin/sh
if [ ! -d &quot;/mnt/newdisk/ollama_models&quot; ]; then
    echo &quot;Ошибка: Диск с моделями по пути /mnt/newdisk/ollama_models не найден.&quot;
    exit 1
fi

# Запускаем интерактивный изолированный чат
exec docker run -it --rm --net=host \
  -v /mnt/newdisk/ollama_models:/root/.ollama \
  -v &quot;$(pwd)&quot;:/workspace -w /workspace \
  ollama-debian12 run qwen2.5-coder-3b:latest &quot;$@&quot;
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;chmod +x ~/.local/bin/ai-chat&lt;br /&gt;&lt;br /&gt;Запуск сервера&lt;br /&gt;vim ~/.local/bin/ai-server&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
#!/bin/sh

if [ ! -d &quot;/mnt/newdisk/ollama_models&quot; ]; then
    echo &quot;Ошибка: Диск с моделями не смонтирован.&quot;
    exit 1
fi

case &quot;$1&quot; in
    &quot;start&quot;)
        if docker ps -a --format &apos;&apos; | grep -Eq &quot;^ollama-server$&quot;; then
            echo &quot;Контейнер ollama-server уже существует. Перезапускаю...&quot;
            docker start ollama-server
        else
            docker run -d --net=host --restart unless-stopped \
              -v /mnt/newdisk/ollama_models:/root/.ollama \
              --name ollama-server ollama-debian12 serve
            echo &quot;Фоновый CPU-сервер Ollama запущен на порту 11434.&quot;
        fi
        ;;
    &quot;stop&quot;)
        docker stop ollama-server
        echo &quot;Фоновый сервер Ollama успешно остановлен.&quot;
        ;;
    &quot;status&quot;)
        docker ps -f name=ollama-server
        ;;
    *)
        echo &quot;Использование: ai-server start | stop | status&quot;
        ;;
esac
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;chmod +x ~/.local/bin/ai-server&lt;br /&gt;&lt;br /&gt;юнит systemd&lt;br /&gt;&lt;br /&gt;mkdir -p ~/.config/systemd/user/&lt;br /&gt;vim ~/.config/systemd/user/ollama-docker.service&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
[Unit]
Description=Ollama Inside Docker Debian12 (CPU Only)
After=default.target

[Service]
Type=simple
TimeoutStartSec=0
#Environment=&quot;OLLAMA_ORIGINS=*&quot;
ExecStartPre=-/usr/bin/docker stop ollama-server
ExecStartPre=-/usr/bin/docker rm ollama-server
ExecStart=/usr/bin/docker run --net=host \
  -v /mnt/newdisk/ollama_models:/root/.ollama \
  --name ollama-server ollama-debian12 serve
ExecStop=/usr/bin/docker stop ollama-server
Restart=always
RestartSec=3

[Install]
WantedBy=default.target
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;systemctl --user daemon-reload&lt;br /&gt;systemctl --user enable ollama-docker.service&lt;br /&gt;systemctl --user start ollama-docker.service&lt;br /&gt;systemctl --user stop ollama-docker.service&lt;br /&gt;systemctl --user status ollama-docker.service&lt;br /&gt;systemctl --user list-units --type=service --state=running&lt;br /&gt;&lt;br /&gt;обращение к Ollama в докере&lt;br /&gt;docker exec -it ollama-server ollama --help&lt;br /&gt;docker exec -it ollama-server ollama list&lt;br /&gt;&lt;br /&gt;Скачать новую модель (например, Llama 3):&lt;br /&gt;curl &lt;a href=&quot;http://127.0.0.1:11434&quot;&gt;http://127.0.0.1:11434&lt;/a&gt; -H &quot;Content-Type: application/json&quot; -d &apos;{&quot;name&quot;: &quot;llama3.1:8b&quot;}&apos;&lt;br /&gt;или&lt;br /&gt;docker exec -it ollama-server ollama run llama3&lt;br /&gt;docker run -it --rm -v /mnt/newdisk/ollama_models:/root/.ollama ollama-debian12 pull llama3.1:8b&lt;br /&gt;docker run -it --rm -v /mnt/newdisk/ollama_models:/root/.ollama ollama-debian12 pull gemma4:e4b&lt;br /&gt;docker run -it --rm -v /mnt/newdisk/ollama_models:/root/.ollama ollama-debian12 pull qwen2.5-coder:7b&lt;br /&gt;&lt;br /&gt;регистрация скачанных вручную в папку /mnt/newdisk/ollama_models&lt;br /&gt;подробно содержание Modelfile см. в модели&lt;br /&gt;&lt;br /&gt;vim /mnt/newdisk/ollama_models/Modelfile&lt;br /&gt;FROM /root/.ollama/my_model.gguf&lt;br /&gt;&lt;br /&gt;docker exec -it ollama-server ollama create my-custom-model -f /root/.ollama/Modelfile&lt;br /&gt;&lt;br /&gt;vim $(pwd)/Modelfile&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
cat &amp;lt;&amp;lt; &apos;EOF&apos; &amp;gt; ~/Modelfile
FROM /root/.ollama/qwen2.5-coder-7b-instruct-q4_k_m.gguf
PARAMETER num_ctx 16384
EOF
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;docker exec -i ollama-server ollama create qwen2.5-coder:7b-q4 -f - &amp;lt; ~/Modelfile&lt;br /&gt;&lt;details&gt;&lt;summary&gt;простейшая вебморда&lt;/summary&gt;&lt;br /&gt;vim ~/.local/bin/ai-browser&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
#!/bin/sh

WEBUI_DIR=&quot;$HOME/.local/share/ai-webui&quot;
PID_FILE=&quot;/tmp/ai-webui.pid&quot;
PORT=3666

# Функция проверки статуса сервера
check_status() {
    if [ -f &quot;$PID_FILE&quot; ]; then
        PID=$(cat &quot;$PID_FILE&quot;)
        if kill -0 &quot;$PID&quot; 2&amp;gt;/dev/null; then
            return 0 # Работает
        fi
    fi
    return 1 # Не работает
}

case &quot;$1&quot; in
    &quot;start&quot;|&quot;&quot;)
        # 1. Проверяем Олламу в Docker
        if ! docker ps --format &apos;&apos; | grep -Eq &quot;^ollama-server$&quot;; then
            echo &quot;Фоновый сервер Ollama выключен. Запускаю через systemd...&quot;
            systemctl --user start ollama-docker.service
            sleep 2
        fi

        # 2. Запускаем веб-сервер Python, если он еще не запущен
        if check_status; then
            echo &quot;Веб-интерфейс уже запущен (PID: $(cat $PID_FILE)).&quot;
        else
            echo &quot;Запускаю легковесный веб-сервер в папе интерфейса...&quot;
            cd &quot;$WEBUI_DIR&quot; &amp;&amp; python3 -m http.server $PORT &amp;gt; /dev/null 2&amp;gt;&amp;1 &amp;
            # Сохраняем PID запущенного Python-процесса в файл
            echo $! &amp;gt; &quot;$PID_FILE&quot;
            sleep 1
        fi

        # 3. Открываем чат в браузере
        echo &quot;Открываю изолированный чат на порту $PORT...&quot;
        echo &quot;перейдите по адресу http://127.0.0.1:$PORT&quot;
#        xdg-open &quot;http://127.0.0.1:$PORT&quot;
        ;;

    &quot;stop&quot;)
        if check_status; then
            PID=$(cat &quot;$PID_FILE&quot;)
            echo &quot;Останавливаю веб-сервер Python (PID: $PID)...&quot;
            kill &quot;$PID&quot;
            rm -f &quot;$PID_FILE&quot;
            echo &quot;Веб-интерфейс успешно остановлен.&quot;
        else
            echo &quot;Веб-сервер Python уже остановлен.&quot;
            rm -f &quot;$PID_FILE&quot;
        fi
        ;;

    &quot;status&quot;)
        if check_status; then
            echo &quot;Статус: Веб-интерфейс РАБОТАЕТ (PID: $(cat $PID_FILE), Порт: $PORT).&quot;
        else
            echo &quot;Статус: Веб-интерфейс ОСТАНОВЛЕН.&quot;
        fi
        ;;

    *)
        echo &quot;Использование: ai-browser [start | stop | status]&quot;
        exit 1
        ;;
esac
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;chmod +x ~/.local/bin/ai-browser&lt;br /&gt;&lt;br /&gt;mkdir -p ~/.local/share/ai-webui&lt;br /&gt;vim ~/.local/share/ai-webui/index.html&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;ru&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;title&amp;gt;Локальный ИИ Чат&amp;lt;/title&amp;gt;
    &amp;lt;style&amp;gt;
        body { font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, sans-serif; background: #1e1e2e; color: #cdd6f4; max-width: 95%; margin: 20px auto; padding: 10px; }

        /* Главное окно чата */
        #chat { height: 450px; min-height: 200px; min-width: 300px; border: 1px solid #45475a; background: #11111b; overflow: auto; padding: 15px; border-radius: 8px; margin-bottom: 15px; resize: both; }

        /* Индивидуальные блоки сообщений */
        .msg { margin-bottom: 12px; padding: 12px; border-radius: 6px; line-height: 1.5; white-space: pre-wrap; overflow: auto; min-height: 40px; min-width: 150px; }
        .user { background: #313244; text-align: right; color: #89b4fa; resize: both; }
        .ai { background: #181825; color: #a6e3a1; border-left: 4px solid #a6e3a1; resize: both; text-align: left; }

        /* Контейнер ввода теперь вертикальный */
        #input-area { display: flex; flex-direction: column; gap: 10px; width: 100%; }

        /* Поле ввода (textarea) теперь занимает всю ширину и может тянуться во все стороны */
        textarea { width: calc(100% - 26px); padding: 12px; background: #313244; border: 1px solid #45475a; color: #cdd6f4; border-radius: 6px; font-size: 16px; resize: both; min-height: 40px; min-width: 200px; height: 60px; font-family: inherit; }

        /* Кнопка встает снизу справа от формы */
        button { align-self: baseline; padding: 12px 24px; background: #89b4fa; border: none; color: #11111b; font-weight: bold; border-radius: 6px; cursor: pointer; height: 45px; }
        button:hover { background: #b4befe; }
    &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h2&amp;gt;Изолированный CPU-чат (Qwen 3B)&amp;lt;/h2&amp;gt;
    &amp;lt;div id=&quot;chat&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;div id=&quot;input-area&quot;&amp;gt;
        &amp;lt;textarea id=&quot;prompt&quot; placeholder=&quot;Введите ваш запрос (Ctrl+Enter для отправки, Shift+Enter для новой строки)...&quot; onkeydown=&quot;if(event.key===&apos;Enter&apos; &amp;amp;&amp;amp; event.ctrlKey) { event.preventDefault(); send(); }&quot;&amp;gt;&amp;lt;/textarea&amp;gt;
        &amp;lt;button onclick=&quot;send()&quot;&amp;gt;Отправить&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;script&amp;gt;
        async function send() {
            const input = document.getElementById(&apos;prompt&apos;);
            const chat = document.getElementById(&apos;chat&apos;);
            const text = input.value.trim();
            if (!text) return;

            chat.innerHTML += `&amp;lt;div class=&quot;msg user&quot;&amp;gt;&amp;lt;b&amp;gt;Вы:&amp;lt;/b&amp;gt;\n${text}&amp;lt;/div&amp;gt;`;
            input.value = &apos;&apos;;
            chat.scrollTop = chat.scrollHeight;

            const aiDiv = document.createElement(&apos;div&apos;);
            aiDiv.className = &apos;msg ai&apos;;
            aiDiv.innerHTML = &apos;&amp;lt;b&amp;gt;ИИ:&amp;lt;/b&amp;gt; Думает...&apos;;
            chat.appendChild(aiDiv);

            try {
                const response = await fetch(&apos;http://localhost:11434/api/generate&apos;, {
                    method: &apos;POST&apos;,
                    headers: { &apos;Content-Type&apos;: &apos;application/json&apos; },
                    body: JSON.stringify({
                        model: &apos;qwen2.5-coder-3b:latest&apos;,
                        prompt: text,
                        stream: false
                    })
                });
                const data = await response.json();
                aiDiv.innerHTML = `&amp;lt;b&amp;gt;ИИ:&amp;lt;/b&amp;gt;\n${data.response}`;
            } catch (err) {
                aiDiv.innerHTML = `&amp;lt;b&amp;gt;Ошибка:&amp;lt;/b&amp;gt; Не удалось подключиться к Ollama. Проверьте, запущен ли сервер systemctl.`;
            }
            chat.scrollTop = chat.scrollHeight;
        }
    &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;ссылки&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/ollama/ollama/&quot;&gt;https://github.com/ollama/ollama/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://docs.ollama.com/linux&quot;&gt;https://docs.ollama.com/linux&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/ggml-org/llama.cpp/releases&quot;&gt;https://github.com/ggml-org/llama.cpp/releases&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/Aider-AI/aider&quot;&gt;https://github.com/Aider-AI/aider&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://aider.chat/docs/install.html&quot;&gt;https://aider.chat/docs/install.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://hub.docker.com/r/paulgauthier/aider&quot;&gt;https://hub.docker.com/r/paulgauthier/aider&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/lloydchang/Aider-AI-aider-fka-paul-gauthier-aider&quot;&gt;https://github.com/lloydchang/Aider-AI-aider-fka-paul-gauthier-aider&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/open-webui/open-webui&quot;&gt;https://github.com/open-webui/open-webui&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/danielmiessler/Fabric/releases&quot;&gt;https://github.com/danielmiessler/Fabric/releases&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/gitlawb/zero&quot;&gt;https://github.com/gitlawb/zero&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/taketwo/llm-ollama&quot;&gt;https://github.com/taketwo/llm-ollama&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/llm-as-a-verifier/llm-as-a-verifier&quot;&gt;https://github.com/llm-as-a-verifier/llm-as-a-verifier&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.reddit.com/r/ChatGPTCoding/&quot;&gt;https://www.reddit.com/r/ChatGPTCoding/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/951962/&quot;&gt;Ollama от А до Я: как выбрать модель, настроить и интегрировать&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/1027658/&quot;&gt;Оффлайн агент IDE Continue за 15 минут&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://llmstudio.ru/blog/llamacpp&quot;&gt;llama.cpp и GGUF - как использовать llama.cpp для локального запуска моделей LLaMA&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/justxor/Aiagentsfullcourse&quot;&gt;https://github.com/justxor/Aiagentsfullcourse&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=5879249&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/5879249.html</comments>
  <category>docker</category>
  <category>ноут</category>
  <category>ии</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/5878948.html</guid>
  <pubDate>Sat, 15 Aug 2026 13:47:23 GMT</pubDate>
  <title>настройка редактора Zed, часть 3</title>
  <link>https://uzverss.dreamwidth.org/5878948.html</link>
  <description>&lt;br&gt;&lt;a href=&quot;https://zed.dev/&quot;&gt;&lt;img src=&quot;https://itshaman.ru/images/21244_1600.webp&quot; width=&quot;405&quot;&gt;&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/127213.html&quot;&gt;настройка редактора Zed, часть 1 LJ&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5878518.html&quot;&gt;настройка редактора Zed, часть 1 DW&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/127479.html&quot;&gt;настройка редактора Zed, часть 2 LJ&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5878594.html&quot;&gt;настройка редактора Zed, часть 2 DW&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;ознакомится&lt;/summary&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;работа Git в Zed&lt;/summary&gt;&lt;br /&gt;Что умеет Git в Zed по умолчанию?&lt;br /&gt;Цветовая разметка изменений (в левой панели файлов):&lt;br /&gt;Зеленый цвет названия файла — файл только что создан и еще не отслеживается (Untracked).&lt;br /&gt;Желтый/Оранжевый цвет — файл изменен (Modified).&lt;br /&gt;Индикаторы изменений прямо в коде (Gutter):&lt;br /&gt;Слева от номеров строк появляются цветные вертикальные полоски: &lt;br /&gt;зеленая (добавленная строка), желтая (измененная) или красный треугольник (удаленный текст). &lt;br /&gt;Кликнув на эту полоску, можно мгновенно откатить изменение конкретной строки.&lt;br /&gt;&lt;br /&gt;Строка состояния (справа внизу):&lt;br /&gt;Там всегда отображается название вашей текущей Git-ветки (например, main или dev). Кликнув на нее, можно быстро переключиться на другую ветку или создать новую.&lt;br /&gt;&lt;br /&gt;Настройка Git-интеграции&lt;br /&gt;Поскольку вы работаете на Linux, для полноценного удобства полезно настроить две вещи.&lt;br /&gt;1. Отображение автора строки (Git Blame)&lt;br /&gt;Очень удобная функция: когда вы ставите курсор на любую строку кода, редактор показывает справа бледным текстом, кто, когда и с каким комментарием (commit message) изменил эту строку.&lt;br /&gt;Чтобы включить это, нажмите Ctrl + , (откроются настройки settings.json) и добавьте параметр:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;git&quot;: {
    &quot;inline_blame&quot;: {
      &quot;enabled&quot;: true,
      // Показывать подсказку через 0.5 секунды после остановки курсора
      &quot;delay_ms&quot;: 500 
    }
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;2. Добавление скрытых папок Git и сборки в игнор поиска&lt;br /&gt;Чтобы при глобальном поиске по проекту (Ctrl + Shift + F) Zed не тратил оперативную память на сканирование внутренних файлов Git, истории или папки сборки build/ из нашего универсального Makefile, &lt;br /&gt;добавьте правила исключения в тот же settings.json:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;file_scan_exclusions&quot;: [
    &quot;**/.git&quot;,
    &quot;**/.svn&quot;,
    &quot;**/node_modules&quot;,
    &quot;**/build&quot;
  ]
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Как работать с Git в Zed через клавиатуру?&lt;br /&gt;Вы можете вызывать встроенные команды Git через стандартную командную панель:&lt;br /&gt;Нажмите Ctrl + Shift + P.&lt;br /&gt;Введите слово git.&lt;br /&gt;Вы увидите список доступных команд, таких как Git: Toggle Timeline (посмотреть историю изменений текущего файла) или Git: Open Changed Files.&lt;br /&gt;&lt;br /&gt;Если вам нужно сделать коммит или отправить код на удаленный репозиторий (Git Push), &lt;br /&gt;вы можете нажать Ctrl + ~ (открыть встроенный терминал Zed) и выполнить стандартные консольные команды — это работает в едином окне и бесшовно.&lt;br /&gt;Используете ли вы Git локально для хранения версий на ноутбуке, или вам нужно настроить отправку кода между вашим ноутбуком и изолированным сервером через локальный Git-репозиторий?&lt;br /&gt;&lt;br /&gt;Сценарий 1. Проекты с удаленными репозиториями (SSH-серверы)&lt;br /&gt;Если проект лежит на вашем мощном сервере, и там же инициализирован Git, вам не нужно вручную делать git push или git pull через флешку.&lt;br /&gt;Когда вы подключаетесь к серверу через Zed по SSH (используя настроенный нами ранее алиас dev-server), встроенный Git в Zed автоматически подхватывает серверный репозиторий.&lt;br /&gt;Вся цветовая разметка (зеленые и желтые строки) будет работать прямо через сеть в реальном времени.&lt;br /&gt;Чтобы быстро синхронизировать код с удаленным сервером (например, сделать коммит), откройте встроенный терминал в Zed (Ctrl + ~). Он автоматически откроется внутри вашего сервера. Вы можете сразу писать:&lt;br /&gt;git add .&lt;br /&gt;git commit -m &quot;Добавил универсальный Makefile&quot;&lt;br /&gt;git push origin main&lt;br /&gt;&lt;br /&gt;Сценарий 2. Полностью локальные проекты (на ноутбуке)&lt;br /&gt;Для проектов, которые вы ведете локально на ноутбуке, очень важно настроить глобальный файл исключений (.gitignore), чтобы в ваши локальные репозитории случайно не попали временные файлы компиляции Си или кэш Python.&lt;br /&gt;Чтобы не создавать .gitignore в каждой папке вручную, настройте один глобальный файл для вашего пользователя в Debian:&lt;br /&gt;&lt;br /&gt;Создайте глобальный файл исключений в терминале:bashnano ~/.config/git/ignore&lt;br /&gt;&lt;br /&gt;Вставьте туда список файлов, которые Git должен навсегда игнорировать на вашем ноутбуке:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
# Временные файлы Python
__pycache__/
*.pyc
*.pyo
.pytest_cache/

# Файлы сборки Си (из нашего универсального Makefile)
build/
my_program
*.o

# Локальные настройки и кэш редактора Zed
.zed/
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Сохраните файл (Ctrl+O, затем Enter) и выйдете (Ctrl+X).&lt;br /&gt;Теперь в любом локальном проекте, где вы введете git init, Git автоматически проигнорирует этот системный мусор, а Zed не будет подсвечивать папку build/ желтым цветом.&lt;br /&gt;&lt;br /&gt;Лайфхак для Zed: Разделение настроек под разные проекты&lt;br /&gt;Так как у вас разные проекты (локальные Python-скрипты, низкоуровневый Си на сервере, веб-интерфейсы), вам может быть неудобно держать все настройки в одном глобальном файле settings.json.&lt;br /&gt;Zed позволяет создавать локальные настройки для конкретной папки.&lt;br /&gt;Создайте в корне любого вашего проекта скрытую папку .zed.&lt;br /&gt;Внутри неё создайте файл settings.json.&lt;br /&gt;Все параметры, написанные в этом файле, будут работать только для этого проекта.&lt;br /&gt;&lt;br /&gt;Пример: &lt;br /&gt;Для локального Python-проекта в папке .zed/settings.json вы можете включить автокомплит Ollama 1.5B, &lt;br /&gt;а для тяжелого проекта на Си, открытого по SSH на мощном сервере — переписать настройки на большую модель Qwen 7B и жестко включить форматировщик clang-format.&lt;br /&gt;&lt;br /&gt;Использование SSH-ключа с парольной фразой (passphrase) — это отличная практика для безопасности, но в графических редакторах она часто вызывает неудобства, так как система постоянно запрашивает ввод пароля при попытке связаться с удаленным Git-репозиторием.&lt;br /&gt;Чтобы решить эту проблему в Debian 13, нужно настроить ssh-agent. Это встроенная служба Linux, которая один раз при загрузке системы спрашивает ваш пароль, расшифровывает ключ в оперативной памяти и затем автоматически предоставляет его редактору Zed и утилите Git на протяжении всей сессии.Вот как настроить автоматический запуск агента, чтобы он работал без вашего вмешательства.&lt;br /&gt;&lt;br /&gt;Шаг 1. Настройка автозапуска агента в вашем профиле&lt;br /&gt;Чтобы служба ssh-agent автоматически стартовала в вашей графической оболочке Debian при каждом включении ноутбука, добавьте несколько строк в конфигурационный файл вашего пользователя.&lt;br /&gt;Откройте терминал на ноутбуке и откройте файл .bashrc (или .zshrc, если вы меняли оболочку):&lt;br /&gt;&lt;br /&gt;vim ~/.bashrc&lt;br /&gt;&lt;br /&gt;Прокрутите файл в самый конец и вставьте этот стандартный скрипт автоматического подхвата агента:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
# Автозапуск и проверка ssh-agent
if [ -z &quot;$SSH_AUTH_SOCK&quot; ]; then
   eval &quot;$(ssh-agent -s)&quot; &amp;gt; /dev/null
fi
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Сохраните файл (Ctrl+O, затем Enter) и выйдете (Ctrl+X).&lt;br /&gt;Примените настройки прямо сейчас без перезагрузки:&lt;br /&gt;source ~/.bashrc&lt;br /&gt;&lt;br /&gt;Шаг 2. Добавление ключа в память агентаТеперь нужно сказать агенту, чтобы он запомнил ваш защищенный ключ. Выполните команду:&lt;br /&gt;ssh-add ~/.ssh/id_ed25519&lt;br /&gt;&lt;br /&gt;Если вы использовали стандартное имя ключа RSA, то путь будет ~/.ssh/id_rsa).&lt;br /&gt;Система один последний раз попросит вас ввести вашу парольную фразу (passphrase). После успешного ввода ключ сохранится в оперативной памяти ноутбука.&lt;br /&gt;&lt;br /&gt;Шаг 3. Автоматизация через SSH Config (Самый важный шаг)&lt;br /&gt;Чтобы вам не приходилось вводить команду ssh-add вручную после каждой перезагрузки ноутбука, настройте встроенный механизм автоматического добавления ключей в SSH.&lt;br /&gt;Откройте ваш конфигурационный файл SSH, который мы создавали ранее:&lt;br /&gt;&lt;br /&gt;vim ~/.ssh/config&lt;br /&gt;&lt;br /&gt;Добавьте в самый верх файла (над вашим Host dev-server) две глобальные строчки:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
Host *
    AddKeysToAgent yes
    IgnoreUnknown UseKeychain
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Как это будет работать теперь?&lt;br /&gt;Вы включаете ноутбук и запускаете Zed.&lt;br /&gt;Когда вы открываете проект, связанный с удаленным сервером по SSH, или пытаетесь сделать git push в удаленный репозиторий, Git обращается к SSH-клиенту.&lt;br /&gt;Благодаря параметру AddKeysToAgent yes, система сама на лету подхватывает ваш ключ с парольной фразой, проверяет его в ssh-agent и мгновенно одобряет операцию.&lt;br /&gt;Ввод паролей больше не прерывает вашу работу в редакторе, а безопасность ключа остается на максимальном уровне.&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;работа с файлами сборки Makefile&lt;/summary&gt;&lt;br /&gt;Для работы с файлами сборки Makefile в редакторе Zed на Linux все готово «из коробки», так как поддержка этого инструмента встроена в ядро редактора.&lt;br /&gt;Однако у утилиты make есть одна жесткая историческая особенность: она синтаксически не принимает пробелы вместо табуляции. &lt;br /&gt;Если в правиле сборки вместо знака Tab поставить 4 или 8 пробелов, утилита выдаст знаменитую ошибку Makefile:*** missing separator. Stop.&lt;br /&gt;&lt;br /&gt;Шаг 1. Настройка автоматических табов для Makefile в settings.json&lt;br /&gt;Поскольку для Python, JSON и YAML мы настроили использование пробелов, нам нужно сделать исключение конкретно для синтаксиса make.&lt;br /&gt;Откройте глобальные настройки (Ctrl + ,) и добавьте в самый конец конфигурационного JSON специальный языковой блок:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;languages&quot;: {
    &quot;Makefile&quot;: {
      &quot;tab_size&quot;: 4,
      // Принудительно отключаем замену табов на пробелы
      &quot;hard_tabs&quot;: true,
      // Отключаем внешние форматировщики, чтобы они не перевели табы в пробелы
      &quot;format_on_save&quot;: &quot;off&quot;
    }
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;После этого, как только вы откроете или создадите файл с именем Makefile (или makefile), &lt;br /&gt;Zed автоматически переключит клавишу Tab в режим вставки «жестких» символов табуляции, и сборка на вашем сервере никогда не сломается.&lt;br /&gt;&lt;br /&gt;Шаг 2. Как запускать сборку одной кнопкой (через Tasks)&lt;br /&gt;Вместо того чтобы каждый раз открывать терминал и вручную писать команду make, вы можете привязать сборку к нашей системе задач Zed, которую мы настроили ранее.&lt;br /&gt;Откройте файл задач ~/.config/zed/tasks.json (или через командную панель Open Tasks) и добавьте туда новую задачу сборки:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
[
  {
    &quot;label&quot;: &quot;Make - Build target&quot;,
    &quot;command&quot;: &quot;make&quot;,
    // Задача автоматически запустится в той папке, где лежит открытый Makefile
    &quot;cwd&quot;: &quot;$ZED_WORK_DIR&quot;,
    &quot;use_new_terminal&quot;: false,
    &quot;allow_concurrent_runs&quot;: false
  }
]
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Шаг 3. Привязка горячей клавиши&lt;br /&gt;Теперь откройте файл настроек клавиш keymap.json (Ctrl + K, затем Ctrl + S) и назначьте, например, классическое сочетание Ctrl + B (Build) для запуска вашей команды:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
[
  {
    &quot;context&quot;: &quot;Editor&quot;,
    &quot;bindings&quot;: {
      // Запуск компиляции через Makefile
      &quot;ctrl-b&quot;: [&quot;task::Spawn&quot;, { &quot;taskName&quot;: &quot;Make - Build target&quot; }]
    }
  }
]
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Теперь, когда вы пишете код на Си, вам достаточно нажать Ctrl + B: снизу плавно откроется панель терминала Zed, утилита make прочитает ваш файл конфигурации, вызовет gcc и скомпилирует проект.&lt;br /&gt;&lt;br /&gt;Вот пример действительно универсального и продвинутого Makefile, который идеально подходит для компиляции Си-проектов любой вложенности &lt;br /&gt;Чтобы ваш универсальный Makefile успешно подключал внешние библиотеки (например, math.h для сложных математических вычислений, pthread для многопоточности или sqlite3 для баз данных) &lt;br /&gt;на вашем сервере Debian, в конфигурацию нужно добавить специальную переменную линковщика — LDFLAGS (Linker Flags).&lt;br /&gt;Если этого не сделать, компилятор выдаст ошибки сборки вроде undefined reference to &apos;pthread_create&apos; или undefined reference to &apos;sqrt&apos;.&lt;br /&gt;&lt;br /&gt;Создайте файл Makefile&lt;br /&gt;Создайте этот файл в корне вашего проекта. Напоминаю: убедитесь, что в настройках Zed для Makefile включены hard_tabs (строки команд ниже должны начинаться с символа Tab, а не с пробелов).&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
# ====================================================================
# УНИВЕРСАЛЬНЫЙ MAKEFILE ДЛЯ СИ-ПРОЕКТОВ С ЛЮБОЙ ВЛОЖЕННОСТЬЮ ПОДПАПОК
# ====================================================================

# Название итогового исполняемого файла
TARGET = my_program

# Компилятор и флаги сборки
CC = gcc
# Флаги компиляции исходников
# -Iinclude принудительно заставляет gcc заглядывать в вашу папку include/
CFLAGS = -Wall -Wextra -O2 -std=c11 -Iinclude


# ====================================================================
# ФЛАГИ ЛИНКОВЩИКА ДЛЯ ПОДКЛЮЧЕНИЯ ВНЕШНИХ БИБЛИОТЕК
# ====================================================================
# -lm           -- подключает стандартную математическую библиотеку (math.h)
# -lpthread     -- подключает библиотеку системных потоков Linux (pthread.h)
# -Llib         -- указывает gcc искать файлы .so/.a в вашей папке lib/
# -lm -lpthread -- стандартные системные библиотеки
# -lимя         -- замените &apos;имя&apos; на название вашей сторонней библиотеки
#                  (например, если файл называется libsqlite3.so, пишем -lsqlite3)
# LDFLAGS = -Llib -lm -lpthread -lимя
LDFLAGS = -Llib -Wl,-rpath=&apos;$$ORIGIN/lib&apos; -lm -lpthread -lимя

# Автоматический поиск всех файлов .c в корне и во ВСЕХ подпапках
SRCS := $(shell find . -name &quot;*.c&quot;)

# Автоматическая генерация путей для объектных файлов (.o) в папке build
# Это сохранит корень проекта в чистоте
BUILD_DIR = build
OBJS := $(SRCS:%.c=$(BUILD_DIR)/%.o)

# Главная цель сборки (запускается по умолчанию при вызове &apos;make&apos;)
all: $(TARGET)

# Правило сборки финального бинарного файла
$(TARGET): $(OBJS)
	@echo &quot;=========================================&quot;
	@echo &quot; Сборка финального бинарника: $@&quot;
	@echo &quot;=========================================&quot;
	$(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
	@echo &quot;Готово! Запуск через ./$(TARGET)&quot;

# Правило компиляции каждого отдельного .c файла в объектный .o файл
# mkdir -p автоматически создает структуру подпапок внутри директории build
$(BUILD_DIR)/%.o: %.c
	@mkdir -p $(dir $@)
	@echo &quot;Компиляция: $&amp;lt; -&amp;gt; $@&quot;
	$(CC) $(CFLAGS) -c $&amp;lt; -o $@

# Очистка проекта (удаление скомпилированных файлов)
clean:
	@echo &quot;Очистка временных файлов сборки...&quot;
	rm -rf $(BUILD_DIR) $(TARGET)
	@echo &quot;Проект очищен.&quot;

# Указываем, что &apos;all&apos; и &apos;clean&apos; — это системные команды, а не имена файлов
.PHONY: all clean
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Главные преимущества этого шаблона:&lt;br /&gt;Изолированная сборка (build/): Чтобы промежуточные объектные файлы .o не засоряли ваши папки с исходным кодом, этот скрипт автоматически создает скрытую структуру внутри папки build/, в точности повторяя ваши подпапки.&lt;br /&gt;Умный сборщик find . -name &quot;*.c&quot;: Команда глубоко сканирует проект. Вы можете разложить код по папкам src/, src/network/, src/utils/, и make сам всё обнаружит.&lt;br /&gt;Флаги безопасности (-Wall -Wextra): Они заставят компилятор выдавать максимум предупреждений о потенциальных ошибках в коде (например, если вы объявили переменную, но забыли её использовать), что очень полезно при работе с языком Си.&lt;br /&gt;&lt;br /&gt;Как им пользоваться в Zed?&lt;br /&gt;Нажмите настроенный нами ранее хоткей Ctrl + B (или выполните make в терминале). Проект автоматически скомпилируется.&lt;br /&gt;Чтобы полностью стереть результаты компиляции и пересобрать проект с нуля, откройте терминал и введите:&lt;br /&gt;make clean&lt;br /&gt;&lt;br /&gt;Как это работает на примере системных библиотек Debian:&lt;br /&gt;Математика (-lm): &lt;br /&gt;Когда вы пишете в Си-коде #include  и вызываете функции pow(), sqrt() или sin(), флаг -lm принудительно указывает линковщику связать ваш код с системным бинарным файлом libm.so.&lt;br /&gt;Потоки (-lpthread): При создании параллельных вычислений через #include  этот флаг подключает библиотеку libpthread.so, которая отвечает за аппаратное распределение задач по ядрам вашего процессора Intel Raptor Lake.&lt;br /&gt;Если в будущем вы добавите на сервер другие библиотеки (например, графическую libpng или сетевую libcurl), вам достаточно будет просто дописать их флаги через пробел в строку LDFLAGS: LDFLAGS = -lm -lpthread -lpng -lcurl.&lt;br /&gt;&lt;br /&gt;Если вы используете сторонние библиотеки (особенно на изолированном от интернета сервере, куда файлы переносятся вручную), они чаще всего поставляются в двух видах:&lt;br /&gt;Динамические (бинарные файлы с расширением .so в Linux).&lt;br /&gt;Статические (архивы кода с расширением .a).&lt;br /&gt;Поскольку сервер отрезан от сети и вы не можете установить их через утилиту apt, вам нужно хранить эти файлы прямо внутри папки вашего проекта и правильно объяснить компилятору gcc, где их искать.&lt;br /&gt;Вот как настроить структуру проекта и обновить Makefile, чтобы подключить любые кастомные файлы библиотек.&lt;br /&gt;&lt;br /&gt;Шаг 1. Рекомендуемая структура папок&lt;br /&gt;Чтобы проект оставался чистым и переносимым, создайте в корне вашего проекта две специальные папки:&lt;br /&gt;include/ — сюда вы складываете заголовочные файлы библиотек (файлы .h), чтобы ваш Си-код знал имена функций.&lt;br /&gt;lib/ — сюда вы копируете скомпилированные файлы самих библиотек (.so или .a), перенесенные с флешки.&lt;br /&gt;&lt;br /&gt;Шаг 2. Финальная конфигурация флагов в Makefile&lt;br /&gt;Откройте ваш универсальный Makefile и обновите верхний блок параметров. Нам нужно добавить два новых флага:&lt;br /&gt;-Iinclude (в CFLAGS) — указывает компилятору искать файлы .h в нашей локальной папке.&lt;br /&gt;-Llib (в LDFLAGS) — указывает линковщику искать бинарники библиотек в нашей локальной папке.&lt;br /&gt;Замените блок флагов на следующий:&lt;br /&gt;&lt;br /&gt;Шаг 3. Важный нюанс для динамических библиотек (.so) в Linux&lt;br /&gt;Если ваши сторонние библиотеки являются динамическими (.so), в Linux есть строгая система безопасности: &lt;br /&gt;при запуске программы операционная система Debian будет искать эти файлы только в стандартных системных директориях (вроде /usr/lib). &lt;br /&gt;Так как их там нет, при запуске ./my_program вы получите ошибку: error while loading shared libraries: libимя.so: cannot open shared object file.&lt;br /&gt;Чтобы решить эту проблему раз и навсегда без прав администратора sudo, нужно добавить в LDFLAGS специальный флаг rpath. Он жестко зашьет в ваш готовый бинарник инструкцию: «Ищи файлы .so в той же папке lib/, которая лежит рядом со мной».&lt;br /&gt;Допишите эту инструкцию в строку LDFLAGS вашего Makefile:&lt;br /&gt;LDFLAGS = -Llib -Wl,-rpath=&apos;$$ORIGIN/lib&apos; -lm -lpthread -lимя&lt;br /&gt;&lt;br /&gt;(Символ $$ORIGIN — это специальная переменная Linux, которая автоматически подставит путь к папке, где физически лежит запущенная программа).&lt;br /&gt;Как теперь этим пользоваться:&lt;br /&gt;Вы переносите с флешки файл, например, libcustom.so и заголовочный файл custom.h.&lt;br /&gt;Файл custom.h кладете в папку include/.Файл libcustom.so кладете в папку lib/.&lt;br /&gt;В Makefile в конец строки LDFLAGS дописываете -lcustom.&lt;br /&gt;Нажимаете Ctrl + B в Zed — проект собирается и сразу работает.&lt;br /&gt;&lt;br /&gt;Вот готовые, точные названия флагов для OpenSSL и других популярных библиотек, которые чаще всего используются в Си-разработке под Linux. &lt;br /&gt;Вы можете просто вставлять их через пробел в строку LDFLAGS вашего Makefile.&lt;br /&gt;Обратите внимание на правило компилятора gcc: если файл библиотеки называется libcrypto.so, то префикс lib отбрасывается, а к названию добавляется флаг -l, то есть получается -lcrypto.1. &lt;br /&gt;Флаги для OpenSSL (Криптография и шифрование)Библиотека OpenSSL физически состоит из двух независимых частей (для работы со стандартными алгоритмами шифрования и для сетевых TLS/SSL протоколов). &lt;br /&gt;Для её подключения нужно указать оба флага вместе:&lt;br /&gt;&lt;br /&gt;# Вставляем в конец строки LDFLAGS:&lt;br /&gt;-lssl -lcrypto&lt;br /&gt;&lt;br /&gt;(Файлы в папке lib/ должны называться: libssl.so/libssl.a и libcrypto.so/libcrypto.a).&lt;br /&gt;&lt;br /&gt;2. Справочник флагов для других частых библиотек&lt;br /&gt;Если ваши задачи изменятся и вы перенесете на сервер другие инструменты, используйте эту таблицу для правильной настройки LDFLAGS:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
# ====================================================================
# СПРАВОЧНИК ФЛАГОВ ДЛЯ СТОРОННИХ БИБЛИОТЕК (Раскомментируйте нужные)
# ====================================================================

# Настройка путей и безопасности для локальных .so файлов в папке lib/
LDFLAGS = -Llib -Wl,-rpath=&apos;$$ORIGIN/lib&apos;

# Стандартные системные библиотеки Linux
LDFLAGS += -lm -lpthread

# 1. OpenSSL (Криптография, шифрование и TLS/SSL)
# LDFLAGS += -lssl -lcrypto

# 2. SQLite 3 (Легковесная встроенная база данных)
# LDFLAGS += -lsqlite3

# 3. libcurl (Сетевые запросы HTTP/FTP)
# LDFLAGS += -lcurl

# 4. zlib (Сжатие данных и работа с архивами .gz)
# LDFLAGS += -lz

# 5. cJSON (Парсинг и генерация файлов конфигурации JSON)
# LDFLAGS += -lcjson

# 6. Raylib / SDL2 (Разработка графики и простых 2D/3D игр)
# LDFLAGS += -lraylib
# LDFLAGS += -lSDL2

# 7. OpenCV (Компьютерное зрение и обработка изображений)
# LDFLAGS += -lopencv_core -lopencv_imgproc
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Как это работает в Makefile?&lt;br /&gt;Оператор += в языке make позволяет гибко «наращивать» строку флагов. &lt;br /&gt;Сначала инициализируется базовая строка с путями к папке lib/, затем к ней автоматически прибавляются системные потоки и математика, &lt;br /&gt;а ниже вы можете легким движением руки подключать любые другие инструменты по мере усложнения ваших задач.&lt;br /&gt;&lt;br /&gt;Пример итоговой строки в вашем Makefile&lt;br /&gt;Если в вашем проекте одновременно используются стандартная математика, системные потоки, база данных SQLite и шифрование OpenSSL, ваша строка флагов в Makefile будет выглядеть аккуратно и просто:&lt;br /&gt;&lt;br /&gt;LDFLAGS = -Llib -Wl,-rpath=&apos;$$ORIGIN/lib&apos; -lm -lpthread -lssl -lcrypto -lsqlite3&lt;br /&gt;&lt;br /&gt;Важный совет от встроенного ИИ-агента Zed:&lt;br /&gt;Поскольку вы работаете на изолированном сервере, при переносе заголовочных файлов (например, для OpenSSL) сохраняйте структуру их папок.&lt;br /&gt;Внутри скачанных исходников OpenSSL файлы .h обычно лежат в подпапке openssl/. &lt;br /&gt;Перенесите эту подпапку целиком в вашу директорию include/, чтобы в коде на Си пути подключались стандартным для этой библиотеки образом:&lt;br /&gt;&lt;br /&gt;#include &lt;br /&gt;#include &lt;br /&gt;&lt;br /&gt;Тогда компилятор gcc благодаря нашему флагу -Iinclude мгновенно найдет нужные заголовки, а Zed подсветит синтаксис без единой ошибки.&lt;br /&gt;&lt;br /&gt;1. Оптимизация на Си: &lt;br /&gt;Поиск утечек памяти и ускорениеВ языке Си неправильная работа с указателями и частый вызов тяжелых функций могут сильно замедлить программу.&lt;br /&gt;Как использовать ИИ-агент для рефакторинга:&lt;br /&gt;Выделите кусок кода на Си, который кажется вам медленным.Нажмите Ctrl + \, чтобы вызвать панель ассистента, и напишите промпт:&lt;br /&gt;&lt;br /&gt;«Проанализируй этот код на Си. Найди потенциальные утечки памяти (пропущенные free), оптимизируй циклы и предложи более быструю альтернативу с точки зрения использования кэша процессора.»&lt;br /&gt;&lt;br /&gt;Что сделает модель:&lt;br /&gt;Перепишет циклы так, чтобы они шли по строкам, а не по столбцам (эффективное использование кэш-линий процессора вашего Intel Raptor Lake).&lt;br /&gt;Заменит неэффективное копирование строк на работу с указателями.&lt;br /&gt;Покажет, в каких ветках условий if/else вы забыли освободить динамическую память.&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;оптимизация кода&lt;/summary&gt;&lt;br /&gt;2. Оптимизация на Python: &lt;br /&gt;Профилирование и алгоритмы&lt;br /&gt;В Python оптимизация часто сводится к выбору правильных структур данных (например, замена списков на множества set для быстрого поиска) или к переносу тяжелых вычислений в эффективные библиотеки.&lt;br /&gt;Эффективный промпт для оптимизации:&lt;br /&gt;Откройте нужный .py файл, вызовите ассистента и введите:&lt;br /&gt;&lt;br /&gt;«Этот алгоритм на Python работает слишком медленно на больших массивах данных. &lt;br /&gt;Проведи рефакторинг: уменьши алгоритмическую сложность (например, с O(N²) до O(N log N)), избавься от лишних аллокаций памяти и предложи встроенные инструменты профилирования (cProfile), чтобы я мог замерить скорость выполнения.»&lt;br /&gt;&lt;br /&gt;Локальная модель Qwen 2.5 Coder не просто перепишет код, но и добавит в ваш файл декоратор для замера времени выполнения (Time Profiler), чтобы вы наглядно увидели прирост скорости в терминале Zed по нажатию Super + Z.&lt;br /&gt;&lt;br /&gt;3. Оптимизация на Bash: &lt;br /&gt;Безопасность и параллелизмПлохо оптимизированные Bash-скрипты могут сильно нагружать диск ввода-вывода (I/O) или работать последовательно там, где можно запустить параллельные процессы.&lt;br /&gt;С чем поможет ИИ:&lt;br /&gt;Параллельная обработка: &lt;br /&gt;ИИ может переписать ваш Bash-скрипт так, чтобы он обрабатывал файлы или отправлял запросы параллельно, используя встроенную утилиту xargs -P или фоновые процессы &amp; с контролем лимита задач (wait).&lt;br /&gt;Оптимизация чтения файлов: Заменит медленные циклы while read, которые вызывают внешние утилиты на каждой итерации, на эффективную потоковую обработку через единый вызов встроенных механизмов Bash.&lt;br /&gt;&lt;br /&gt;Лайфхак Zed: &lt;br /&gt;Быстрое исправление предупреждений компилятора&lt;br /&gt;Когда вы запускаете сборку вашего Си-проекта через универсальный Makefile (нажав Ctrl + B), компилятор gcc благодаря флагам -Wall -Wextra выводит в терминал предупреждения (Warnings) с указанием номеров строк.&lt;br /&gt;Вы можете моментально скормить эти ошибки ИИ-агенту с помощью специальной слеш-команды в чате:&lt;br /&gt;Откройте панель ассистента (Ctrl + \).&lt;br /&gt;Введите команду /diagnostics и нажмите Пробел. &lt;br /&gt;Zed автоматически прикрепит к вашему запросу все текущие ошибки и предупреждения из терминала.&lt;br /&gt;Допишите: «Исправь эти предупреждения компилятора в моем коде» и нажмите Enter.&lt;br /&gt;&lt;br /&gt;Агент сам найдет проблемные файлы, исправит типы данных (например, заменит int на size_t для счетчиков циклов) и приведет код в идеальное состояние.&lt;br /&gt;&lt;br /&gt;Отладка и обработка ошибок в Zed на Linux выстроена вокруг концепции интеграции системных инструментов во встроенный терминал и использования локального ИИ-агента.&lt;br /&gt;Поскольку Zed — это легковесный нативный редактор (а не тяжелая IDE), утилиты вроде gdb, strace и pdb запускаются прямо внутри него, но с максимальным удобством.&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;отладка в редакторе&lt;/summary&gt;&lt;br /&gt;Отладка и обработка ошибок в Zed на Linux выстроена вокруг концепции интеграции системных инструментов во встроенный терминал и использования локального ИИ-агента.&lt;br /&gt;Поскольку Zed — это легковесный нативный редактор (а не тяжелая IDE), утилиты вроде gdb, strace и pdb запускаются прямо внутри него, но с максимальным удобством.&lt;br /&gt;&lt;br /&gt;1. Работа с gdb (для Си) прямо в интерфейсе Zed&lt;br /&gt;Вместо того чтобы переключаться в отдельное окно консоли, вы можете запустить gdb во встроенном терминале Zed (Ctrl + ~), который откроется снизу вашей рабочей области.&lt;br /&gt;Как сделать отладку в gdb удобной:&lt;br /&gt;Скомпилируйте код с флагами отладки: В нашем универсальном Makefile временно замените флаг -O2 на -g (он добавляет в бинарник отладочные символы, информацию о строках и переменных).&lt;br /&gt;Нажмите Ctrl + B для сборки.&lt;br /&gt;Запустите TUI-режим GDB: В терминале Zed введите:&lt;br /&gt;&lt;br /&gt;gdb -tui ./my_program&lt;br /&gt;&lt;br /&gt;Флаг -tui (Text User Interface) разделит терминал Zed на две части: сверху появится красивое интерактивное окно с вашим Си-кодом, &lt;br /&gt;а снизу — стандартная строка команд GDB. Вы сможете наглядно видеть, на какой строке стоит брейкпоинт.&lt;br /&gt;&lt;br /&gt;Основные команды управления внутри терминала:&lt;br /&gt;&lt;br /&gt;b main или b folder/file.c:42 — поставить точку останова.&lt;br /&gt;r — запустить программу.&lt;br /&gt;n (next) — шаг вперед без захода в функции.&lt;br /&gt;s (step) — шаг с заходом внутрь функции.&lt;br /&gt;p variable_name — напечатать значение переменной (указателя, структуры).&lt;br /&gt;&lt;br /&gt;2. Использование strace для поиска системных ошибок&lt;br /&gt;strace незаменим, когда программа на Си или Python внезапно падает из-за проблем с окружением Debian (не находит файл библиотеки, сыпет ошибками сегментации SIGSEGV при обращении к диску или сети).&lt;br /&gt;Запустите strace прямо в терминале Zed, отфильтровав вывод, чтобы не утонуть в логах:&lt;br /&gt;&lt;br /&gt;# Ищем только системные вызовы работы с файлами (open, read, write)&lt;br /&gt;strace -e trace=file ./my_program&lt;br /&gt;&lt;br /&gt;Магия интеграции с ИИ-агентом Zed:&lt;br /&gt;Если strace выдал системную ошибку, которую трудно расшифровать (например, хитрый сбой ioctl или mmap), &lt;br /&gt;вы можете мгновенно скопировать этот кусок лога из терминала, нажать Ctrl + \ и спросить у локальной модели Qwen 2.5 Coder:&lt;br /&gt;&lt;br /&gt;«Программа на Си падает. Вот финальный вывод утилиты strace: [вставить лог]. В каком системном вызове произошел сбой и как мне исправить это в коде?»&lt;br /&gt;&lt;br /&gt;3. Отладка Python через pdb (или современный breakpoint())&lt;br /&gt;В современных версиях Python (начиная с 3.7+) встроен продвинутый механизм отладки. Вам больше не нужно импортировать import pdb; pdb.set_trace().&lt;br /&gt;В коде вашего Python-приложения вставьте в нужное место одну встроенную функцию:&lt;br /&gt;&lt;br /&gt;breakpoint()&lt;br /&gt;&lt;br /&gt;Запустите файл через наш хоткей Super + Z.&lt;br /&gt;Программа выполнится, плавно дойдет до этой строки и замрет, передав управление интерактивной консоли отладчика прямо во встроенный терминал Zed.&lt;br /&gt;Вы сможете писать стандартные команды: &lt;br /&gt;&lt;br /&gt;ll (показать весь код вокруг), &lt;br /&gt;p имя_переменной (вывести значение), &lt;br /&gt;c (продолжить выполнение).&lt;br /&gt;&lt;br /&gt;4. Автоматическая обработка ошибок (Исключений) в коде&lt;br /&gt;Чтобы минимизировать использование отладчиков, локальный ИИ-агент поможет вам написать правильные блоки перехвата исключений, которые не дадут программе упасть.&lt;br /&gt;Выделите функцию и попросите ИИ через Ctrl + \:&lt;br /&gt;&lt;br /&gt;В Python: &lt;br /&gt;«Оберни этот блок работы с сетью/файлом в try-except с перехватом конкретных ошибок (FileNotFoundError, PermissionError) и правильным логированием через модуль logging.»&lt;br /&gt;&lt;br /&gt;В Си:&lt;br /&gt; «Добавь проверку на NULL для всех возвращаемых значений функций malloc и fopen в этом блоке кода, чтобы защитить программу от Segmentation Fault.»&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=5878948&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/5878948.html</comments>
  <category>coding</category>
  <category>editor</category>
  <category>ии</category>
  <category>zed</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/5878594.html</guid>
  <pubDate>Sat, 15 Aug 2026 13:45:50 GMT</pubDate>
  <title>настройка редактора Zed, часть 2</title>
  <link>https://uzverss.dreamwidth.org/5878594.html</link>
  <description>&lt;br&gt;&lt;a href=&quot;https://zed.dev/&quot;&gt;&lt;img src=&quot;https://itshaman.ru/images/21244_1600.webp&quot; width=&quot;405&quot;&gt;&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/127213.html&quot;&gt;настройка редактора Zed, часть 1 LJ&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5878518.html&quot;&gt;настройка редактора Zed, часть 1 DW&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/127721.html&quot;&gt;настройка редактора Zed, часть 3 LJ&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5878948.html&quot;&gt;настройка редактора Zed, часть 3 DW&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;ознакомится&lt;/summary&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;настройка редактора&lt;/summary&gt;&lt;br /&gt;Чтобы открыть глобальные настройки в Zed на Linux, используется стандартное сочетание клавиш:&lt;br /&gt;Ctrl + , (контрол и запятая)&lt;br /&gt;Это сочетание откроет файл настроек settings.json&lt;br /&gt;&lt;br /&gt;Альтернативный способ через меню (без клавиатуры):&lt;br /&gt;Нажмите на иконку шестеренки ⚙️ в самом левом нижнем углу окна Zed.&lt;br /&gt;В появившемся меню выберите Settings&lt;br /&gt;&lt;br /&gt;настроить тему оформления, похожую на Sublime,&lt;br /&gt;&lt;a href=&quot;https://zed.dev/docs/appearance&quot;&gt;https://zed.dev/docs/appearance&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Шаг 1. Установите тему оформления&lt;br /&gt;В Zed все темы, которых нет «из коробки», устанавливаются как расширения.&lt;br /&gt;Нажмите Ctrl + Shift + P, чтобы открыть командную панель.&lt;br /&gt;Введите zed: extensions и нажмите Enter. Откроется вкладка со всеми доступными плагинами.&lt;br /&gt;В строке поиска введите Soda (или Seti, если хотите оригинальную цветовую схему).&lt;br /&gt;Нажмите кнопку Install рядом с найденной темой.&lt;br /&gt;&lt;br /&gt;Шаг 2. Включите тему и иконки Seti&lt;br /&gt;После установки расширения его нужно активировать.&lt;br /&gt;Для выбора темы: Нажмите сочетание клавиш Ctrl + K, затем Ctrl + T. Появится список всех установленных тем. Стрелочками выберите установленную Soda Dark или Seti и нажмите Enter.&lt;br /&gt;Для выбора фирменных иконок Seti: &lt;br /&gt;Нажмите Ctrl + Shift + P, введите команду Icon Theme Selector: Toggle и выберите тему иконок Seti Icons, чтобы папки и файлы в левой панели выглядели в точности как в вашем Sublime&lt;br /&gt;&lt;br /&gt;Альтернативный способ (Через настройки JSON)&lt;br /&gt;Если вы любите всё контролировать через код, откройте глобальные настройки редактора нажатием Ctrl + , (откроется файл settings.json) и пропишите активацию темы прямо туда:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;theme&quot;: {
    &quot;mode&quot;: &quot;dark&quot;,
    &quot;dark&quot;: &quot;Soda Dark&quot; 
  },
  &quot;icon_theme&quot;: &quot;Seti Icons&quot;
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;(Вместо &quot;Soda Dark&quot; укажите точное название темы из установленного вами расширения, например &quot;Seti&quot; или &quot;Monokai Seti&quot;, если выбрали её).&lt;br /&gt;&lt;a href=&quot;https://github.com/tushortz/PackageControlPackages/blob/master/README.md&quot;&gt;https://github.com/tushortz/PackageControlPackages/blob/master/README.md&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;мультикурсоры и запуск Python&lt;/summary&gt;&lt;br /&gt;Шаг 1. Перенос хоткеев для мультикурсоров&lt;br /&gt;Внутри редактора нажмите Ctrl + K, затем Ctrl + S (или выберите в меню Zed ➔ Open Keymap) и добавьте блок для множественных курсоров внутрь контекста &quot;Editor&quot;.&lt;br /&gt;или полностью сотрите там всё и вставьте наш готовый конфиг, объединяющий ваши хоткеи из Sublime:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
[
  {
    &quot;context&quot;: &quot;Editor&quot;,
    &quot;bindings&quot;: {
      // Ваши привычные мультикурсоры из Sublime Text
      &quot;super-ctrl-up&quot;: &quot;editor::AddSelectionAbove&quot;,
      &quot;super-ctrl-down&quot;: &quot;editor::AddSelectionBelow&quot;,

      // Быстрый запуск текущего Python файла
      &quot;super-z&quot;: [&quot;task::Spawn&quot;, { &quot;taskName&quot;: &quot;Python - RUN current file&quot; }]
    }
  }
]
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Шаг 2. Перенос запуска Python (команда &quot;super+z&quot;)&lt;br /&gt;В отличие от Sublime, где всё пишется в один файл, в Zed сначала создается Задача (Task), а затем на неё вешается хоткей. Это позволяет гибко управлять путями и переменными окружения.&lt;br /&gt;1. Создайте задачу:&lt;br /&gt;В меню выберите Zed ➔ Open Tasks (или откройте файл ~/.config/zed/tasks.json). Напишите там конфигурацию с вашими переменными и путями:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
[
  {
    &quot;label&quot;: &quot;Python - RUN current file&quot;,
    &quot;command&quot;: &quot;python3&quot;,
    &quot;args&quot;: [&quot;-u&quot;, &quot;$ZED_FILE&quot;], 
    &quot;env&quot;: {
      &quot;PYTHONIOENCODING&quot;: &quot;utf-8&quot;,
      &quot;PYTHONPATH&quot;: &quot;/home/user/directory/folder&quot;
    },
    &quot;use_new_terminal&quot;: false,
    &quot;allow_concurrent_runs&quot;: false
  }
]
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;(Переменная $ZED_FILE автоматически подставит абсолютный путь к текущему открытому файлу).&lt;br /&gt;&lt;br /&gt;2. Привяжите хоткей к этой задаче:&lt;br /&gt;Снова вернитесь в ваш файл keymap.json и добавьте вызов этой задачи на кнопку super-z.&lt;br /&gt;Финальный итоговый файл keymap.json должен выглядеть так:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
[
  {
    &quot;context&quot;: &quot;Editor&quot;,
    &quot;bindings&quot;: {
      // Мультикурсоры как в вашем Sublime
      &quot;super-ctrl-up&quot;: &quot;editor::AddSelectionAbove&quot;,
      &quot;super-ctrl-down&quot;: &quot;editor::AddSelectionBelow&quot;,

      // Хоткей для запуска созданной Python-задачи
      &quot;super-z&quot;: [&quot;task::Spawn&quot;, { &quot;taskName&quot;: &quot;Python - RUN current file&quot; }]
    }
  }
]
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Как перенести вообще все хоткеи из Sublime?&lt;br /&gt;официальная раскладка из Sublime Text&lt;br /&gt;Нажмите Ctrl + , (откроются настройки settings.json).&lt;br /&gt;Добавьте туда одну строчку:&lt;br /&gt;&quot;base_keymap&quot;: &quot;SublimeText&quot;&lt;br /&gt;&lt;br /&gt;3. Сохраните задачу для Python&lt;br /&gt;Нажмите Ctrl + Shift + P, введите в поиске Open Tasks и нажмите Enter (либо откройте файл ~/.config/zed/tasks.json вручную). &lt;br /&gt;Вставьте туда код для запуска скриптов:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
[
  {
    &quot;label&quot;: &quot;Python - RUN current file&quot;,
    &quot;command&quot;: &quot;python3&quot;,
    &quot;args&quot;: [&quot;-u&quot;, &quot;$ZED_FILE&quot;],
    &quot;env&quot;: {
      &quot;PYTHONIOENCODING&quot;: &quot;utf-8&quot;,
      &quot;PYTHONPATH&quot;: &quot;/home/user/directory/folder&quot;
    },
    &quot;use_new_terminal&quot;: false,
    &quot;allow_concurrent_runs&quot;: false
  }
]
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;автоматическое выравнивание текста&lt;/summary&gt;&lt;br /&gt;для включения автоматического выравнивания текста (форматирования) при каждом сохранении файла нужно добавить всего две строки в ваш файл настроек settings.json.&lt;br /&gt;Нажмите Ctrl + , чтобы открыть конфигурационный файл, и добавьте туда следующий блок параметров:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;format_on_save&quot;: &quot;on&quot;,
  &quot;formatter&quot;: &quot;language_server&quot;
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Как это работает для разных языков?&lt;br /&gt;После сохранения этих настроек Zed начнет автоматически выравнивать отступы при нажатии Ctrl + S, используя установленные в системе инструменты:&lt;br /&gt;Для Python: &lt;br /&gt;Zed автоматически вызовет плагин (например, Ruff или Pyright), который мгновенно приведет код к стандарту PEP 8.&lt;br /&gt;Для Bash: Ничего дополнительно настраивать не нужно. Расширение Bash в Zed само выровняет синтаксис скрипта.&lt;br /&gt;Для C (Си): Редактор будет искать в системе стандартную системную утилиту clang-format.&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;использование clang-format&lt;/summary&gt;&lt;br /&gt;clang-format&lt;br /&gt;Базовые команды терминала&lt;br /&gt;Вывод отформатированного кода в терминал:&lt;br /&gt;clang-format main.cpp&lt;br /&gt;&lt;br /&gt;Форматирование файла «на месте» (с перезаписью):&lt;br /&gt;clang-format -i main.cpp&lt;br /&gt;&lt;br /&gt;Использование конкретного встроенного стиля:&lt;br /&gt;clang-format -style=Google -i main.cpp&lt;br /&gt;&lt;br /&gt;Создание дефолтного файла конфигурации:&lt;br /&gt;clang-format -style=LLVM -dump-config &amp;gt; .clang-format&lt;br /&gt;&lt;br /&gt;Проверка стиля без изменения файлов (для CI/CD):&lt;br /&gt;clang-format --dry-run --Werror main.cpp&lt;br /&gt;&lt;br /&gt;clang-format -style=LLVM -i main.c&lt;br /&gt;&lt;br /&gt;Пример файла конфигурации .clang-format&lt;br /&gt;Если в корне проекта лежит файл .clang-format, утилита автоматически подтянет его при вызове с флагом -style=file. Пример базовой настройки:&lt;br /&gt;BasedOnStyle: LLVM&lt;br /&gt;IndentWidth: 4&lt;br /&gt;ColumnLimit: 100&lt;br /&gt;AllowShortFunctionsOnASingleLine: None&lt;br /&gt;SortIncludes: true&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;Важное примечание для языка Си (Debian 13)&lt;br /&gt;Чтобы автоматическое форматирование заработало для файлов .c и .h, в вашей системе Debian должен быть установлен сам форматировщик.&lt;br /&gt;Установите его одной командой в терминале:&lt;br /&gt;sudo apt update &amp;&amp; sudo apt install clang-format -y&lt;br /&gt;&lt;br /&gt;После этого при написании Си-кода вы можете ставить любые хаотичные пробелы и отступы — при нажатии Ctrl + S редактор Zed мгновенно выровняет весь код по строгому профессиональному стандарту.&lt;br /&gt;&lt;br /&gt;Как включить выбранный стиль (например, LLVM) в Zed?&lt;br /&gt;Отступы в 2 или 4 пробела, фигурные скобки открываются на той же строке.&lt;br /&gt;Параметр IndentWidth: 4 сделает отступы в 4 пробела вместо стандартных двух, что привычнее после Python&lt;br /&gt;Достаточно один раз создать в корне вашего проекта текстовый файл с именем .clang-format и написать туда:&lt;br /&gt;BasedOnStyle: LLVM&lt;br /&gt;IndentWidth: 4&lt;br /&gt;&lt;br /&gt;1. Стиль Google (Максимально компактный)&lt;br /&gt;Фигурные скобки всегда открываются на той же строке. Отступы небольшие, код получается очень плотным, что удобно для небольших экранов ноутбуков.&lt;br /&gt;BasedOnStyle: Google&lt;br /&gt;IndentWidth: 4&lt;br /&gt;ColumnLimit: 100&lt;br /&gt;AllowShortBlocksOnASingleLine: true&lt;br /&gt;KeepEmptyLinesAtTheStartOfBlocks: false&lt;br /&gt;&lt;br /&gt;2. Стиль Linux Kernel (Официальный системный)&lt;br /&gt;Классический стиль для низкоуровневой разработки. &lt;br /&gt;Главное отличие — использование жестких табуляций (Tabs) вместо пробелов и перенос открывающей фигурной скобки функций на новую строку.&lt;br /&gt;BasedOnStyle: Linux&lt;br /&gt;UseTab: Always&lt;br /&gt;IndentWidth: 8&lt;br /&gt;TabWidth: 8&lt;br /&gt;BreakBeforeBraces: Linux&lt;br /&gt;AllowShortIfStatementsOnASingleLine: false&lt;br /&gt;&lt;br /&gt;3. Стиль GNU (Академический / Просторный)&lt;br /&gt;Редко используется в коммерческой разработке, но часто встречается в старых утилитах Linux и университетских проектах. &lt;br /&gt;Скобки смещаются внутрь, из-за чего код занимает много места по вертикали.&lt;br /&gt;BasedOnStyle: GNU&lt;br /&gt;IndentWidth: 4&lt;br /&gt;BreakBeforeBraces: GNU&lt;br /&gt;SpacesInParentheses: true&lt;br /&gt;&lt;br /&gt;4. Стиль Microsoft / WebKit (Похож на C# и Java)&lt;br /&gt;Фигурные скобки всегда переносятся на новую строку (стиль Allman). Код выглядит очень аккуратно и &quot;разреженно&quot;.&lt;br /&gt;BasedOnStyle: Microsoft&lt;br /&gt;IndentWidth: 4&lt;br /&gt;BreakBeforeBraces: Allman&lt;br /&gt;AllowShortFunctionsOnASingleLine: None&lt;br /&gt;&lt;br /&gt;Лайфхак для Zed (settings.json)&lt;br /&gt;Если вы не хотите создавать файл .clang-format в каждом новом проекте, вы можете жестко прописать дефолтный стиль (например, LLVM) прямо в глобальные настройки Zed для всех Си-файлов.&lt;br /&gt;Откройте settings.json (Ctrl + ,) и добавьте это в конец:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;format_on_save&quot;: &quot;on&quot;,
  &quot;languages&quot;: {
    &quot;C&quot;: {
      &quot;formatter&quot;: {
        &quot;external&quot;: {
          &quot;command&quot;: &quot;clang-format&quot;,
          &quot;arguments&quot;: [&quot;-style=LLVM&quot;]
        }
      }
    }
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Вместо LLVM в строке &quot;arguments&quot; можно вписать Google, Chromium, Mozilla, WebKit или GNU).&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;сложное форматирование&lt;/summary&gt;&lt;br /&gt;Для автоматического выравнивания файлов HTML, CSS, JavaScript, JSON, YAML и Markdown мировым стандартом является утилита Prettier.&lt;br /&gt;В отличие от языка Си, где используется clang-format, для веб-технологий и конфигурационных файлов веб-индустрия выбрала Prettier. &lt;br /&gt;Он работает по принципу «минимальных настроек» — сам расставляет правильные отступы, кавычки, переносы строк и точки с запятой.&lt;br /&gt;&lt;br /&gt;Шаг 1. Установите Prettier в систему&lt;br /&gt;Так как Prettier написан на JavaScript, для его глобальной установки вам понадобятся менеджер пакетов npm и платформа Node.js.&lt;br /&gt;Выполните в терминале:&lt;br /&gt;&lt;br /&gt;# 1. Устанавливаем Node.js и npm из репозиториев Debian&lt;br /&gt;sudo apt update &amp;&amp; sudo apt install nodejs npm -y&lt;br /&gt;&lt;br /&gt;# 2. Устанавливаем Prettier глобально в систему&lt;br /&gt;sudo npm install -g prettier&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Шаг 2. Пропишите форматировщик в настройки Zed&lt;br /&gt;Откройте ваши глобальные настройки settings.json (нажав Ctrl + ,) и укажите редактору использовать Prettier для нужных языков.&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;format_on_save&quot;: &quot;on&quot;,
  &quot;languages&quot;: {
    &quot;JSON&quot;: {
      &quot;formatter&quot;: {
        &quot;external&quot;: {
          &quot;command&quot;: &quot;prettier&quot;,
          &quot;arguments&quot;: [&quot;--parser&quot;, &quot;json&quot;]
        }
      }
    },
    &quot;YAML&quot;: {
      &quot;formatter&quot;: {
        &quot;external&quot;: {
          &quot;command&quot;: &quot;prettier&quot;,
          &quot;arguments&quot;: [&quot;--parser&quot;, &quot;yaml&quot;]
        }
      }
    },
    &quot;HTML&quot;: {
      &quot;formatter&quot;: {
        &quot;external&quot;: {
          &quot;command&quot;: &quot;prettier&quot;,
          &quot;arguments&quot;: [&quot;--parser&quot;, &quot;html&quot;]
        }
      }
    }
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Как это будет работать?&lt;br /&gt;Теперь, когда вы будете открывать, например, запутанный и нечитаемый файл keymap.json или tasks.json самого редактора Zed, при обычном сохранении (Ctrl + S) &lt;br /&gt;внешняя утилита Prettier мгновенно превратит его в идеально отформатированный и красивый JSON-код.&lt;br /&gt;&lt;br /&gt;Чтобы настроить удобную работу с веб-интерфейсами (HTML-шаблонами Jinja2, Django, FastAPI) прямо внутри ваших Python-проектов, в Zed нужно учесть один важный нюанс.&lt;br /&gt;Стандартный Prettier из коробки не всегда понимает специфический Python-синтаксис внутри HTML (например, конструкции вида {% if user.is_authenticated %} или ). &lt;br /&gt;Без специального плагина он может выдать ошибку или испортить разметку.&lt;br /&gt;&lt;br /&gt;Шаг 1. Доустановите плагин разметки для Prettier&lt;br /&gt;В терминале установите официальный плагин prettier-plugin-jinja-template, который научит Prettier правильно читать фигурные скобки веб-интерфейсов Python:&lt;br /&gt;sudo npm install -g prettier-plugin-jinja-template&lt;br /&gt;&lt;br /&gt;Шаг 2. Добавьте поддержку шаблонов в настройки Zed&lt;br /&gt;Откройте глобальные настройки settings.json (Ctrl + ,) и укажите, что для HTML-файлов Python-проектов нужно использовать установленный плагин.&lt;br /&gt;Добавьте (или обновите) блок &quot;HTML&quot; в секции &quot;languages&quot;:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;languages&quot;: {
    &quot;HTML&quot;: {
      &quot;formatter&quot;: {
        &quot;external&quot;: {
          &quot;command&quot;: &quot;prettier&quot;,
          &quot;arguments&quot;: [
            &quot;--parser&quot;, &quot;html&quot;,
            &quot;--plugin&quot;, &quot;prettier-plugin-jinja-template&quot;
          ]
        }
      }
    }
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Шаг 3. Включите подсветку синтаксиса для Jinja/Django&lt;br /&gt;По умолчанию Zed может воспринимать файлы .html как обычный статичный веб-сайт, из-за чего теги Python внутри HTML будут отображаться серым монотонным текстом.&lt;br /&gt;Чтобы включить красивую умную подсветку:&lt;br /&gt;Нажмите Ctrl + Shift + P (Командная панель).&lt;br /&gt;Введите zed: extensions и нажмите Enter.&lt;br /&gt;В поиске расширений введите Jinja или Django HTML.&lt;br /&gt;Нажмите Install рядом с расширением (например, Jinja Templates).&lt;br /&gt;Теперь редактор начнет понимать веб-интерфейсы «двойным зрением»: &lt;br /&gt;он будет подсвечивать стандартные HTML-теги, правильно подсвечивать логику Python внутри них, &lt;br /&gt;а при нажатии Ctrl + S утилита Prettier аккуратно выровняет всю структуру страницы, не ломая код шаблонизатора.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Для работы с фреймворком Bootstrap в редакторе Zed на Linux доступны два мощных инструмента автоматизации, которые делают верстку веб-интерфейсов невероятно быстрой: &lt;br /&gt;Emmet (встроен по умолчанию) и официальное расширение для автодополнения классов Bootstrap.&lt;br /&gt;&lt;br /&gt;1. Автодополнение CSS-классов Bootstrap (Расширение)&lt;br /&gt;Поскольку Bootstrap состоит из сотен готовых классов (например, container, row, col-md-6, d-flex, btn-primary), запомнить их все наизусть сложно. Специальное расширение добавляет их в выпадающие подсказки при вводе.&lt;br /&gt;Откройте менеджер расширений: &lt;br /&gt;нажмите Ctrl + Shift + P, введите zed: extensions и нажмите Enter.&lt;br /&gt;В строке поиска введите Bootstrap (или конкретно Bootstrap IntelliSense / Bootstrap Snippets).&lt;br /&gt;Нажмите кнопку Install.&lt;br /&gt;Как это работает:&lt;br /&gt;Теперь внутри любого HTML-файла или Python-шаблона, как только вы начнете писать внутри тега class=&quot;bt...&quot;, Zed автоматически откроет список с подсказками всех подходящих классов Bootstrap с кратким описанием их CSS-свойств.&lt;br /&gt;&lt;br /&gt;2. Встроенный генератор кода Emmet (Магия верстки)&lt;br /&gt;В Zed по умолчанию встроена поддержка синтаксиса Emmet. Она позволяет не писать HTML-теги вручную, а разворачивать сложные Bootstrap-структуры из одной короткой строчки.&lt;br /&gt;Чтобы развернуть адаптивную сетку Bootstrap, вам достаточно написать в файле сокращение:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
div.container&amp;gt;div.row&amp;gt;div.col-md-6*2
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;После этого просто нажмите клавишу Tab, и Zed мгновенно превратит эту строчку в полноценный валидный HTML-код:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
&amp;lt;div class=&quot;container&quot;&amp;gt;
    &amp;lt;div class=&quot;row&quot;&amp;gt;
        &amp;lt;div class=&quot;col-md-6&quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;col-md-6&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Совет по оптимизации для settings.json&lt;br /&gt;&lt;br /&gt;Чтобы Emmet работал безупречно не только в чистых .html файлах, но и внутри специфических Python-шаблонов (например, .jinja, .html.j2 или .cshtml), укажите редактору, что в этих файлах тоже нужно генерировать веб-код.&lt;br /&gt;Откройте настройки Ctrl + , и добавьте туда следующее правило для Emmet:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;features&quot;: {
    &quot;emmet&quot;: {
      &quot;trigger_language_overrides&quot;: {
        &quot;HTML (Jinja)&quot;: &quot;html&quot;,
        &quot;Django HTML&quot;: &quot;html&quot;
      }
    }
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;С этой конфигурацией верстка Bootstrap-интерфейсов для ваших FastAPI или Django приложений будет занимать считанные секунды.&lt;br /&gt;&lt;br /&gt;Чтобы форматировщик Prettier в Zed не ломал, не переносил некорректно и не изменял пути к локальным файлам Bootstrap (или CDN-ссылкам) в ваших HTML-шаблонах, нужно соблюдать несколько простых правил синтаксиса и структуры.Вот как правильно прописывать пути и настраивать файлы, чтобы избежать проблем:&lt;br /&gt;&lt;br /&gt;1. Правильный синтаксис путей в HTML&lt;br /&gt;Prettier очень строг к кавычкам и пробелам. Всегда оборачивайте атрибуты href и src в двойные кавычки, а сами пути пишите без лишних пробелов внутри кавычек:&lt;br /&gt;Для локальных файлов Bootstrap (когда файлы лежат в папке static вашего Python-проекта):&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
&amp;lt;!-- Правильно: Prettier не тронет эту строку --&amp;gt;
&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;/static/css/bootstrap.min.css&quot;&amp;gt;
 src=&quot;/static/js/bootstrap.bundle.min.js&quot; defer&amp;gt;&amp;lt;/script&amp;gt;
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Для подключения через CDN (удаленный сервер):&lt;br /&gt;При переносе длинных ссылок Prettier может попытаться разбить строку. Чтобы этого не произошло, следите, чтобы у тега не было хаотичных пробелов:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. Защита Python-путей (Jinja2 / Django)&lt;br /&gt;Если вы подключаете Bootstrap через встроенные теги Python (например, url_for в FastAPI/Flask или static в Django), Prettier может запутаться в фигурных скобках  и расставить там неверные переносы строк.&lt;br /&gt;Благодаря плагину prettier-plugin-jinja-template, который мы установили ранее, синтаксис защищен, но писать его нужно строго в одну строку без переносов внутри кавычек:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
&amp;lt;!-- Для FastAPI / Flask (Jinja2) --&amp;gt;
&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;&quot;&amp;gt;

&amp;lt;!-- Для Django --&amp;gt;
&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;{% static &apos;css/bootstrap.min.css&apos; %}&quot;&amp;gt;
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;3. Как полностью запретить Prettier форматировать конкретную ссылку?&lt;br /&gt;Если у вас есть сложная, очень длинная ссылка (например, специфический CDN-скрипт с кучей параметров), и Prettier всё равно упорно пытается перенести её часть на новую строку, &lt;br /&gt;вы можете временно отключить форматирование для этого участка кода с помощью специального HTML-комментария .&lt;br /&gt;Просто добавьте этот комментарий строго на строку выше вашего тега:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
&amp;lt;!-- prettier-ignore --&amp;gt;
&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;https://some-very-long-and-complex-isolated-bootstrap-cdn-url-address.com&quot;&amp;gt;
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;4. Настройка длины строки в settings.json&lt;br /&gt;Часто Prettier ломает теги с путями просто потому, что они не влезают в стандартный лимит длины строки (по умолчанию это 80 символов). Для современных мониторов это слишком мало.&lt;br /&gt;Вы можете увеличить этот лимит глобально в настройках Zed, чтобы длинные пути не переносились. Нажмите Ctrl + , и добавьте аргумент --print-width в блок HTML-форматировщика:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
&quot;HTML&quot;: {
  &quot;formatter&quot;: {
    &quot;external&quot;: {
      &quot;command&quot;: &quot;prettier&quot;,
      &quot;arguments&quot;: [
        &quot;--parser&quot;, &quot;html&quot;,
        &quot;--plugin&quot;, &quot;prettier-plugin-jinja-template&quot;,
        &quot;--print-width&quot;, &quot;120&quot; 
      ]
    }
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;(Значение 120 позволит писать длинные пути к Bootstrap в одну строку, и редактор больше не будет принудительно их разбивать).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Для работы с файлами JSON и YAML утилита Prettier также подходит идеально. &lt;br /&gt;Однако, чтобы при сохранении длинные строки или сложные структуры данных в этих конфигурационных файлах не ломались и не переносились некорректно, им тоже полезно задать правильный лимит ширины строки.&lt;br /&gt;&lt;br /&gt;Откройте ваши глобальные настройки в Zed через Ctrl + , и дополните секции &quot;JSON&quot; и &quot;YAML&quot; аргументом --print-width (по аналогии с тем, как мы настроили HTML).&lt;br /&gt;Обновленный блок для этих языков в вашем settings.json должен выглядеть так:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;format_on_save&quot;: &quot;on&quot;,
  &quot;languages&quot;: {
    &quot;JSON&quot;: {
      &quot;formatter&quot;: {
        &quot;external&quot;: {
          &quot;command&quot;: &quot;prettier&quot;,
          &quot;arguments&quot;: [&quot;--parser&quot;, &quot;json&quot;, &quot;--print-width&quot;, &quot;120&quot;]
        }
      }
    },
    &quot;YAML&quot;: {
      &quot;formatter&quot;: {
        &quot;external&quot;: {
          &quot;command&quot;: &quot;prettier&quot;,
          &quot;arguments&quot;: [&quot;--parser&quot;, &quot;yaml&quot;, &quot;--print-width&quot;, &quot;120&quot;]
        }
      }
    }
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Как защитить данные внутри JSON и YAML от форматирования?&lt;br /&gt;Если в ваших JSON или YAML файлах есть специфические строки (например, длинные зашифрованные ключи доступа, токены или огромные тексты), которые Prettier ни в коем случае не должен изменять, &lt;br /&gt;вы можете использовать специальные комментарии для игнорирования:&lt;br /&gt;Внутри файлов YAML:&lt;br /&gt;Используйте комментарий # prettier-ignore строго над той строкой или блоком, который нужно оставить без изменений:&lt;br /&gt;&lt;br /&gt;# prettier-ignore&lt;br /&gt;long_api_key: &quot;very_long_secret_token_that_should_not_be_formatted_or_wrapped_to_a_new_line_by_the_editor&quot;&lt;br /&gt;&lt;br /&gt;Внутри файлов JSON:&lt;br /&gt;Поскольку стандартный формат JSON не поддерживает обычные комментарии, в нем нельзя отключить форматирование для отдельной строки. &lt;br /&gt;Если вам нужно полностью защитить весь JSON-файл от изменений, проще всего временно отключить автоформатирование для конкретного проекта. &lt;br /&gt;Для этого создайте в корне папки проекта файл .prettierignore и просто впишите туда имя файла:&lt;br /&gt;&lt;br /&gt;# Содержимое файла .prettierignore в корне проекта&lt;br /&gt;config_secret.json&lt;br /&gt;&lt;br /&gt;Для полноценной валидации, автодополнения и проверки синтаксиса YAML (включая файлы конфигураций Kubernetes, Docker Compose, GitHub Actions и др.) в Zed используется официальное расширение yaml.&lt;br /&gt;&lt;br /&gt;Шаг 1. Установите расширение через интерфейс&lt;br /&gt;Нажмите сочетание клавиш Ctrl + Shift + P, чтобы открыть командную панель.&lt;br /&gt;Введите в поиске zed: extensions и нажмите Enter.&lt;br /&gt;В левой панели в строке поиска введите yaml.Найдите официальное расширение, которое называется просто yaml, и нажмите кнопку Install.&lt;br /&gt;&lt;br /&gt;Шаг 2. Настройте автодополнение схем в settings.json&lt;br /&gt;Чтобы языковой сервер понимал, какой именно YAML-файл вы редактируете, и подсказывал правильные параметры, откройте глобальные настройки (Ctrl + ,) и добавьте конфигурацию для этого расширения:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;lsp&quot;: {
    &quot;yaml-language-server&quot;: {
      &quot;settings&quot;: {
        &quot;yaml&quot;: {
          // Включаем автоматическую загрузку схем из интернета (SchemaStore)
          &quot;schemaStore&quot;: {
            &quot;enable&quot;: true
          },
          // Или принудительно связываем локальные файлы со схемами, если сервер отрезан от сети
          &quot;schemas&quot;: {
            &quot;https://githubusercontent.com&quot;: [&quot;docker-compose.yml&quot;, &quot;compose.yml&quot;]
          }
        }
      }
    }
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Важно для вашего изолированного сервера:&lt;br /&gt;Так как ваш мощный сервер отрезан от интернета, функция автоматического скачивания схем (schemaStore: true) там работать не сможет.&lt;br /&gt;Чтобы валидация YAML работала в изолированной среде:&lt;br /&gt;Скачайте нужный файл схемы (например, для Docker Compose или Kubernetes) в формате .json на компьютер с интернетом.&lt;br /&gt;Перенесите его на сервер через флешку.В настройках Zed на сервере укажите путь к этому файлу локально:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
&quot;schemas&quot;: {
  &quot;/home/user/schemas/compose-spec.json&quot;: [&quot;docker-compose.yml&quot;, &quot;compose.yml&quot;]
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;После этого сервер Red Hat YAML будет локально проверять структуру ваших файлов, подсвечивать ошибки отступов и предлагать автодополнение по нажатию Ctrl + Space (Пробел).&lt;br /&gt;&lt;br /&gt;Шаг 1. Создаем файл схемы (app-config-schema.json)&lt;br /&gt;Создайте в папке вашего проекта (или в любой локальной папке на сервере) файл с именем app-config-schema.json.&lt;br /&gt;Допустим, ваше Python-приложение принимает на вход настройки базы данных, режим отладки и список разрешенных хостов. Опишем эти правила на языке схем:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;$schema&quot;: &quot;http://json-schema.org&quot;,
  &quot;title&quot;: &quot;Python App Configuration&quot;,
  &quot;type&quot;: &quot;object&quot;,
  &quot;properties&quot;: {
    &quot;debug&quot;: {
      &quot;type&quot;: &quot;boolean&quot;,
      &quot;description&quot;: &quot;Режим отладки приложения (True или False)&quot;
    },
    &quot;database&quot;: {
      &quot;type&quot;: &quot;object&quot;,
      &quot;properties&quot;: {
        &quot;host&quot;: { &quot;type&quot;: &quot;string&quot; },
        &quot;port&quot;: { &quot;type&quot;: &quot;integer&quot;, &quot;minimum&quot;: 1, &quot;maximum&quot;: 65535 }
      },
      &quot;required&quot;: [&quot;host&quot;, &quot;port&quot;]
    },
    &quot;allowed_hosts&quot;: {
      &quot;type&quot;: &quot;array&quot;,
      &quot;items&quot;: { &quot;type&quot;: &quot;string&quot; }
    }
  },
  &quot;required&quot;: [&quot;debug&quot;, &quot;database&quot;]
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Шаг 2. Привязываем схему к вашему YAML-файлу в Zed&lt;br /&gt;Теперь нужно сказать расширению yaml, чтобы оно применяло эту локальную схему ко всем файлам настроек вашего приложения (например, к файлу config.yaml).&lt;br /&gt;Откройте глобальные настройки Zed (Ctrl + ,) и добавьте путь к вашей схеме в секцию schemas:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;lsp&quot;: {
    &quot;yaml-language-server&quot;: {
      &quot;settings&quot;: {
        &quot;yaml&quot;: {
          &quot;schemas&quot;: {
            // Ключ — это АБСОЛЮТНЫЙ путь к созданному файлу схемы на диске.
            // Значение — маска файлов настроек вашего Python-приложения.
            &quot;/home/user/projects/my_app/app-config-schema.json&quot;: [&quot;config.yaml&quot;, &quot;settings.yaml&quot;]
          }
        }
      }
    }
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Как это работает на практике?&lt;br /&gt;Теперь откройте файл config.yaml в Zed. Языковой сервер мгновенно активирует правила:&lt;br /&gt;Защита от опечаток: &lt;br /&gt;Если вы случайно напишете вместо debug: true строку debug: &quot;yes&quot; или забудете указать обязательный параметр port, Zed сразу подчеркнет эту строку красной волнистой линией и выдаст подсказку с ошибкой.&lt;br /&gt;Автодополнение (IntelliSense): Нажмите сочетание клавиш Ctrl + Space (Пробел) в пустом месте файла. &lt;br /&gt;Редактор сам выведет выпадающий список со всеми доступными параметрами (debug, database, allowed_hosts), которые описаны в вашей схеме, избавляя вас от необходимости сверяться с документацией.&lt;br /&gt;&lt;br /&gt;Вот пример того, как расширить вашу схему app-config-schema.json, чтобы добавить туда строгую валидацию для перечислений (Enum) и форматов дат. &lt;br /&gt;Это заставит Zed следить за тем, чтобы в конфигурации не было ошибок в названиях режимов или форматах времени.&lt;br /&gt;Откройте созданный файл app-config-schema.json и добавьте новые параметры (например, уровень логирования и дату запуска) в блок &quot;properties&quot;:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;$schema&quot;: &quot;http://json-schema.org&quot;,
  &quot;title&quot;: &quot;Python App Configuration&quot;,
  &quot;type&quot;: &quot;object&quot;,
  &quot;properties&quot;: {
    &quot;debug&quot;: { &quot;type&quot;: &quot;boolean&quot; },
    
    // 1. ПРИМЕР ПЕРЕЧИСЛЕНИЯ (ENUM)
    // Разрешает вводить строго определенные строки
    &quot;log_level&quot;: {
      &quot;type&quot;: &quot;string&quot;,
      &quot;enum&quot;: [&quot;DEBUG&quot;, &quot;INFO&quot;, &quot;WARNING&quot;, &quot;ERROR&quot;, &quot;CRITICAL&quot;],
      &quot;description&quot;: &quot;Уровень логирования приложения&quot;
    },

    // 2. ПРИМЕР ФОРМАТА ДАТЫ И ВРЕМЕНИ
    // Проверяет строку по стандарту ISO 8601 (ГГГГ-ММ-ДД)
    &quot;release_date&quot;: {
      &quot;type&quot;: &quot;string&quot;,
      &quot;format&quot;: &quot;date&quot;,
      &quot;description&quot;: &quot;Дата релиза в формате YYYY-MM-DD&quot;
    },

    // 3. ПРИМЕР ДАТЫ С ТОЧНЫМ ВРЕМЕНЕМ И ТАЙМЗОНОЙ
    // Пример: 2026-08-13T15:30:00Z
    &quot;maintenance_window&quot;: {
      &quot;type&quot;: &quot;string&quot;,
      &quot;format&quot;: &quot;date-time&quot;,
      &quot;description&quot;: &quot;Техническое окно в формате ISO 8601&quot;
    },

    &quot;database&quot;: {
      &quot;type&quot;: &quot;object&quot;,
      &quot;properties&quot;: {
        &quot;host&quot;: { &quot;type&quot;: &quot;string&quot; },
        &quot;port&quot;: { &quot;type&quot;: &quot;integer&quot; }
      }
    }
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Как это будет выглядеть в файле config.yaml в Zed:&lt;br /&gt;Для Enum (log_level):&lt;br /&gt;Если вы начнете писать log_level: , а затем нажмете Ctrl + Space (Пробел), Zed выдаст красивый выпадающий список, где можно будет выбрать только между DEBUG, INFO, WARNING, ERROR или CRITICAL.&lt;br /&gt;Если вы введете туда строчными буквами info или сделаете опечатку INFFF, редактор сразу подчеркнет строку красным и напишет: «Value must be one of the enumerated values».&lt;br /&gt;Для форматов дат (release_date и maintenance_window):&lt;br /&gt;Если вы напишете дату в привычном российском формате 13.08.2026, языковой сервер в Zed выдаст ошибку валидации.&lt;br /&gt;Он будет требовать строго международный стандарт, например 2026-08-13. &lt;br /&gt;Это гарантирует, что ваш Python-скрипт позже сможет без ошибок распарсить эту строчку через стандартный метод datetime.date.fromisoformat().&lt;br /&gt;&lt;br /&gt;Файл сохраняется автоматически, и новые правила валидации вступят в силу мгновенно.&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=5878594&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/5878594.html</comments>
  <category>ии</category>
  <category>zed</category>
  <category>editor</category>
  <category>coding</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/5878518.html</guid>
  <pubDate>Sat, 15 Aug 2026 13:44:26 GMT</pubDate>
  <title>настройка редактора Zed, часть 1</title>
  <link>https://uzverss.dreamwidth.org/5878518.html</link>
  <description>&lt;br&gt;&lt;a href=&quot;https://zed.dev/&quot;&gt;&lt;img src=&quot;https://itshaman.ru/images/21244_1600.webp&quot; width=&quot;405&quot;&gt;&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/127479.html&quot;&gt;настройка редактора Zed, часть 2 LJ&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5878594.html&quot;&gt;настройка редактора Zed, часть 2 DW&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/127721.html&quot;&gt;настройка редактора Zed, часть 3 LJ&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5878948.html&quot;&gt;настройка редактора Zed, часть 3 DW&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;ознакомится&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/zed-industries/zed&quot;&gt;https://github.com/zed-industries/zed&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://zed.dev/docs/linux&quot;&gt;https://zed.dev/docs/linux&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;zed-linux-x86_64.tar.gz  (Локальный редактор) — это полноценная графическая версия редактора Zed для ноутбука, &lt;br /&gt;zed-remote-server-linux-x86_64.gz  (Удаленный сервер) — это безграфический серверный движок, предназначенный исключительно для удаленной разработки (Remote Development / SSH)&lt;br /&gt;bwrap-linux-x86_64.gz (песочница для ИИ) &lt;br /&gt;&lt;br /&gt;Установка&lt;br /&gt;curl -f &lt;a href=&quot;https://zed.dev/install.sh&quot;&gt;https://zed.dev/install.sh&lt;/a&gt; | sh&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Установка через репозитарий&lt;/summary&gt;&lt;br /&gt;# Создаем директорию для ключа&lt;br /&gt;sudo install -d -m 0755 /etc/apt/keyrings&lt;br /&gt;&lt;br /&gt;# Скачиваем GPG-ключ репозитория&lt;br /&gt;curl -fsSL &lt;a href=&quot;https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc&quot;&gt;https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc&lt;/a&gt; | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg&lt;br /&gt;&lt;br /&gt;# Добавляем репозиторий в источники&lt;br /&gt;echo &quot;deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] &lt;a href=&quot;https://deb.griffo.io/apt&quot;&gt;https://deb.griffo.io/apt&lt;/a&gt; trixie main&quot; | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list&lt;br /&gt;&lt;br /&gt;# Обновляем списки и устанавливаем&lt;br /&gt;sudo apt update&lt;br /&gt;sudo apt install -y zed&lt;br /&gt;&lt;br /&gt;Начиная с октября 2026 года этот сторонний репозиторий deb.griffo.io для автоматических обновлений может потребовать подписку. Если вы не хотите её использовать, вы всегда можете просто скачать готовый .deb файл с их страницы релизов на GitHub и установить вручную через sudo dpkg -i&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;ручная установка&lt;/summary&gt;&lt;br /&gt;zed-linux-x86_64.tar.gz (сам редактор).&lt;br /&gt;bwrap-linux-x86_64.gz (песочница для ИИ)&lt;br /&gt;&lt;br /&gt;Шаг 1. Распаковка редактора Zed&lt;br /&gt;Все пользовательские программы в Linux принято ставить в локальную директорию ~/.local.&lt;br /&gt;Создайте структуру папок в своем домашнем каталоге (если их еще нет):&lt;br /&gt;mkdir -p ~/.local/bin ~/.local/libexec ~/.local/share/applications&lt;br /&gt;&lt;br /&gt;Перейдите в папку со скачанным архивом и распакуйте его:&lt;br /&gt;tar -xvf zed-linux-x86_64.tar.gz&lt;br /&gt;&lt;br /&gt;После распаковки появится папка zed.app. Перенесите её содержимое в вашу локальную систему:&lt;br /&gt;# Переносим бинарный файл запуска&lt;br /&gt;cp zed.app/bin/zed ~/.local/bin/&lt;br /&gt;&lt;br /&gt;# Переносим основные ресурсы редактора&lt;br /&gt;cp -r zed.app/share/* ~/.local/share/&lt;br /&gt;&lt;br /&gt;Шаг 2. Ручная установка Bubblewrap (bwrap)&lt;br /&gt;Чтобы встроенный ИИ работал корректно и безопасно, Zed ищет утилиту bwrap строго по пути ~/.local/libexec/zed-bwrap.&lt;br /&gt;Распакуйте скачанный файл bwrap-linux-x86_64.gz:&lt;br /&gt;gunzip bwrap-linux-x86_64.gz&lt;br /&gt;&lt;br /&gt;Переименуйте его и переместите в системную подпапку Zed:&lt;br /&gt;mv bwrap-linux-x86_64 ~/.local/libexec/zed-bwrap&lt;br /&gt;chmod +x ~/.local/libexec/zed-bwrap&lt;br /&gt;&lt;br /&gt;Шаг 3. Интеграция в графическое меню Debian (GNOME/KDE)&lt;br /&gt;Чтобы Zed отображался в списке всех приложений вашей системы и вы могли запускать его кликом мыши, нужно зарегистрировать его ярлык:&lt;br /&gt;Откройте файл ярлыка текстовым редактором:&lt;br /&gt;&lt;br /&gt;vim ~/.local/share/applications/zed.desktop&lt;br /&gt;&lt;br /&gt;Вставьте туда стандартную конфигурацию ярлыка, указав абсолютный путь к вашему домашнему каталогу (замените имя_пользователя на ваше имя в системе):&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
[Desktop Entry]
Type=Application
Name=Zed
Comment=A super-fast, multiplayer code editor.
Exec=/home/имя_пользователя/.local/bin/zed %F
Icon=zed
Terminal=false
Categories=Development;TextEditor;
MimeType=text/plain;
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Сохраните файл (Ctrl+O, затем Enter) и выйдите (Ctrl+X).&lt;br /&gt;&lt;br /&gt;Шаг 4. Добавление в команду терминала&lt;br /&gt;Чтобы вы могли запускать редактор из любого терминала простой командой zed, путь ~/.local/bin должен быть прописан в вашей переменной окружения PATH. В Debian он обычно включен по умолчанию.&lt;br /&gt;zed --version&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;Удаление&lt;br /&gt;zed --uninstall&lt;br /&gt;&lt;br /&gt;zed-linux-x86_64.tar.gz (сам редактор).&lt;br /&gt;bwrap-linux-x86_64.gz (песочница для ИИ)&lt;br /&gt;&lt;br /&gt;отключение ИИ&lt;br /&gt;&lt;a href=&quot;https://zed.dev/docs/ai/quick-start#turning-ai-off-entirely&quot;&gt;https://zed.dev/docs/ai/quick-start#turning-ai-off-entirely&lt;/a&gt;&lt;br /&gt;zed: open settings&lt;br /&gt;найдите Disable AIи включите его&lt;br /&gt;&lt;br /&gt;или добавить это в свой файл настроек:&lt;br /&gt;Нажмите Ctrl + , чтобы открыть конфигурационный файл&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;disable_ai&quot;: true
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Для работы Zed в Linux важна поддержка Vulkan&lt;br /&gt;Поскольку редактор рендерит интерфейс через видеокарту, при отсутствии правильных драйверов он может вообще не запуститься (выдав ошибку NoSupportedDeviceFound) или сильно нагружать процессор&lt;br /&gt;sudo apt update&lt;br /&gt;sudo apt install mesa-vulkan-drivers vulkan-tools&lt;br /&gt;и дрова для видеокарты&lt;br /&gt;intel-media-va-driver-non-free &lt;br /&gt;или &lt;br /&gt;nvidia-driver nvidia-vulkan-icd nvidia-container-toolkit&lt;br /&gt;&lt;br /&gt;Проверка&lt;br /&gt;vkcube&lt;br /&gt;Если вы видите плавно вращающийся 3D-куб, графическая подсистема готова к работе с Zed.&lt;br /&gt;&lt;br /&gt;Особенности Wayland в Debian 13&lt;br /&gt;sudo apt install xwayland&lt;br /&gt;DISABLE_WAYLAND=1 zed&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;варианты установок&lt;/summary&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;ноут + сервер&lt;/summary&gt;&lt;br /&gt;АРХИТЕКТУРА СВЯЗКИ&lt;br /&gt;Ноутбук : Графический интерфейс Zed ➔ SSH-туннель.&lt;br /&gt;Сервер (Хост): Изолированный сетевой мост ➔ QEMU.&lt;br /&gt;Виртуалка QEMU (Debian 13): zed-remote-server + Ollama (CPU) [Полный офлайн].&lt;br /&gt;&lt;br /&gt;ноутбук отвечает исключительно за отрисовку интерфейса (UI), а сервер берет на себя все тяжелые вычисления, включая компиляцию, работу языковых серверов (LSP) и запуск ИИ-агента.&lt;br /&gt;&lt;br /&gt;ШАГ 1. НАСТРОЙКА НА СЕРВЕРЕ (ХОСТ-МАШИНА)&lt;br /&gt;Чтобы изолировать виртуалку, создайте локальный сетевой мост без привязки к физической карте, имеющей интернет:&lt;br /&gt;&lt;br /&gt;# 1. Создаем изолированный мост&lt;br /&gt;sudo ip link add br-isolated type bridge&lt;br /&gt;sudo ip link set br-isolated up&lt;br /&gt;&lt;br /&gt;# 2. Назначаем мосту локальный IP-адрес хоста&lt;br /&gt;sudo ip addr add 192.168.100.1/24 dev br-isolated&lt;br /&gt;&lt;br /&gt;Скрипт запуска виртуалки (run_vm.sh)&lt;br /&gt;Создайте скрипт запуска QEMU на сервере. Он выделяет виртуалке 8 ГБ ОЗУ, 4 ядра CPU и пробрасывает её SSH-порт (22) на порт 2222 сервера.&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
#!/bin/bash
qemu-system-x86_64 \
  -enable-kvm \
  -m 8G \
  -smp 4 \
  -cpu host \
  -hda debian13-zed-server.qcow2 \
  -netdev bridge,br=br-isolated,id=net0 \
  -device virtio-net-pci,netdev=net0 \
  -hostfwd tcp::2222-:22 \
  -nographic \
  -daemonize
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;ШАГ 2. НАСТРОЙКА ВНУТРИ ВИРТУАЛКИ QEMU&lt;br /&gt;Зайдите в виртуалку (пока у неё есть интернет или настроив IP 192.168.100.2), установите зависимости и разверните файлы, перенесенные вручную.&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;Перенос языкового сервера (LSP) для Python&lt;/summary&gt;&lt;br /&gt;В обычной ситуации Zed при открытии .py файла пытается автоматически скачать анализатор кода Pyright или Ruff из сети. На изолированном сервере это вызовет ошибку&lt;br /&gt;Поэтому вам нужно заранее перенести интерпретатор Python и сам плагин автодополнения (LSP) на сервер через флешку&lt;br /&gt;&lt;br /&gt;Популярные LSP-серверы для Python&lt;br /&gt;Pyright / Basedpyright: строгая проверка типов, быстрое автодополнение, поддержка крупных проектов.&lt;br /&gt;Ruff: сверхбыстрый анализ кода, импортов и ошибок на Rust, заменяющий flake8, isort и black.&lt;br /&gt;Pylyzer: статический анализатор и LSP-сервер на Rust, ориентированный на высокую скорость работы.&lt;br /&gt;Jedi-language-server: классический и легкий сервер на базе библиотеки Jedi, удобный для небольших скриптов&lt;br /&gt;&lt;br /&gt;Установите на сервер Python и пакетный менеджер (перенеся их в виде офлайн .deb пакетов или исходников).&lt;br /&gt;Установите языковой сервер, например, Ruff (очень быстрый линтер и автодополнение на Rust) или глобальный Pyright:&lt;br /&gt;pip install ruff --no-index --find-links=/путь/к/флешке/с/wheel-пакетами&lt;br /&gt;&lt;br /&gt;Убедитесь, что команда запуска (например, ruff) доступна в глобальном PATH вашего сервера&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;1. Системные зависимости (Debian 13)&lt;br /&gt;&lt;br /&gt;sudo apt update&lt;br /&gt;sudo apt install -y openssh-server python3 gcc build-essential clang-format curl&lt;br /&gt;&lt;br /&gt;2. Ручная установка Ollama (CPU) и Zed Server&lt;br /&gt;&lt;br /&gt;# Распаковываем предварительно скачанный архив Ollama для Linux&lt;br /&gt;tar -C ~/.local -xzf ollama-linux-amd64.tgz&lt;br /&gt;&lt;br /&gt;# Создаем папку для удаленного сервера Zed (замените ВЕРСИЯ на версию вашего клиента)&lt;br /&gt;mkdir -p ~/.zed_server&lt;br /&gt;gunzip zed-remote-server-linux-x86_64.gz&lt;br /&gt;mv zed-remote-server-linux-x86_64 ~/.zed_server/zed-remote-server-ВЕРСИЯ&lt;br /&gt;chmod +x ~/.zed_server/zed-remote-server-ВЕРСИЯ&lt;br /&gt;&lt;br /&gt;3. Скачивание модели (Офлайн)&lt;br /&gt;Поскольку интернета внутри ВМ не будет, скачайте модель qwen2.5-coder:7b на машине с интернетом и скопируйте содержимое папки кэша модели (~/.ollama) внутрь виртуалки по тому же пути.&lt;br /&gt;&lt;br /&gt;4. Изолированная служба Ollama (~/.config/systemd/user/ollama-isolated.service)&lt;br /&gt;Создайте пользовательскую службу в ВМ, которая запускает Ollama внутри сетевого вакуума (unshare -n):&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
[Unit]
Description=Ollama Service (CPU &amp; Network Isolated)
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/unshare -n -r /home/user/.local/bin/ollama serve
Restart=always

[Install]
WantedBy=default.target
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Включите её:&lt;br /&gt;&lt;br /&gt;systemctl --user daemon-reload&lt;br /&gt;systemctl --user enable --now ollama-isolated.service&lt;br /&gt;# Включаем работу службы в фоне без активных сессий&lt;br /&gt;sudo loginctl enable-linger user&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;Проброс видеокарты в QEMU (VFIO)&lt;/summary&gt;&lt;br /&gt;Если на сервере стоит карта Nvidia, вы можете принудительно «отдать» её внутрь виртуальной машины. Хост-система (сервер) полностью перестанет её видеть, а виртуалка получит к ней прямой нативный доступ. &lt;br /&gt;ИИ начнет генерировать код со скоростью 50–80 слов в секунду.&lt;br /&gt;&lt;br /&gt;Шаг 1. Включите виртуализацию в ядре сервера&lt;br /&gt;Откройте конфигурацию загрузчика Grub на самом сервере:&lt;br /&gt;sudo nano /etc/default/grub&lt;br /&gt;&lt;br /&gt;Найдите строку GRUB_CMDLINE_LINUX_DEFAULT и добавьте туда параметры включения IOMMU (для процессоров Intel):&lt;br /&gt;GRUB_CMDLINE_LINUX_DEFAULT=&quot;quiet intel_iommu=on iommu=pt&quot;&lt;br /&gt;&lt;br /&gt;Обновите конфигурацию: sudo update-grub и перезагрузите сервер.&lt;br /&gt;&lt;br /&gt;Шаг 2. Найдите ID видеокарты&lt;br /&gt;Выполните команду lspci -nn | grep -i nvidia. Вы увидите идентификаторы вашей карты, например: [10de:1b80].&lt;br /&gt;&lt;br /&gt;Шаг 3. Заблокируйте карту на хосте&lt;br /&gt;Создайте файл конфигурации для драйвера VFIO:&lt;br /&gt;&lt;br /&gt;sudo nano /etc/modprobe.d/vfio.conf&lt;br /&gt;options vfio-pci ids=10de:1b80,10de:10f0&lt;br /&gt;&lt;br /&gt;Шаг 4. Пробросьте карту в команду запуска QEMU&lt;br /&gt;Теперь при запуске виртуальной машины добавьте в скрипт QEMU устройство вашей видеокарты (указав её PCI-адрес, например 01:00.0):&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
qemu-system-x86_64 \
  -enable-kvm \
  -m 8G \
  -smp 4 \
  -hda debian13-zed-server.qcow2 \
  -netdev bridge,br=br-isolated,id=net0 \
  -device virtio-net-pci,netdev=net0 \
  # ==========================================================
  # ПРОБРОС ВИДЕОКАРТЫ (Замените 01:00.0 на ваш адрес из lspci)
  # ==========================================================
  -device vfio-pci,host=01:00.0,multifunction=on \
  -vga none \
  -daemonize
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Внутри виртуалки вам останется лишь установить стандартный драйвер sudo apt install nvidia-driver nvidia-vulkan-icd, &lt;br /&gt;и Ollama автоматически подхватит видеокарту, перенеся 100% тяжелых вычислений ИИ-агента на графический чип.&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Запуск в Docker-контейнере &lt;/summary&gt;&lt;br /&gt;1. Создайте файл docker-compose.yml в папке проекта на сервере:&lt;br /&gt;Чтобы полностью отрезать контейнеры от интернета, мы создадим внутреннюю изолированную сеть internal_net без внешнего шлюза (параметр internal: true).&lt;br /&gt;&lt;br /&gt;docker-compose.yml &lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
version: &apos;3.8&apos;

services:
  # Сервис ИИ-модели
  ollama-server:
    image: ollama/ollama:latest
    container_name: zed-ollama
    networks:
      - internal_net
    volumes:
      - ./ollama_data:/root/.ollama
    # Заставляем контейнер перезапускаться при сбоях
    restart: always

  # Среда разработки (где лежит ваш код и куда подключается ноутбук)
  zed-workspace:
    image: debian:13-slim
    container_name: zed-dev-environment
    networks:
      - internal_net
    ports:
      # Пробрасываем SSH-порт контейнера на сервер (например, на порт 2222)
      - &quot;2222:22&quot;
    volumes:
      # Монтируем ваш код и бинарник сервера Zed внутрь контейнера
      - ./projects:/workspace
      - ./zed_server_bin:/root/.zed_server
    environment:
      - PYTHONIOENCODING=utf-8
    command: &amp;gt;
      bash -c &quot;apt update &amp;&amp; apt install -y openssh-server python3 gcc build-essential clang-format &amp;&amp;
               mkdir /var/run/sshd &amp;&amp;
               echo &apos;root:your_secure_password&apos; | chpasswd &amp;&amp;
               sed -i &apos;s/#PermitRootLogin prohibit-password/PermitRootLogin yes/&apos; /etc/ssh/sshd_config &amp;&amp;
               /usr/sbin/sshd -D&quot;

networks:
  internal_net:
    # КРИТИЧНО ДЛЯ БЕЗОПАСНОСТИ: сеть полностью изолирована от интернета
    internal: true
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;подключение видеокарты к изолированной Ollama в Docker на сервере&lt;/summary&gt;&lt;br /&gt;Вот пошаговое руководство, как подключить вашу Tesla P100 к изолированной Ollama в Docker на сервере Debian 13.&lt;br /&gt;&lt;br /&gt;Шаг 1. Подготовка сервера хоста ( Debian 13 )Убедитесь, что на самом сервере установлен официальный драйвер NVIDIA и утилита контейнеризации NVIDIA Container Toolkit (она позволяет пробрасывать графические ядра внутрь Docker).&lt;br /&gt;Добавьте официальный репозиторий NVIDIA для вашего пакетного менеджера (или используйте пакеты из ветки non-free Debian 13).Установите инструментарий одной командой:&lt;br /&gt;&lt;br /&gt;sudo apt update &amp;&amp; sudo apt install -y nvidia-container-toolkit&lt;br /&gt;&lt;br /&gt;Перезапустите службу Docker, чтобы она увидела новую среду выполнения (runtime):&lt;br /&gt;sudo systemctl restart docker&lt;br /&gt;&lt;br /&gt;Проверьте, что Docker видит вашу карту Tesla P100, запустив тестовый контейнер:&lt;br /&gt;docker run --rm --gpus all nvidia/cuda:12.0.0-base-ubuntu22.04 nvidia-smi&lt;br /&gt;&lt;br /&gt;Если на экране появилась таблица со спецификациями Tesla P100 и объемом памяти 16 ГБ, значит, хост-система полностью готова.&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
version: &apos;3.8&apos;

services:
  # Сервер ИИ-модели (Слепой к интернету, но с доступом к Tesla P100)
  ollama-server:
    image: ollama/ollama:latest
    container_name: zed-ollama
    networks:
      - internal_net
    volumes:
      - ./ollama_data:/root/.ollama
    # ==========================================================
    # ПРОБРОС УСКОРИТЕЛЯ TESLA P100 ВНУТРЬ КОНТЕЙНЕРА
    # ==========================================================
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    restart: always

  # Среда разработки (Куда по SSH подключается ваш ноутбук)
  zed-workspace:
    image: debian:13-slim
    container_name: zed-dev-environment
    networks:
      - internal_net
    ports:
      # Пробрасываем SSH-порт контейнера наружу на порт 2222 вашего сервера
      - &quot;2222:22&quot;
    volumes:
      - ./projects:/workspace
      - ./zed_server_bin:/root/.zed_server
    environment:
      - PYTHONIOENCODING=utf-8
    command: &amp;gt;
      bash -c &quot;apt update &amp;&amp; apt install -y openssh-server python3 gcc build-essential clang-format &amp;&amp;
               mkdir /var/run/sshd &amp;&amp;
               echo &apos;root:your_secure_password&apos; | chpasswd &amp;&amp;
               sed -i &apos;s/#PermitRootLogin prohibit-password/PermitRootLogin yes/&apos; /etc/ssh/sshd_config &amp;&amp;
               /usr/sbin/sshd -D&quot;

networks:
  internal_net:
    # Сеть полностью изолирована от интернета, контейнеры видят только друг друга
    internal: true
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;Как запустить и перенести модель в первый раз&lt;br /&gt;&lt;br /&gt;Поскольку контейнер изолирован от интернета (internal: true), команда ollama run qwen2.5-coder:7b внутри него выдаст ошибку, так как он не сможет скачать 4.7 ГБ файлов модели с серверов Ollama.&lt;br /&gt;Как решить эту проблему (Офлайн-перенос):&lt;br /&gt;Временно закомментируйте строчку internal: true в docker-compose.yml или запустите один раз временный контейнер с интернетом на сервере, чтобы скачать модель в общую локальную папку:&lt;br /&gt;&lt;br /&gt;docker run --rm -v ./ollama_data:/root/.ollama --gpus all ollama/ollama run qwen2.5-coder:7b&lt;br /&gt;&lt;br /&gt;Как только скачивание завершится (в консоли появится строка ввода &amp;gt;&amp;gt;&amp;gt;), закройте его командой /exit. Файлы модели весом 4.7 ГБ надежно сохранятся в вашей локальной папке ./ollama_data на жестком диске сервера.&lt;br /&gt;Теперь смело запускайте основную изолированную сборку:&lt;br /&gt;&lt;br /&gt;docker compose up -d&lt;br /&gt;&lt;br /&gt;Вот точные команды, чтобы настроить беспарольный и безопасный вход по SSH-ключу с вашего ноутбука  прямо внутрь созданного Docker-контейнера разработки.&lt;br /&gt;Поскольку в нашем файле docker-compose.yml мы пробросили порт контейнера наружу как 2222, настройка выполняется очень легко.Выполните следующие шаги на вашем ноутбуке&lt;br /&gt;&lt;br /&gt;Шаг 1. Сгенерируйте отдельный ключ для контейнера&lt;br /&gt;Для безопасности лучше создать отдельный изолированный ключ конкретно для этой среды разработки (даже если у вас уже есть основной ключ для самого сервера):&lt;br /&gt;&lt;br /&gt;ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_docker -C &quot;lenovo-zed-container&quot;&lt;br /&gt;&lt;br /&gt;(На запросы парольной фразы нажмите Enter для полностью автоматического входа, либо введите пароль, если хотите защитить ключ, как мы настраивали ранее через ssh-agent).&lt;br /&gt;&lt;br /&gt;Шаг 2. Закиньте публичный ключ внутрь контейнераТак как контейнер имеет IP-адрес вашего основного сервера, но слушает порт 2222, отправьте публичную часть ключа (.pub) одной командой с ноутбука:&lt;br /&gt;ssh-copy-id -i ~/.ssh/id_ed25519_docker.pub -p 2222 root@[IP_Вашего_Сервера]&lt;br /&gt;&lt;br /&gt;Система попросит ввести пароль от контейнера. Введите тот, который мы указали в файле docker-compose.yml в строке chpasswd (в примере это был your_secure_password).&lt;br /&gt;Скрипт сам зайдет в контейнер, создаст там нужную папку /root/.ssh/ и пропишет ключ в файл authorized_keys.&lt;br /&gt;&lt;br /&gt;Шаг 3. Добавьте контейнер в SSH-конфиг ноутбукаЧтобы Zed мог подключаться одной кнопкой, откройте файл конфигурации SSH на ноутбуке:&lt;br /&gt;nano ~/.ssh/config&lt;br /&gt;&lt;br /&gt;Добавьте в него отдельный блок для контейнера разработки (с сохранением туннеля для нашей изолированной на Tesla P100 модели Ollama):&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
Host zed-container
    HostName [IP_Вашего_Сервера]
    Port 2222
    User root
    IdentityFile ~/.ssh/id_ed25519_docker
    # ТУННЕЛЬ: связывает ИИ-панель Zed на ноутбуке с Ollama внутри сети Docker
    LocalForward 11434 127.0.0.1:11434
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;(Замените [IP_Вашего_Сервера] на реальный IP-адрес вашей мощной машины).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Как теперь зайти в проект через Zed?&lt;br /&gt;Убедитесь, что контейнеры запущены на сервере (docker compose up -d).&lt;br /&gt;На ноутбуке откройте Zed.Нажмите комбинацию клавиш Alt + Ctrl + Shift + O (Remote Projects).&lt;br /&gt;Выберите Connect New Server и просто введите наш короткий алиас:&lt;br /&gt;textzed-container&lt;br /&gt;&lt;br /&gt;Zed мгновенно подключится внутрь изолированного контейнера Debian 13 без пароля, развернет там серверную часть zed-remote-server и откроет файлы из папки /workspace. &lt;br /&gt;По нажатию Ctrl + \ ваш ИИ-агент будет отправлять запросы в туннель, а закрытый контейнер с Ollama задействует всю мощь серверной видеокарты Tesla P100 для генерации кода.&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;ШАГ 3. НАСТРОЙКА НА СЛАБОМ НОУТБУКЕ&lt;br /&gt;&lt;br /&gt;1. Конфигурация SSH (~/.ssh/config)&lt;br /&gt;Пропишите доступ к порту 2222 сервера и настройте автоматический проброс порта ИИ:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
Host zed-kvm
    HostName [IP_АДРЕС_ВАШЕГО_МОЩНОГО_СЕРВЕРА]
    Port 2222
    User user
    IdentityFile ~/.ssh/id_ed25519_kvm
    # Пробрасываем порт Ollama из виртуалки на ноутбук
    LocalForward 11434 127.0.0.1:11434
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;2. Глобальные настройки Zed на ноутбуке (settings.json)&lt;br /&gt;Нажмите Ctrl + , на ноутбуке и укажите ИИ-панели смотреть в проброшенный туннель:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;theme&quot;: &quot;Soda Dark&quot;,
  &quot;base_keymap&quot;: &quot;SublimeText&quot;,
  &quot;assistant&quot;: {
    &quot;provider&quot;: &quot;ollama&quot;,
    &quot;model&quot;: &quot;qwen2.5-coder:7b&quot;
  },
  &quot;language_models&quot;: {
    &quot;ollama&quot;: {
      &quot;api_url&quot;: &quot;http://localhost:11434&quot;
    }
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;3. Настройки проекта внутри виртуалки (.zed/settings.json)&lt;br /&gt;Создайте этот файл на стороне виртуалки в папке с кодом. Он принудительно запретит сетевую активность встроенному агенту и включит локальный clang-format:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;format_on_save&quot;: &quot;on&quot;,
  &quot;languages&quot;: {
    &quot;C&quot;: {
      &quot;formatter&quot;: {
        &quot;external&quot;: {
          &quot;command&quot;: &quot;clang-format&quot;,
          &quot;arguments&quot;: [&quot;-style=LLVM&quot;]
        }
      }
    }
  },
  &quot;experimental&quot;: {
    &quot;bwrap_flags&quot;: [
      &quot;--unshare-net&quot;
    ]
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;КАК ПОЛЬЗОВАТЬСЯ:&lt;br /&gt;Запускаете виртуалку на сервере: ./run_vm.sh.&lt;br /&gt;Открываете Zed на ноутбуке, нажимаете Alt + Ctrl + Shift + O (Remote Projects).&lt;br /&gt;Вводите имя подключения: zed-kvm и нажимаете Enter.&lt;br /&gt;Вы внутри изолированной среды. По нажатию Ctrl + \ запускается ИИ-агент, вычисления идут на CPU сервера, а сеть полностью заблокирована с обеих сторон.&lt;br /&gt;&lt;br /&gt;Для настройки и проверки изолированного сетевого моста br-isolated на сервере (хост-машине) и правильного проброса портов в QEMU вам может понадобиться следующая системная информация:&lt;br /&gt;1. Проверка состояния моста и интерфейсов&lt;br /&gt;Чтобы убедиться, что мост создался и активен, используются команды пакета iproute2 (встроен в Debian 13):&lt;br /&gt;ip link show br-isolated — показывает статус интерфейса (должен быть UP).&lt;br /&gt;ip addr show br-isolated — проверяет, успешно ли закрепился за мостом локальный IP-адрес хоста (192.168.100.1/24).&lt;br /&gt;&lt;br /&gt;2. Права доступа для QEMU (Пакет qemu-bridge-helper)&lt;br /&gt;По умолчанию QEMU из соображений безопасности не может сам подключаться к сетевым мостам без прав sudo. Чтобы запускать скрипт run_vm.sh от обычного пользователя, вам понадобятся:&lt;br /&gt;Проверить путь к системному помощнику (обычно в Debian это /usr/lib/qemu/qemu-bridge-helper).&lt;br /&gt;Разрешить мост в конфигурационном файле. Для этого нужно создать файл /etc/qemu/bridge.conf и внести туда строку:&lt;br /&gt;&lt;br /&gt;allow br-isolated&lt;br /&gt;&lt;br /&gt;Задать правильные права на сам хелпер: &lt;br /&gt;sudo chmod 4755 /usr/lib/qemu/qemu-bridge-helper.&lt;br /&gt;&lt;br /&gt;3. Настройка IP-адреса внутри самой виртуалки&lt;br /&gt;&lt;br /&gt;Так как мост изолирован, внутри него нет DHCP-сервера, который бы автоматически выдавал IP-адреса. Вам понадобится настроить статический IP внутри гостевой ОС Debian 13.&lt;br /&gt;Внутри виртуалки в файле /etc/network/interfaces нужно будет прописать:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
auto enp0s3
iface enp0s3 inet static
    address 192.168.100.2
    netmask 255.255.255.0
    # Шлюз (gateway) указывать НЕ НАДО, чтобы у ВМ не было даже попыток искать интернет
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;4. Проверка проброса портов (Port Forwarding)&lt;br /&gt;Чтобы убедиться, что QEMU успешно слушает порт 2222 на хост-машине и туннелирует его на порт 22 виртуалки, на самом сервере пригодится команда контроля сокетов:&lt;br /&gt;ss -tlnp | grep 2222 — она должна показать, что процесс qemu-system успешно занял (слушает) этот порт на сервере.&lt;br /&gt;&lt;br /&gt;5. Логирование и диагностика&lt;br /&gt;Если ноутбук выдает ошибку Connection refused при попытке подключиться к zed-kvm, на хост-сервере полезно заглянуть в системный лог ядра, чтобы понять, не заблокировал ли трафик встроенный межсетевой экран (iptables/nftables):&lt;br /&gt;sudo dmesg | grep -i br-isolated&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;работа с агентом&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/ollama/ollama/releases&quot;&gt;https://github.com/ollama/ollama/releases&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://docs.ollama.com/linux&quot;&gt;https://docs.ollama.com/linux&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://huggingface.co/docs/huggingface_hub/main/en/guides/upload&quot;&gt;https://huggingface.co/docs/huggingface_hub/main/en/guides/upload&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://pinggy.io/blog/how_to_self_host_any_llm_step_by_step_guide/&quot;&gt;https://pinggy.io/blog/how_to_self_host_any_llm_step_by_step_guide/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;скачать qwen2.5-coder-7b&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
python3 -c &quot;import urllib.request; urllib.request.urlretrieve(&apos;https://huggingface.co/bartowski/Qwen2.5-Coder-7B-Instruct-GGUF/resolve/main/Qwen2.5-Coder-7B-Instruct-Q4_K_M.gguf&apos;, &apos;qwen2.5-coder-7b-instruct-q4_k_m.gguf&apos;)&quot;

curl -L -O https://huggingface.co/bartowski/Qwen2.5-Coder-7B-Instruct-GGUF/resolve/main/Qwen2.5-Coder-7B-Instruct-Q4_K_M.gguf

wget -c https://huggingface.co/bartowski/Qwen2.5-Coder-7B-Instruct-GGUF/resolve/main/Qwen2.5-Coder-7B-Instruct-Q4_K_M.gguf
&lt;/textarea&gt;&lt;br /&gt;Qwen2.5-Coder:7B&lt;br /&gt;Назначение: Написано специально для программирования, отладки и работы с алгоритмами.&lt;br /&gt;Llama 3.1:8B&lt;br /&gt;Назначение: Универсальная модель общего назначения от Meta.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://huggingface.co/Qwen/Qwen2.5-Coder-7B-Instruct-GGUF/tree/main&quot;&gt;https://huggingface.co/Qwen/Qwen2.5-Coder-7B-Instruct-GGUF/tree/main&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://huggingface.co/bartowski/Meta-Llama-3.1-8B-Instruct-GGUF/tree/main&quot;&gt;https://huggingface.co/bartowski/Meta-Llama-3.1-8B-Instruct-GGUF/tree/main&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://huggingface.co/bartowski/Mistral-7B-Instruct-v0.3-GGUF/tree/main&quot;&gt;https://huggingface.co/bartowski/Mistral-7B-Instruct-v0.3-GGUF/tree/main&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://huggingface.co/bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF/tree/main&quot;&gt;https://huggingface.co/bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF/tree/main&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;========================================================================================&lt;br /&gt;МОДЕЛЬ                 ВЕС ФАЙЛА  МИН. ПАМЯТЬ    РЕКОМЕНДУЕМАЯ ПАМЯТЬ  КОНТЕКСТ СКОРОСТЬ&lt;br /&gt;========================================================================================&lt;br /&gt;Gemma 2 (2B) - It     ~1.6 ГБ    4 ГБ ОЗУ       8 ГБ ОЗУ / VRAM       8k       🚀 Молния&lt;br /&gt;Gemma 3 (4B) - It     ~2.6 ГБ    6 ГБ ОЗУ       8-12 ГБ ОЗУ / VRAM    32k      ⚡ Быстро&lt;br /&gt;Gemma 4 (E4B) - It    ~4.5 ГБ    6 ГБ ОЗУ       12-16 ГБ ОЗУ / VRAM   128k+    🐢 Средне&lt;br /&gt;========================================================================================&lt;br /&gt;&lt;br /&gt;скромные требования&lt;br /&gt;&lt;a href=&quot;https://huggingface.co/google/gemma-2-2b-it-GGUF/tree/main&quot;&gt;https://huggingface.co/google/gemma-2-2b-it-GGUF/tree/main&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;на ПК со слабыми параметрами выставляйте в настройках (Ollama / LM Studio) размер контекста в 2048 или 4096&lt;br /&gt;Используйте SSD. Если у вас нет мощной видеокарты (VRAM) и модель будет работать за счет обычной оперативной памяти (ОЗУ), файл модели должен лежать на SSD-диске. На старых HDD модель будет думать по минуте над каждым словом.&lt;br /&gt;Ищите QAT-кванты. При скачивании с Hugging Face ищите файлы с пометкой qat-q4_0 (Quantization-Aware Training). Google обучает их по специальной технологии, благодаря чему они весят как сильно сжатые файлы, но выдают точность как полноценные «тяжелые» модели&lt;br /&gt;&lt;br /&gt;скачать Meta-Llama-3.1-8B&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
wget -c https://huggingface.co/bartowski/Meta-Llama-3.1-8B-Instruct-GGUF/resolve/main/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf
&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;.gguf — это название единого бинарного формата файлов, специально созданного для локального запуска нейросетей на обычных процессорах (CPU) и видеокартах (GPU) через программы вроде Ollama или llama.cpp. Внутри этого одного файла упакованы абсолютно все слои нейросети, её архитектура и текстовый токенизатор&lt;br /&gt;&lt;br /&gt;.Q4_K_M — это тип квантования (степень сжатия весов). «Чистая» модель без сжатия весит около 16 ГБ и требует огромной видеопамяти. &lt;br /&gt;Версия Q4_K_M сжата до 4 бит с использованием умного алгоритма, который уменьшает размер файла до ~4.7 ГБ практически без потери качества ответов. Буква M означает «Medium» (средний, самый сбалансированный размер).&lt;br /&gt;&lt;br /&gt;Приставка -it означает Instruction-Tuned. Модель обучена понимать команды человека, общаться в формате «вопрос-ответ» и строго выполнять технические задания.&lt;br /&gt;&lt;br /&gt;Для запуска Ollama на ноутбуке ребования зависят исключительно от размера (количества параметров) модели, которую вы выберете.&lt;br /&gt;Для комфортного программирования не нужны гигантские модели. Достаточно легковесных и умных кодинг-моделей вроде Qwen 2.5 Coder (1.5B или 7B) или DeepSeek Coder (1.5B или 6.7B).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Сценарий 1. Модели класса 1.5B (Рекомендуется для слабых и средних ноутбуков)&lt;br /&gt;Примеры: qwen2.5-coder:1.5b, deepseek-coder:1.5b&lt;br /&gt;Это идеальный вариант для вашего ноутбука, если вы хотите, чтобы ИИ работал мгновенно, не шумел вентиляторами и не тормозил систему.&lt;br /&gt;Оперативная память (RAM): нужно всего около 2 ГБ свободного места в ОЗУ. &lt;br /&gt;Вместе с запущенным Zed общие затраты составят менее 2.5 ГБ.&lt;br /&gt;Место на диске: модель занимает всего ~1.1 ГБ.&lt;br /&gt;Нагрузка на CPU: минимальная. Процессор Intel Raptor Lake будет генерировать текст со скоростью человеческого чтения или даже быстрее, практически не нагревая ноутбук.&lt;br /&gt;&lt;br /&gt;Сценарий 2. Модели класса 7B (Для более сложных задач и развернутых ответов)&lt;br /&gt;Примеры: qwen2.5-coder:7b, llama3.1:8b&lt;br /&gt;Эти модели думают глубже и пишут более сложные алгоритмы, но требуют больше ресурсов.&lt;br /&gt;&lt;br /&gt;Оперативная память (RAM): &lt;br /&gt;требуется минимум 6–8 ГБ свободной ОЗУ строго под модель. Если на вашем ноутбуке всего 8 ГБ оперативной памяти, то системе станет тяжело. Если 16 ГБ — будет работать отлично.&lt;br /&gt;Место на диске: файлы модели занимают от 4.5 до 5 ГБ.&lt;br /&gt;Нагрузка на CPU: высокая. Процессор будет загружен на 100% во время генерации ответа, ноутбук начнет активно охлаждаться, а скорость вывода текста составит примерно 10–15 слов в секунду (что вполне комфортно для чтения, но медленнее, чем 1.5B).&lt;br /&gt;&lt;br /&gt;Требования к памяти для Gemma-2-9B (квант Q4_K_M)&lt;br /&gt;Для комфортной работы вам понадобится:&lt;br /&gt;Оперативная память (ОЗУ/VRAM): Минимум 8 ГБ свободной памяти (лучше 12–16 ГБ, чтобы оставался запас под операционную систему и браузер).&lt;br /&gt;Вес самого файла: Около 5.5 – 6.0 ГБ на жестком диске (SSD крайне рекомендован, на HDD модель будет сильно «заикаться» при генерации).&lt;br /&gt;&lt;br /&gt;Общие требования к самому движку Ollama&lt;br /&gt;Сам фоновый сервис Ollama в режиме ожидания (когда вы ничего не спрашиваете у ИИ) потребляет 0% CPU и всего около 50–100 МБ оперативной памяти. Она автоматически выгружает модель из ОЗУ в кэш через 5 минут бездействия, чтобы освободить память для вашей системы.&lt;br /&gt;&lt;br /&gt;Шаг 1. Ручная установка Ollama (Без скриптов)&lt;br /&gt;Поскольку вы настороженно относитесь к автоскриптам, установим Ollama самым прозрачным ручным способом через официальный бинарный файл.&lt;br /&gt;Скачайте официальный архив движка для Linux в терминале:&lt;br /&gt;curl -L &lt;a href=&quot;https://ollama.com&quot;&gt;https://ollama.com&lt;/a&gt; -o ollama-linux-amd64.tgz&lt;br /&gt;&lt;br /&gt;Распакуйте его в уже созданную ранее локальную директорию ~/.local:&lt;br /&gt;tar -C ~/.local -xzf ollama-linux-amd64.tgz&lt;br /&gt;&lt;br /&gt;Проверьте, что утилита доступна:&lt;br /&gt;ollama --version&lt;br /&gt;&lt;br /&gt;Шаг 2. Запуск сервиса Ollama&lt;br /&gt;Для работы ИИ утилита должна работать в фоновом режиме. Запустите сервер вручную в отдельной вкладке терминала (или в фоне):&lt;br /&gt;ollama serve&lt;br /&gt;&lt;br /&gt;(Оставьте этот терминал открытым. Сервер будет слушать локальный порт 127.0.0.1:11434).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Шаг 3. Скачивание лучшей модели для Python&lt;br /&gt;Откройте новое окно терминала и скачайте специализированную модель qwen2.5-coder:7b (на данный момент это лучшая открытая модель для написания кода, превосходящая многие коммерческие аналоги):&lt;br /&gt;ollama run qwen2.5-coder:7b&lt;br /&gt;&lt;br /&gt;Начнется скачивание файла размером около 4.7 ГБ.&lt;br /&gt;По завершении появится строка ввода &amp;gt;&amp;gt;&amp;gt;. Можете написать туда любой тестовый вопрос по Python, чтобы проверить скорость работы вашего процессора Intel Raptor Lake.&lt;br /&gt;Для выхода из режима диалога введите /exit.&lt;br /&gt;&lt;br /&gt;Шаг 4. Подключение Ollama к редактору Zed&lt;br /&gt;Теперь заставьте встроенного агента Zed отправлять запросы в запущенную Ollama вместо облака.&lt;br /&gt;Нажмите Ctrl + , чтобы открыть настройки settings.json.&lt;br /&gt;Добавьте в конфигурационный JSON-файл блок интеграции с Ollama:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;assistant&quot;: {
    &quot;provider&quot;: &quot;ollama&quot;,
    &quot;model&quot;: &quot;qwen2.5-coder:7b&quot;
  },
  &quot;language_models&quot;: {
    &quot;ollama&quot;: {
      &quot;api_url&quot;: &quot;http://localhost:11434&quot;
    }
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Пример промпта&lt;br /&gt;&lt;br /&gt;Шаг 1. Отправляем запрос в панель ассистента ZedНажмите Ctrl + \ (откроется панель Assistant) и введите следующий запрос (модель отлично понимает русский язык):&lt;br /&gt;«Напиши небольшую программу на языке Си, которая считывает данные из /proc/stat и высчитывает реальный процент загрузки процессора (CPU) раз в секунду.&lt;br /&gt;Также напиши Bash-скрипт, который автоматически скомпилирует этот Си-файл через gcc, запустит его и проверит, установлена ли в системе утилита gcc. Если gcc нет, скрипт должен вывести ошибку.»&lt;br /&gt;&lt;br /&gt;Шаг 2. Что сгенерирует модельМодель выдаст два независимых блока кода прямо в окно чата.&lt;br /&gt;Блок 1. Код на Си (cpu_monitor.c)&lt;br /&gt;Блок 2. Скрипт автоматизации на Bash (run.sh)&lt;br /&gt;&lt;br /&gt;Шаг 3. Как запустить этот пример в Zed?&lt;br /&gt;Поскольку модель выдаст готовые блоки, вы можете применить магию Zed AI:&lt;br /&gt;Создайте в проекте пустой файл cpu_monitor.c и run.sh.&lt;br /&gt;В окне чата ИИ нажмите кнопку «Insert into file» (или значок стрелочки поверх кода), и модель сама вставит текст в нужные вкладки.&lt;br /&gt;Откройте встроенный терминал в Zed (Ctrl + ~), сделайте скрипт исполняемым (chmod +x run.sh) и запустите его: ./run.sh.&lt;br /&gt;Модель полностью закроет вашу задачу: от логики работы с памятью в Си до системных проверок в Debian на Bash.&lt;br /&gt;&lt;br /&gt;Точечное управление контекстом (Слеш-команды)&lt;br /&gt;Чтобы модель не тратила лишние токены и не путалась в огромном проекте, вы можете явно «скармливать» ей нужные куски системы с помощью быстрых слеш-команд в чате:&lt;br /&gt;&lt;a href=&quot;https://datalakehousehub.com/blog/2026-03-context-management-zed/&quot;&gt;https://datalakehousehub.com/blog/2026-03-context-management-zed/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;/file [путь] — передать агенту содержимое конкретного файла&lt;br /&gt;/tab — прикрепить код из всех открытых сейчас вкладок&lt;br /&gt;/diagnostics — автоматически передать агенту все текущие ошибки компиляции или предупреждения от вашего Python LSP, чтобы он их исправил&lt;br /&gt;/search [запрос] — запустить поиск по проекту и отдать ИИ результаты.&lt;br /&gt;&lt;br /&gt;Для вызова агента используется панель Assistant Panel (хоткей Ctrl + Shift + ? или Ctrl + \).&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;изоляция агента&lt;/summary&gt;&lt;br /&gt;Безопасность (за счет утилиты Bubblewrap)&lt;br /&gt;Поскольку агент имеет доступ к терминалу и может выполнять команды, бинарник zed-bwrap изолирует агента в «песочнице». &lt;br /&gt;Вы можете гибко настраивать профили безопасности (Profiles):&lt;br /&gt;Write — агенту разрешено всё (читать, писать, запускать тесты).&lt;br /&gt;Ask — режим «только чтение» (агент видит код, отвечает на вопросы, но физически не может изменить ни одного файла на диске).&lt;br /&gt;Minimal — режим обычного чата без доступа к вашей системе&lt;br /&gt;&lt;br /&gt;Если ваш сервер имеет выход в интернет, но вы хотите полностью заблокировать агенту Zed доступ в сеть, это можно сделать со стопроцентной гарантией. &lt;br /&gt;Так как вы устанавливаете бинарные файлы вручную, мы можем задействовать встроенный в ядро Linux механизм пространств имен (Namespaces).&lt;br /&gt;Утилита bubblewrap (zed-bwrap), которую мы настроили на сервере, создана как раз для этого. &lt;br /&gt;По умолчанию она изолирует ИИ, но если запустить её со специальным флагом, ядро Linux создаст для процесса агента персональную сетевую заглушку, полностью отрезав его от реальных сетевых интерфейсов сервера.&lt;br /&gt;&lt;br /&gt;Вот как это настроить в зависимости от того, как вы запускаете задачи и Ollama:&lt;br /&gt;Вариант 1. Автоматическая блокировка сети через настройки Zed&lt;br /&gt;Разработчики Zed встроили управление сетевым доступом агента прямо в конфигурацию. &lt;br /&gt;Чтобы запретить встроенному агенту (zed-bwrap) на сервере выходить в интернет, откройте файл настроек проекта на сервере .zed/settings.json и добавьте туда строгий профиль безопасности:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;assistant&quot;: {
    &quot;version&quot;: &quot;2&quot;,
    &quot;provider&quot;: &quot;ollama&quot;,
    &quot;model&quot;: &quot;qwen2.5-coder:7b&quot;
  },
  // Настройка песочницы для серверного агента
  &quot;experimental&quot;: {
    &quot;bwrap_flags&quot;: [
      &quot;--unshare-net&quot;
    ]
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Флаг --unshare-net — это системная команда для ядра Linux. Она создает для агента пустое сетевое пространство имен (внутри которого есть только виртуальная петля lo без маршрутов наружу). &lt;br /&gt;Агент физически не сможет отправить в интернет ни один байт вашего кода.&lt;br /&gt;&lt;br /&gt;Вариант 2. Изоляция самого движка Ollama на сервере&lt;br /&gt;Даже если агент заблокирован, сама модель Ollama на сервере теоретически может иметь доступ в сеть (например, для проверки обновлений моделей). &lt;br /&gt;Если вы хотите, чтобы Ollama на сервере тоже была полностью слепа к интернету, запускайте её через системную утилиту unshare:&lt;br /&gt;unshare -n -r ollama serve&lt;br /&gt;&lt;br /&gt;Флаг -n (--net) полностью изолирует сетевой стек процесса.&lt;br /&gt;Флаг -r (--map-root-user) позволит запустить процесс без прав sudo.&lt;br /&gt;&lt;br /&gt;В таком режиме Ollama будет доступна строго локально для вашего текстового редактора Zed (через внутренний сокет/петлю 127.0.0.1), но не сможет связаться ни с одним внешним сайтом в интернете.&lt;br /&gt;&lt;br /&gt;Вариант 3. Если агент запускает Bash-скрипты через Tasks&lt;br /&gt;Если вы боитесь, что агент напишет Bash-скрипт (например, через нашу систему задач tasks.json) и этот скрипт попытается что-то скачать из сети, &lt;br /&gt;добавьте утилиту unshare прямо в команду запуска вашей задачи на сервере:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
[
  {
    &quot;label&quot;: &quot;Python - SAFE RUN current file&quot;,
    &quot;command&quot;: &quot;unshare&quot;,
    &quot;args&quot;: [&quot;-n&quot;, &quot;-r&quot;, &quot;python3&quot;, &quot;-u&quot;, &quot;$ZED_FILE&quot;],
    &quot;use_new_terminal&quot;: false,
    &quot;allow_concurrent_runs&quot;: false
  }
]
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;При такой конфигурации, даже если ИИ-агент сгенерирует вредоносный Python-код с инструкцией urllib.request.urlopen(), &lt;br /&gt;при нажатии Super + Z этот код запустится в сетевом вакууме и упадет с ошибкой Network is unreachable, защитив ваши данные на 100%.&lt;br /&gt;Какой из вариантов защиты вы хотите применить — ограничить только встроенного агента через настройки Zed или полностью изолировать службу Ollama на сервере с помощью команды unshare?&lt;br /&gt;Напишите, и если выберете unshare, я помогу оформить её в виде удобного ярлыка запуска для сервера.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Шаг 1. Настройка встроенного агента Zed (через настройки)&lt;br /&gt;Добавьте флаг песочницы --unshare-net в конфигурационный файл проекта на сервере.&lt;br /&gt;Откройте или создайте файл .zed/settings.json на сервере и пропишите:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;experimental&quot;: {
    &quot;bwrap_flags&quot;: [
      &quot;--unshare-net&quot;
    ]
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Этот параметр заставит системный бинарник zed-bwrap полностью отключить сеть для ИИ-агента в момент его инициализации.&lt;br /&gt;&lt;br /&gt;Шаг 2. Изоляция службы Ollama (через Systemd)&lt;br /&gt;Поскольку Ollama должна постоянно работать на сервере в фоновом режиме, лучше всего оформить её запуск без сети через системную службу Systemd. &lt;br /&gt;Это гарантирует, что даже после перезагрузки сервера ИИ запустится автоматически и будет на 100% отрезан от интернета.&lt;br /&gt;Поскольку мы настраиваем всё вручную и без лишних системных прав, создадим пользовательскую службу (User Service):&lt;br /&gt;Создайте папку для пользовательских служб на сервере:&lt;br /&gt;&lt;br /&gt;mkdir -p ~/.config/systemd/user/&lt;br /&gt;&lt;br /&gt;Создайте файл конфигурации службы:&lt;br /&gt;vim ~/.config/systemd/user/ollama-isolated.service&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
Вставьте туда следующий текст:
[Unit]
Description=Ollama Service (Fully Network Isolated)
After=network.target

[Service]
Type=simple
# unshare -n запускает Ollama в пустом сетевом пространстве имен
ExecStart=/usr/bin/unshare -n -r /home/имя_пользователя/.local/bin/ollama serve
Restart=always
RestartSec=3

[Install]
WantedBy=default.target
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;(Замените /home/имя_пользователя/ на ваш реальный путь к домашней директории на сервере, где лежит бинарник ollama).&lt;br /&gt;&lt;br /&gt;Перезапустите менеджер служб и включите автозапуск:&lt;br /&gt;# Обновляем конфигурацию системного демона&lt;br /&gt;systemctl --user daemon-reload&lt;br /&gt;&lt;br /&gt;# Включаем и запускаем изолированную Ollama&lt;br /&gt;systemctl --user enable ollama-isolated.service&lt;br /&gt;systemctl --user start ollama-isolated.service&lt;br /&gt;&lt;br /&gt;Как проверить, что всё сработало?&lt;br /&gt;Проверка Ollama: Выполните на сервере команду просмотра статуса службы:&lt;br /&gt;&lt;br /&gt;systemctl --user status ollama-isolated.service&lt;br /&gt;&lt;br /&gt;Если служба активна (running), попробуйте изнутри её процесса постучаться в сеть. Для этого посмотрите её лог. &lt;br /&gt;Ollama при старте всегда пытается проверить наличие обновлений. &lt;br /&gt;В логах вы увидите ошибки вроде dial tcp: lookup ollama.com: Temporary failure in name resolution. Это значит, что изоляция работает успешно.&lt;br /&gt;&lt;br /&gt;Проверка связи с ноутбуком: &lt;br /&gt;Несмотря на то, что Ollama полностью изолирована от интернета, ваш ноутбук по-прежнему сможет общаться с ней благодаря нашему SSH-туннелю (LocalForward), &lt;br /&gt;так как SSH подключается к вашему пользователю, у которого есть доступ к локальному сокету службы.&lt;br /&gt;&lt;br /&gt;Команда loginctl enable-linger исправляет стандартное поведение Debian, при котором система автоматически завершает все фоновые процессы и службы пользователя (включая запущенную нами Ollama), &lt;br /&gt;как только вы закрываете SSH-сессию или отключаетесь от сервера.&lt;br /&gt;Когда вы включаете режим «задерживания» (lingering), система выделяет вашему пользователю постоянный независимый менеджер служб. &lt;br /&gt;Ollama продолжит работать и отвечать на запросы ИИ-агента Zed, даже если ваш ноутбук выключен, а SSH-соединение разорвано.&lt;br /&gt;Выполните эту команду на вашем мощном сервере:&lt;br /&gt;&lt;br /&gt;sudo loginctl enable-linger имя_пользователя&lt;br /&gt;&lt;br /&gt;Как проверить, что режим активирован?&lt;br /&gt;Чтобы убедиться, что сервер теперь не закроет Ollama после вашего ухода, выполните диагностическую команду:&lt;br /&gt;&lt;br /&gt;loginctl user-status имя_пользователя&lt;br /&gt;&lt;br /&gt;В выводе терминала найдите строчку Linger: yes. Если она присутствует, настройка завершена. &lt;br /&gt;Теперь вы можете смело закрывать терминал на ноутбуке — изолированный искусственный интеллект на сервере будет работать непрерывно в режиме 24/7.&lt;br /&gt;&lt;br /&gt;Запуск серверной части Zed и Ollama внутри Docker или виртуалки QEMU/KVM на сервере даст вам максимальный уровень изоляции (даже выше, чем утилиты unshare и bwrap на голом железе).&lt;br /&gt;Вы сможете полностью контролировать сетевые интерфейсы на уровне виртуального коммутатора и гарантировать, что код проекта не покинет контейнер.&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=5878518&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/5878518.html</comments>
  <category>ии</category>
  <category>zed</category>
  <category>editor</category>
  <category>coding</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/5878271.html</guid>
  <pubDate>Thu, 06 Aug 2026 12:34:43 GMT</pubDate>
  <title>Эмуляторы терминалов и их настройка</title>
  <link>https://uzverss.dreamwidth.org/5878271.html</link>
  <description>&lt;br&gt;&lt;img src=&quot;https://cdn.terminaltrove.com/m/884399ee-c30e-4f19-9f6d-45186f1320bb.png&quot; width=&quot;438&quot;&gt;&lt;br /&gt;&lt;br&gt;&lt;a href=&quot;https://uzverss.livejournal.com/95250.html&quot;&gt;среда рабочего стола часть 1 LJ&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5849645.html&quot;&gt;среда рабочего стола часть 1 DW&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/82669.html&quot;&gt;консольная подборка LJ&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5837376.html&quot;&gt;консольная подборка DW&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;раскрыть&lt;/summary&gt;&lt;br /&gt;xfce4-terminal hotwire tilix terminator sakura lilyterm tabby xonsh alacritty ghostty wezterm &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/kingToolbox/WindTerm&quot;&gt;https://github.com/kingToolbox/WindTerm&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/asbru-cm/asbru-cm&quot;&gt;https://github.com/asbru-cm/asbru-cm&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/totoshko88/RustConn&quot;&gt;https://github.com/totoshko88/RustConn&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;VTE терминалы&lt;/summary&gt;&lt;br /&gt;проблема движка VTE&lt;br /&gt;при копировании дают длиннющие пробелы, вместо коротких строк&lt;br /&gt;Причина, по которой Sakura или Terminator копируют длинные пустые хвосты строк, кроется в самом ядре библиотеки VTE. &lt;br /&gt;Исторически VTE считает «пустоту» справа от текста легитимными символами пробела, если строка физически не была прервана символом перевода строки \n.&lt;br /&gt;К сожалению, разработчики VTE принципиально отказываются менять это поведение по умолчанию, считая его стандартом для эмуляции некоторых старых аппаратных терминалов.&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;xfce4-terminal&lt;/summary&gt;&lt;br /&gt;В связке xfce4-terminal и Midnight Commander (mc) комбинация Shift + стрелки для выделения текста не работают «из коробки».&lt;br /&gt;Сам эмулятор xfce4-terminal перехватывает эти сочетания (например, Shift+Вверх/Вниз по умолчанию зарезервированы для построчной прокрутки самого окна терминала).&lt;br /&gt;&lt;br /&gt;Отключить перехват клавиш в xfce4-terminal&lt;br /&gt;Откройте окно xfce4-terminal.&lt;br /&gt;В верхнем меню выберите Правка -&amp;gt; Параметры -&amp;gt; Общие&lt;br /&gt;Найдите блок Прокрутка.&lt;br /&gt;Снимите галочку с пункта «Построчная прокрутка клавишами Shift+Вверх/Вниз» (в некоторых версиях: «Scroll single line using Shift-Up/Down keys»).&lt;br /&gt;Или&lt;br /&gt;Правка -&amp;gt; Параметры -&amp;gt; Быстрые клавиши&lt;br /&gt;внизу, где Терминал&lt;br /&gt;очистить &quot;Прокрутить Вверх на одну строку&quot; &quot;Прокрутить Вниз на одну строку&quot;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;среда gnome&lt;/summary&gt;&lt;br /&gt;установить&lt;br /&gt;gsettings set org.gnome.desktop.interface terminal-select-words-by-line false&lt;br /&gt;проверить&lt;br /&gt;gsettings get org.gnome.desktop.interface terminal-select-words-by-line&lt;br /&gt;если нет и ошибка &lt;br /&gt;Схема «org.gnome.Desktop.Interface» отсутствует&lt;br /&gt;установить&lt;br /&gt;sudo apt install gsettings-desktop-schemas&lt;br /&gt;перекомпилировать&lt;br /&gt;sudo glib-compile-schemas /usr/share/glib-2.0/schemas/&lt;br /&gt;изменения заносятся в бинарную базу данных конфигурации dconf&lt;br /&gt;~/.config/dconf/user&lt;br /&gt;перенести на другой комп&lt;br /&gt;бекап&lt;br /&gt;dconf dump /org/gnome/desktop/interface/ &amp;gt; my_settings.txt&lt;br /&gt;А на другом компьютере восстановить одной командой: &lt;br /&gt;dconf load /org/gnome/desktop/interface/ &amp;lt; my_settings.txt&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;vim ~/.config/xfce4/terminal/terminalrc&lt;br /&gt;добавьте (или измените) строку:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
WordChars=-A-Za-z0-9_./?%&amp;=:~_+
&lt;/textarea&gt;&lt;br /&gt;vim ~/.config/terminator/config&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
[profiles]
  [[default]]
    word_chars = &quot;-A-Za-z0-9,./?%&amp;#:_&quot;
&lt;/textarea&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Alacritty&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/alacritty/alacritty&quot;&gt;https://github.com/alacritty/alacritty&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://wiki.archlinux.org/title/Alacritty_(Русский)&quot;&gt;https://wiki.archlinux.org/title/Alacritty_(Русский)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;простой запуск&lt;br /&gt;tabbed -c -f alacritty --embed&lt;br /&gt;Флаг -f приказывает утилите tabbed: «запомни, что твоя родная команда — это alacritty --embed. Если в системе кто-то попросит создать новую вкладку, вызывай её автоматически»&lt;br /&gt;Флаг -n (name / класс окна) заставляет tabbed постоянно слушать весь ваш графический сервер X11.&lt;br /&gt;-p -1 (позиция -1 в tabbed означает «всегда принудительно открывать в самом конце»):&lt;br /&gt;&lt;br /&gt;alacritty.sh&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
bash -c &apos;WIN_ID=&quot;alac_$(head -c 4 /dev/urandom | xxd -p 2&amp;gt;/dev/null || echo $$)&quot;; export ALAC_WIN_ID=$WIN_ID; mkdir -p &quot;/dev/shm/$WIN_ID&quot;; tabbed -c -f -p -1 alacritty --embed 2&amp;gt;/dev/null | head -n 1 &amp;gt;&quot;/dev/shm/$WIN_ID/tab_xid&quot;; rm -rf &quot;/dev/shm/$WIN_ID&quot;&apos;
&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;useful tabbed hotkeys:&lt;/summary&gt;&lt;br /&gt;&lt;pre&gt;
хоткеи tabbed
Ctrl + Shift + Return (Enter) — открыть новую вкладку.
Ctrl + Shift + j              — сместить текущую вкладку влево.
Ctrl + Shift + k              — сместить текущую вкладку вправо.
Ctrl + Shift + l  (или Right) — перейти к следующей вкладке.
Ctrl + Shift + h  (или Left)  — перейти к предыдущей вкладке.
Ctrl + q 

хоткеи tabbed.meta
Win + Shift + Return — открыть новую вкладку Alacritty.
Win + Shift + j      — сместить текущую вкладку влево.
Win + Shift + k      — сместить текущую вкладку вправо.
Win + Shift + l      — переключиться на следующую вкладку (вправо).
Win + Shift + h      — переключиться на предыдущую вкладку (влево).
Win + Shift + q      — закрыть текущую вкладку.
&lt;/pre&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;mkdir -p ~/.config/alacritty/themes&lt;br /&gt;git clone &lt;a href=&quot;https://github.com/alacritty/alacritty-theme&quot;&gt;https://github.com/alacritty/alacritty-theme&lt;/a&gt; ~/.config/alacritty/themes&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
cat &amp;gt; ~/.config/alacritty/alacritty.toml &amp;lt;&amp;lt;EOF
[general]
import = [
    &quot;~/.config/alacritty/themes/themes/{theme}.toml&quot;
]
EOF
&lt;/textarea&gt;&lt;br /&gt;вместо {theme} любое из перечисленного&lt;br /&gt;&lt;br /&gt;campbell chicago95  gnome_terminal kitty linux konsole_linux msx terminal_app tango_dark ubuntu xterm zenburn&lt;br /&gt;gotham falcon iris  monokai_charcoal omni  &lt;br /&gt;cyber_punk_neon dark_pride gruvbox_dark rainbow inferno&lt;br /&gt;&lt;br /&gt;Полный конфиг&lt;br /&gt;~/.config/alacritty/alacritty.toml&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
# =====================================================================
# ВНЕШНИЙ ВИД (В самом верху файла)
# =====================================================================

[general]
import = [&quot;/home/user1/.config/alacritty/themes/themes/terminal_app.toml&quot;]

[window]
resize_increments = true # Жёсткая синхронизация сетки символов
opacity = 0.85          # Приятная легкая прозрачность (значение от 0.0 до 1.0)

# Чтобы буквы не прижимались вплотную к краям графического контейнера tabbed
[window.padding]
x = 8                   # Отступ слева и справа (8 пикселей)
y = 8                   # Отступ сверху и снизу (8 пикселей)

# =====================================================================
# НАСТРОЙКА ОБОЛОЧКИ И SSH
# =====================================================================

[terminal]
[terminal.shell]
args = [&quot;-c&quot;, &apos;&apos;&apos;
exec /bin/bash --rcfile &amp;lt;(echo &apos;
  source ~/.bashrc
  # Каждая вкладка этого окна регистрирует свой реальный PID в общей папке
  [ -n &quot;$ALAC_WIN_ID&quot; ] &amp;&amp; echo &quot;$$&quot; &amp;gt; &quot;/dev/shm/$ALAC_WIN_ID/$$&quot;
  
  PROMPT_COMMAND=&quot;echo -ne \&quot;\033]0;${USER}@${HOSTNAME}:${PWD/#$HOME/\~}\007\&quot;&quot;
  ssh() { if [ $# -gt 0 ]; then echo -ne &quot;\033]0;${USER}@${!#}\007&quot;; fi; command ssh &quot;$@&quot;; }
&apos;)
&apos;&apos;&apos;]
program = &quot;/bin/bash&quot;

# =====================================================================
# ГОРЯЧИЕ КЛАВИШИ (Каждый блок начинается строго с [[keyboard.bindings]])
# =====================================================================

# Увеличение шрифта по Ctrl + Плюс
[[keyboard.bindings]]
key = &quot;Equals&quot;
mods = &quot;Control&quot;
action = &quot;IncreaseFontSize&quot;

# Уменьшение шрифта по Ctrl + Минус
[[keyboard.bindings]]
key = &quot;Minus&quot;
mods = &quot;Control&quot;
action = &quot;DecreaseFontSize&quot;


# Переключиться на вкладку ВЛЕВО по Ctrl + Стрелка влево
[[keyboard.bindings]]
key = &quot;Left&quot;
mods = &quot;Control&quot;
[keyboard.bindings.command]
program = &quot;xdotool&quot;
args = [&quot;key&quot;, &quot;ctrl+shift+h&quot;]

# Переключиться на вкладку ВПРАВО по Ctrl + Стрелка вправо
[[keyboard.bindings]]
key = &quot;Right&quot;
mods = &quot;Control&quot;
[keyboard.bindings.command]
program = &quot;xdotool&quot;
args = [&quot;key&quot;, &quot;ctrl+shift+l&quot;]


# 1. Ctrl + W — Закрыть только ТЕКУЩУЮ одну активную вкладку
[[keyboard.bindings]]
action = &quot;Quit&quot;
key = &quot;W&quot;
mods = &quot;Control&quot;

# 2. Ctrl + Shift + W — Закрыть окно, вернуть лимиты и чисто удалить папку из ОЗУ
[[keyboard.bindings]]
key = &quot;W&quot;
mods = &quot;Control|Shift&quot;
[keyboard.bindings.command]
program = &quot;/bin/bash&quot;
args = [
    &quot;-c&quot;,
    &quot;&quot;&quot;
    if [ -n &quot;$ALAC_WIN_ID&quot; ] &amp;&amp; [ -d &quot;/dev/shm/$ALAC_WIN_ID&quot; ]; then
        # Извлекаем PID всех вкладок текущего окна и жестко убиваем их
        for pid in $(ls &quot;/dev/shm/$ALAC_WIN_ID&quot; 2&amp;gt;/dev/null | grep -v &quot;tab_xid&quot;); do
            kill -9 &quot;$pid&quot; &amp;gt;/dev/null 2&amp;gt;&amp;1
        done
        
        # Берем Window ID из файла и гасим строго этот текущий контейнер tabbed
        real_xid=$(head -n 1 &quot;/dev/shm/$ALAC_WIN_ID/tab_xid&quot; 2&amp;gt;/dev/null | awk &apos;{print $NF}&apos;)
        if [ -n &quot;$real_xid&quot; ]; then
            xkill -id &quot;$real_xid&quot; &amp;gt;/dev/null 2&amp;gt;&amp;1
        fi
        
        # Финальная чистка памяти: удаляем временную папку этого окна
        rm -rf &quot;/dev/shm/$ALAC_WIN_ID&quot;
    fi
    &quot;&quot;&quot;
]

# 3. Ctrl + T — открытие новой вкладки в текущей папке
[[keyboard.bindings]]
key = &quot;T&quot;
mods = &quot;Control&quot;
[keyboard.bindings.command]
program = &quot;/bin/bash&quot;
args = [
    &quot;-c&quot;,
    &quot;&quot;&quot;
    # Считываем строго первую строчку, игнорируя последующие логи tabbed
    real_xid=$(head -n 1 &quot;/dev/shm/$ALAC_WIN_ID/tab_xid&quot; 2&amp;gt;/dev/null | awk &apos;{print $NF}&apos;)
    if [ -n &quot;$real_xid&quot; ]; then
        # Открываем вкладку в глубоком фоне, папка считывается за наносекунду
        alacritty --embed &quot;$real_xid&quot; --working-directory . &amp;gt;/dev/null 2&amp;gt;&amp;1 &amp;
    else
        alacritty --working-directory . &amp;gt;/dev/null 2&amp;gt;&amp;1 &amp;
    fi
    &quot;&quot;&quot;
]

&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;Все аргументы и шеллы, которые идут после двойного дефиса --, Alacritty воспринимает как команду для исполнения внутри новой вкладки:&lt;br /&gt;alacritty --embed &quot;$real_xid&quot; --working-directory . -- zsh &amp;gt;/dev/null 2&amp;gt;&amp;1 &amp;&lt;br /&gt;Если версия Alacritty ниже 0.13&lt;br /&gt;Если у вас используется старый синтаксис файлов .yaml, то классический флаг запуска процесса пишется как --command (вместо короткого -e)&lt;br /&gt;alacritty --embed &quot;$real_xid&quot; --working-directory . --command zsh &amp;gt;/dev/null 2&amp;gt;&amp;1 &amp;&lt;br /&gt;&lt;br /&gt;# Открывать новую вкладку с автоматическим входом на определенный сервер по SSH&lt;br /&gt;toml&lt;br /&gt;command = { program = &quot;alacritty&quot;, args = [&quot;--embed&quot;, &quot;${XEMBED:-$WINDOWID}&quot;, &quot;-e&quot;, &quot;ssh&quot;, &quot;user@your-server-ip&quot;] }&lt;br /&gt;&lt;br /&gt;yml&lt;br /&gt;  - { key: T, mods: Control, command: { program: &quot;alacritty&quot;, args: [&quot;--embed&quot;, &quot;${XEMBED:-$WINDOWID}&quot;, &quot;-e&quot;, &quot;ssh&quot;, &quot;user@your-server-ip&quot;] } }&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;alacritty old version &lt;/summary&gt;&lt;br /&gt;&lt;br /&gt;alacritty.sh&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
bash -c &apos;WIN_ID=&quot;alac_$(head -c 4 /dev/urandom | xxd -p 2&amp;gt;/dev/null || echo $$)&quot;; export ALAC_WIN_ID=$WIN_ID; mkdir -p &quot;/dev/shm/$WIN_ID&quot;; tabbed -c -f -p -1 alacritty --embed &amp;gt;/dev/shm/$WIN_ID/tab_xid 2&amp;gt;&amp;1; rm -rf &quot;/dev/shm/$WIN_ID&quot;&apos;
&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;git clone --branch yaml &lt;a href=&quot;https://github.com/alacritty/alacritty-theme&quot;&gt;https://github.com/alacritty/alacritty-theme&lt;/a&gt; ~/.config/alacritty/themes&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
cat &amp;gt; ~/.config/alacritty/alacritty.yml &amp;lt;&amp;lt;EOF
#selection:
#  save_to_clipboard: true
import:
 - ~/.config/alacritty/themes/themes/{theme}.yaml
]
EOF
&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;Полный конфиг&lt;br /&gt;~/.config/alacritty/alacritty.yml&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
#selection:
#  save_to_clipboard: true
# =====================================================================
# ВНЕШНИЙ ВИД (В YAML отступы определяют всё)
# =====================================================================
import:
 - ~/.config/alacritty/themes/themes/terminal_app.yaml

window:
  # Чтобы буквы не прижимались вплотную к краям графического контейнера tabbed
  padding:
    x: 8
    y: 8
#  opacity: 0.85     # Приятная легкая прозрачность (значение от 0.0 до 1.0)

# =====================================================================
# НАСТРОЙКА ОБОЛОЧКИ И SSH
# =====================================================================
shell:
  program: /bin/bash
  args:
    - -c
    - |
      exec /bin/bash --rcfile &amp;lt;(echo &apos;
        source ~/.bashrc
        # Каждая вкладка этого окна регистрирует свой реальный PID в общей папке
        [ -n &quot;$ALAC_WIN_ID&quot; ] &amp;&amp; echo &quot;$$&quot; &amp;gt; &quot;/dev/shm/$ALAC_WIN_ID/$$&quot;
        
        PROMPT_COMMAND=&quot;echo -ne \&quot;\033]0;${USER}@${HOSTNAME}:${PWD/#$HOME/\~}\007\&quot;&quot;
        ssh() { if [ $# -gt 0 ]; then echo -ne &quot;\033]0;${USER}@${!#}\007&quot;; fi; command ssh &quot;$@&quot;; }
      &apos;)

# =====================================================================
# ГОРЯЧИЕ КЛАВИШИ
# =====================================================================
key_bindings:
  # Пример: Увеличение шрифта по Ctrl + Плюс
  - { key: Equals, mods: Control, action: IncreaseFontSize }

  # Пример: Уменьшение шрифта по Ctrl + Минус
  - { key: Minus, mods: Control, action: DecreaseFontSize }

  # Ctrl + W — Закрыть только ТЕКУЩУЮ одну активную вкладку (встроенное действие)
  - { key: W, mods: Control, action: Quit }

  # Ctrl + T — Бесшумное открытие новой вкладки в текущей папке
  - key: T
    mods: Control
    command:
      program: /bin/bash
      args:
        - -c
        - |
          real_xid=$(cat &quot;/dev/shm/$ALAC_WIN_ID/tab_xid&quot; 2&amp;gt;/dev/null | awk &apos;{print $NF}&apos;)
          if [ -n &quot;$real_xid&quot; ]; then
              alacritty --embed &quot;$real_xid&quot; --working-directory . &amp;gt;/dev/null 2&amp;gt;&amp;1 &amp;
          else
              alacritty --working-directory . &amp;gt;/dev/null 2&amp;gt;&amp;1 &amp;
          fi

  # Ctrl + Shift + W — Жестко закрыть ВСЕ вкладки ТОЛЬКО ТЕКУЩЕГО окна и полностью вернуть лимиты
  - key: W
    mods: Control|Shift
    command:
      program: /bin/bash
      args:
        - -c
        - |
          if [ -n &quot;$ALAC_WIN_ID&quot; ] &amp;&amp; [ -d &quot;/dev/shm/$ALAC_WIN_ID&quot; ]; then
              for pid in $(ls &quot;/dev/shm/$ALAC_WIN_ID&quot; 2&amp;gt;/dev/null); do
                  kill -9 &quot;$pid&quot; &amp;gt;/dev/null 2&amp;gt;&amp;1
              done
          fi
          xkill -id $(xdotool getactivewindow) &amp;gt;/dev/null 2&amp;gt;&amp;1

# =====================================================================
# ШРИФТЫ (Раздельный независимый блок)
# =====================================================================
font:
  # Семейство шрифта (используйте установленный в системе моноширинный шрифт)
  # Например: JetBrains Mono, Fira Code, Ubuntu Mono или DejaVu Sans Mono
  normal:
    family: &quot;JetBrains Mono&quot;
    style: Regular

  # Размер шрифта (в пунктах, можно использовать дробные числа, например, 11.5)
  size: 11.0

  # Межстрочный интервал (если текст кажется слишком зажатым, сделайте 1 или 2)
  offset:
    x: 0
    y: 0
&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;проблемы с иксами&lt;/summary&gt;&lt;br /&gt;Alacritty сильно потребляет лимиты иксов&lt;br /&gt;узнать лимит&lt;br /&gt;grep -i &quot;max clients&quot; /var/log/Xorg.0.log&lt;br /&gt;&lt;br /&gt;проверить занятость иксов&lt;br /&gt;sudo ss -x src &quot;*/tmp/.X11-unix/*&quot; | awk &apos;{print $NF}&apos; | cut -d: -f1 | sort | uniq -c | sort -nr | wc -l&lt;br /&gt;sudo lsof -U | grep -E &apos;X11-unix&apos; | wc -l&lt;br /&gt;&lt;br /&gt;увеличить лимит X-сервера до 1024 клиентов&lt;br /&gt;echo -e &apos;Section &quot;ServerFlags&quot;\n    Option &quot;MaxClients&quot; &quot;1024&quot;\nEndSection&apos; | sudo tee /etc/X11/xorg.conf.d/99-maxclients.conf&lt;br /&gt;&lt;br /&gt;завершить зомби и убрать лимиты&lt;br /&gt;pkill -9 alacritty &amp;&amp; pkill -9 tabbed&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;проблемы при ssh сессии&lt;/summary&gt;&lt;br /&gt;При подключении к удалённой системе из Alacritty, например с помощью SSH, в ней может не быть записи для Alacritty в базе данных terminfo &lt;br /&gt;(/usr/share/terminfo/a/alacritty*)&lt;br /&gt;&lt;br /&gt;На локальном устройстве, используя Alacritty:&lt;br /&gt;&lt;br /&gt;$ infocmp &amp;gt; alacritty.terminfo  # Экспорт информации об Alacritty&lt;br /&gt;$ scp alacritty.terminfo user@remote-host:~/  # Можно использовать любой способ копирования на удалённое устройство&lt;br /&gt;&lt;br /&gt;На удалённом устройстве, в папке, куда был скопирован alacritty.terminfo:&lt;br /&gt;&lt;br /&gt;$ tic -x alacritty.terminfo  # импорт для текущего пользователя&lt;br /&gt;$ rm alacritty.terminfo  # теперь файл можно удалить&lt;br /&gt;&lt;br /&gt;В качестве альтернативы, можно изменить значение TERM в конфигурации на xterm-256color вместо установленного по умолчанию alacritty:&lt;br /&gt;&lt;pre&gt;
env:
  TERM: xterm-256color
&lt;/pre&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;ghostty&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://ghostty.org/&quot;&gt;https://ghostty.org/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/ghostty-org/ghostty&quot;&gt;https://github.com/ghostty-org/ghostty&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/pkgforge-dev/ghostty-appimage&quot;&gt;https://github.com/pkgforge-dev/ghostty-appimage&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/mkasberg/ghostty-ubuntu/releases&quot;&gt;https://github.com/mkasberg/ghostty-ubuntu/releases&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://launchpad.net/~mkasberg/+archive/ubuntu/ghostty-ubuntu&quot;&gt;https://launchpad.net/~mkasberg/+archive/ubuntu/ghostty-ubuntu&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;установка на debian 13&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
mkdir -p /etc/apt/keyrings

curl -sL &quot;https://keyserver.ubuntu.com/pks/lookup?op=get&amp;search=0x0721fdf5fecb88dc6920361657c8ef455ceae491&quot; -o /etc/apt/keyrings/mkasberg-ghostty.asc

echo &quot;deb [arch=amd64 signed-by=/etc/apt/keyrings/mkasberg-ghostty.asc] https://ppa.launchpadcontent.net/mkasberg/ghostty-ubuntu/ubuntu noble main&quot; | sudo tee /etc/apt/sources.list.d/mkasberg-ghostty.list
&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;настройка&lt;br /&gt;$HOME/.config/ghostty/config.ghostty&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
# Убрать мигающий курсор
cursor-style = block
cursor-style-blink = false
shell-integration-features = no-cursor

# Полностью скрыть панель заголовка
#gtk-titlebar = false

# Cкрыть панель вкладок (Tabs Bar)
#window-show-tab-bar = never

# Скрыть панель когда окно развернуто на весь экран
gtk-titlebar-hide-when-maximized = true

# Убрать лигатуры, чтобы  вернуть стандартное отображение !=, ==, -&amp;gt;
font-feature = -liga
font-feature = -calt
font-feature = -dlig

# Прозрачность
#background-opacity = 0.85
#background-blur = true

# Цветовая схема
command = env TERM=xterm-256color bash
# Замените bash на zsh, если используете zsh

#bold-is-bright = false
#palette-generate = false
window-colorspace = srgb

#theme = Cobalt2
#theme = Zenbones Dark
theme = Wez

# Классическая 16-цветная VGA палитра для xterm
palette = 0=#000000
palette = 1=#aa0000
palette = 2=#00aa00
palette = 3=#aa5500
palette = 4=#0000aa
palette = 5=#aa00aa
palette = 6=#00aaaa
palette = 7=#aaaaaa
palette = 8=#555555
palette = 9=#ff5555
palette = 10=#55ff55
palette = 11=#ffff55
palette = 12=#5555ff
palette = 13=#ff55ff
palette = 14=#55ffff
palette = 15=#ffffff

&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;или&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
# Убрать мигающий курсор
cursor-style = block
cursor-style-blink = false
shell-integration-features = no-cursor

# Полностью скрыть панель заголовка
#gtk-titlebar = false

# Cкрыть панель вкладок (Tabs Bar)
#window-show-tab-bar = never

# Скрыть панель когда окно развернуто на весь экран
gtk-titlebar-hide-when-maximized = true

# Убрать лигатуры, чтобы  вернуть стандартное отображение !=, ==, -&amp;gt;
font-feature = -liga
font-feature = -calt
font-feature = -dlig

# Прозрачность
#background-opacity = 0.85
#background-blur = true

# Цветовая схема
command = env TERM=xterm-256color bash
# Замените bash на zsh, если используете zsh

bold-is-bright = false
palette-generate = false
window-colorspace = srgb

# 1. ОБЩИЙ СНИЙ ФОН ПАНЕЛЕЙ (Индекс 4):
# palette = 4=#0044ff
# palette = 4=#0044ee
palette = 4=#0022aa
# palette = 4=#0000ff

# 2. ИМЕНА КАТАЛОГОВ И СКРЫТЫХ ФАЙЛОВ (Индексы 12 и 15):
#palette = 12=#ffffff
palette = 12=#b0b7bd
palette = 15=#ffffff

# 3. ВЕРХНЕЕ ПЕРВИЧНОЕ МЕНЮ (Индекс 6):
# palette = 6=#394c39
# palette = 6=#556b66
palette = 6=#6d8580

# 4. РАСПАХНУТОЕ ВТОРИЧНОЕ МЕНЮ (Индекс 7) И ЧЕРНАЯ ТЕНЬ (Индекс 8):
# palette = 7=#556b66
palette = 7=#6d8580
palette = 8=#000000

# 5. СЛУЖЕБНЫЙ ЧЕРНЫЙ (Индекс 0):
palette = 0=#000000

# 6. БУКВЫ (Индексы 3 и 11):
palette = 3=#bfff80
# palette = 11=#000000
&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;конфиги&lt;br /&gt;&lt;a href=&quot;https://ghostty.org/docs/config/reference&quot;&gt;https://ghostty.org/docs/config/reference&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;темы&lt;br /&gt;ghostty  +list-themes&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;параметры и цвета для mc, прочие опции&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://www.ditig.com/256-colors-cheat-sheet&quot;&gt;https://www.ditig.com/256-colors-cheat-sheet&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
# Форма курсора (выберите один из вариантов: block, bar, underline, hollow)
cursor-style = bar

# Отключение мигания курсора
cursor-style-blink = false

# Запрет шеллу (zsh/bash) переопределять форму курсора
shell-integration-features = no-cursor

block — классический прямоугольник (залитый блок) по умолчанию
bar — вертикальная черта (как в текстовых редакторах)
underline — нижнее подчеркиваниеhollow — пустой прямоугольник (только контур)

cursor-style = bar

# Делает вертикальную черту толще (можно использовать пиксели или проценты)
adjust-cursor-thickness = 2

Значения: целые числа в пикселях (например, 1, 2, 3) или проценты от стандартного размера (например, 150%, 200%).
По умолчанию толщина равна 1 (или 0.5pt на Retina-экранах, что иногда кажется слишком тонким)

# Цвет самого курсора (принимает HEX-код или названия цветов)
cursor-color = #ff007f

# Цвет текста внутри/под курсором
cursor-text = #ffffff


# Интерфейс
#palette = 12 и palette = 15 — Основной текст панелей. Это имена обычных файлов, скрытых файлов, а также размеры файлов, даты их изменения и права доступа (если включен расширенный режим просмотра).
#palette = 1 — Текст «горячих» клавиш в меню. Это те самые одиночные буквы в словах (например, «Л» в слове «Левая», «Ф» в слове «Файл»), нажатие на которые активирует пункт меню без использования стрелок.
#palette = 2 — Текст исполняемых файлов (скриптов и программ). Если файл имеет права на запуск (chmod +x), MC окрасит его имя именно в этот индекс. В классическом xterm он зеленый.
#palette = 5 — Текст графических файлов, архивов и спец-объектов. Сюда относятся картинки, файлы .zip, .tar, а также символические ссылки (symlinks) на другие папки или файлы. В классике он малиновый/фиолетовый.
#palette = 11 — Текст нижней строки подсказок (F1–F10). Этот индекс красит сами цифры от 1 до 10 в самом низу экрана, 
#а текст команд рядом с ними обычно управляется индексами 3 или 7.

# Основные элементы текста и редактора
#palette = 0 (Белый #ffffff) — В mcedit этот индекс отвечает за обычный текст (буквы, цифры, знаки препинания), а также за номера строк на полях. Так как он настроен как белый, код будет читаться отлично.
#palette = 4 (Сочный синий #0044ff) — Общий фон документа. Весь редактор mcedit будет иметь тот же сочный синий цвет, что и панели MC.
#palette = 12 и palette = 15 (Белый #ffffff) — Выделенный текст. Когда вы выделяете блок текста мышкой или через F3, этот индекс подсвечивает выделенные строки.
# Подсветка синтаксиса (Код, Скрипты, Конфиги)
#palette = 2 (Зеленый) — Ключевые слова языка (например, if, for, else, return или названия секций в конфигах).
#palette = 1 (Красный) — Строковые значения (текст внутри кавычек &quot;...&quot; или &apos;...&apos;).
#palette = 3 (Коричневый/Желтый) — Комментарии в коде (строки, начинающиеся с # или //).
#palette = 5 (Малиновый/Фиолетовый) — Типы данных, системные функции и спец-символы.

# Цвета
# https://www.ditig.com/256-colors-cheat-sheet
# Чистые светло-серые (нейтральные) цвета
#999999 — Средне-светлый серый (хорошо приглушает текст, делает его второстепенным).
#b2b2b2 — Стандартный светло-серый (классический цвет текста в старых терминалах).
#cccccc — Яркий светло-серый (отличный баланс: высокая читаемость, но мягче чистого белого).
#e6e6e6 — Платиновый / Ультра-светлый (почти белый, максимальная контрастность).
# Cветло-серые оттенки (с легким отливом)
#b0b7bd — Серебристо-сизый (содержит каплю холодного синего, идеально гармонирует с фоном панелей MC).
#cbd3da — Арктический серый (светлый, чистый, прохладный оттенок).
#c5c8c6 — «Засвеченный» серый (популярный цвет текста из темы Tomorrow Night, очень комфортный для долгого чтения).
#d4d7d0 — Мягкий шелковый серый (с легким теплым, едва заметным зеленоватым отливом).
# Оттенки светлозелёного
# Пастельные и приглушенные (шалфей, мята, олива)
#a2bfa2 — Мягкий шалфейный (очень спокойный, серовато-зеленый оттенок).
#98fb98 — Бледная мята (освежающий, пастельный зеленый).
#b5ccb5 — Матовый оливковый (светлый серый сухой мох).
#8fbc8f — Темный пастельно-зеленый (чуть более плотный, для высокой читаемости мелкого шрифта).
# Яркие и сочные (салатовый, лайм, фисташка)
#00ff00 — Чистый неоновый зеленый (классическая «матричная» классика, очень яркий).
#adff2f — Зеленый лайм (сочный, уходящий в легкую желтизну, невероятно контрастный на синем фоне).
#9fff80 — Светлый салатовый (летний, очень позитивный и чистый цвет).
#bfff80 — Фисташковый неон (светящийся светло-зеленый).
# Оттенки зелёно-серо-синего (Слейт / Матовый хаки) для меню (palette = 6)
#6d8580 — Мягкий шалфейно-синий (наиболее заметный и читаемый вариант).
#556b66 — Матовый серо-зеленый с легким сизым отливом (очень благородный).
#40524e — Глубокий слейт-зеленый (сдержанный, строгий).
#2b3835 — Темный хвойно-синеватый (на грани черного, для максимального затемнения).
# Оттенки глубокого, сочного синего для фона панелей (palette = 4)
#0055ff — Насыщенный королевский синий (очень яркий, сочный, папки на нем будут «гореть»).
#0044ee — Идеальный ультрамарин (тот самый классический цвет xterm, но в современном сочном исполнении).
#0033cc — Глубокий плотный синий (спокойный, уверенный цвет, ваш прошлый фаворит).
#0022aa — Чернильно-синий (самый темный из сочных, очень контрастный для белых букв).
# Яркие бордовые оттенки (Сочный гранат и рубин)
#a61c28 — Сочный гранатовый (очень пламенный, сильный цвет).
#8c0e1a — Насыщенный рубиновый (глубокий, но при этом светящийся).
#73000a — Чистый темно-красный краплак (яркий, плотный бордовый без ухода в коричневый).
# Темно-бордовые оттенки (Винные / Марсала / Гнилая вишня)
#5c1e24 — Классический темно-бордовый (насыщенный, винный оттенок).
#421216 — Глубокий бордовый / бургунди (очень темный, сдержанный).
#2d0c0e — «Черная вишня» (на грани черного, минимальный бордовый отлив).
# Яркие фиолетовые оттенки (Неоновый неон и сочный аметист)
#9b30b6 — Яркая фиолетовая орхидея (очень сочный, чистый фиолетовый цвет).
#7a1fa2 — Насыщенный аметист (классический яркий фиолетовый).
#6200ea — Электрический индиго (сверхсочный фиолетово-синий, который светится на темном фоне).
# Фиолетовые оттенки (Сливовые / Баклажан / Темный аметист)
#4a2254 — Насыщенный сливовый (хорошо заметный, благородный фиолетовый).
#34143d — Темный баклажан (приглушенный, глубокий ночной цвет).
#200b26 — Ультра-темный фиолетовый (очень плотный, почти черный оттенок).
# Яркие оранжевые оттенки (Огненный апельсин и тыква)
#ff6d00 — Чистый неоновый оранжевый (максимально сочный, «сигнальный» апельсиновый цвет).
#ff8f00 — Янтарно-оранжевый (теплый, насыщенный, ближе к золотому).
#e65100 — Глубокий огненный оранжевый (сочный, но чуть более плотный, чтобы буквы не сливались).

# 1. Изменение цвета фона и текста (HEX-код)
background = #1e1e2e
foreground = #c6d0f5

background — цвет самого фона (например, #000000 для чисто черного или #1a1a1a для темно-серого).
foreground — цвет основного текста (например, #ffffff для белого)

# 2. Автоматическая контрастность текста
minimum-contrast = 1.3

minimum-contrast — это встроенная функция Ghostty, которая динамически изменяет слишком тусклые цвета текста, если они сливаются с фоном (особенно полезно при высокой прозрачности):
1.0 — контрастность отключена (текст может сливаться).
1.3 — аккуратный порог, слегка приподнимает яркость текста для базовой читаемости.
3.0 и выше — делает текст максимально контрастным (в соответствии со стандартами доступности веб-интерфейсов WCAG 2.0).


# Прозрачность
background-opacity = 0.85
background-blur = true

background-opacity — задает уровень прозрачности от 0.0 (полностью прозрачный) до 1.0 (полностью непрозрачный). Значение 0.85 — оптимальный баланс.
background-blur — включает размытие фона за окном, чтобы текст оставался легко читаемым на любом фоне рабочего стола

# Смена тем
theme = dark:catppuccin-mocha
theme = light:catppuccin-latte

dark: — задает тему, которая включится, если в операционной системе (macOS или Linux) активен темный режим.
light: — задает тему для светлого системного режима.

&lt;/textarea&gt;&lt;br /&gt;&lt;/details&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;kitty&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/kovidgoyal/kitty&quot;&gt;https://github.com/kovidgoyal/kitty&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://sw.kovidgoyal.net/kitty/conf/&quot;&gt;https://sw.kovidgoyal.net/kitty/conf/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.reddit.com/r/KittyTerminal/&quot;&gt;https://www.reddit.com/r/KittyTerminal/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://wiki.archlinux.org/title/Kitty&quot;&gt;https://wiki.archlinux.org/title/Kitty&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://itsfoss.com/kitty-customization/&quot;&gt;https://itsfoss.com/kitty-customization/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;настройка&lt;br /&gt;vim ~/.bashrc&lt;br /&gt;# смена папки в названии вкладок kitty&lt;br /&gt;[[ &quot;$TERM&quot; == &quot;xterm-kitty&quot; ]] &amp;&amp; source /usr/lib/kitty/shell-integration/bash/kitty.bash&lt;br /&gt;&lt;br /&gt;Откройте Kitty нажать CTRL+SHIFT+F2 откроется файл конфигурации Kitty в новом окне, либо vim ~/.config/kitty/kitty.conf&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
# --- Подключение тем ---
include chicago95-theme.conf
#include dark-theme.auto.conf

# --- Настройка панелей и вкладок ---
# Расположение панели вкладок: top (сверху) или bottom (снизу)
tab_bar_edge top

# Стиль панели: fade (плавное затухание), slant (скошенные углы),.
# separator (разделители), powerline (стрелочки), custom
tab_bar_style separator

# Формат отображения текста на вкладке (индекс и название)
tab_title_template &quot;{index}: {title}&quot;

# Включает отслеживание мыши и кликабельность
clear_all_mouse_actions no

# Настройка зоны захвата границ окон (в пикселях)
window_drag_tolerance 5

# Отключает мерцание курсора, чтобы он не раздражал в меню mc
cursor_blink_interval 0

# Автоматически удалять пробелы в конце строк при копировании в буфер
strip_trailing_spaces smart

# --- Настройка шрифта --- (важно для ровных рамок и таблиц)
font_family      Fira Code
font_size        11.0
disable_ligatures never

# --- Прозрачность фона ---
background_opacity 0.95

# Размытие заднего фона (работает в KDE, GNOME, Hyprland и Wayland)
background_blur 20

# Разрешаем динамическое изменение прозрачности хоткеями
dynamic_background_opacity yes

# Нужно для взаимодействия с серверами, при подключении по ssh
# По умолчанию kitty автоматически выставляет TERM=xterm-kitty 
#term xterm-256color
# лучше вместо этого, на подключаемом cервере установить kitty-terminfo
# это добавит описание xterm-kitty в /usr/share/terminfo/ сервера

# ------------------------------------------------------------------------
# Цвет MC (есть в теме chicago95 )
# Классический насыщенный синий (основной фон mc)
#color4  #0000aa

# Классический яркий голубой (рамки и текст)
#color12 #5555ff

# (Опционально) Яркий белый текст на панелях mc
#color7  #aaaaaa
#color15 #ffffff

# ------------------------------------------------------------------------
# --- Горячие клавиши ---
# Открывать новое окно (сплит) в текущей папке
map ctrl+shift+enter launch --cwd=current

# Открывать новую вкладку в текущей папке
map ctrl+shift+t launch --type=tab --cwd=current

# Изменение прозрачности левая, правая стрелки
map ctrl+shift+left set_background_opacity -0.05
map ctrl+shift+right set_background_opacity +0.05


# Цвет MC (есть в теме chicago95 )
# Классический насыщенный синий (основной фон mc)
#color4  #0000aa

# Классический яркий голубой (рамки и текст)
#color12 #5555ff

# (Опционально) Яркий белый текст на панелях mc
#color7  #aaaaaa
#color15 #ffffff

# ------------------------------------------------------------------------
&lt;/textarea&gt;&lt;br /&gt;&lt;pre&gt;
grep -v -E &apos;^[[:space:]]*#|^$&apos; ~/.config/kitty/kitty.conf
&lt;/pre&gt;&lt;br /&gt;темы&lt;br /&gt;kitty +kitten themes&lt;br /&gt;kitty +list-fonts&lt;br /&gt;&lt;br /&gt;темы хранятся в ~/.cache/kitty/themes/kitty-themes.zip&lt;br /&gt;который скачивается с &lt;a href=&quot;https://github.com/kovidgoyal/kitty-themes&quot;&gt;https://github.com/kovidgoyal/kitty-themes&lt;/a&gt; при первом вызове &lt;b&gt;kitten themes&lt;/b&gt;&lt;br /&gt;при выборе темы лучше не заменять ~/.config/kitty/kitty.conf а нажать &lt;b&gt;d&lt;/b&gt; (dark)&lt;br /&gt;&lt;br /&gt;если при старте белый фон, который исправляется ctrl + shift + f5 то&lt;br /&gt;rm ~/.config/kitty/dark-theme.auto.conf ~/.config/kitty/no-preference-theme.auto.conf  ~/.config/kitty/current-theme.conf  ~/.config/kitty/theme.conf&lt;br /&gt;&lt;br /&gt;Box, Cyberpunk, Homebrew&lt;br /&gt;ANSI 1987, Pro, Default, Wez, Campbell&lt;br /&gt;&lt;br /&gt;vim ~/.config/kitty/chicago95-theme.conf&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
# --- XTERM / CHICAGO95 COLOR SCHEME FOR KITTY ---
background            #000000
foreground            #ffffff
cursor                #ffffff
selection_background  #b5d5ff
selection_foreground  #000000

# Стандартные цвета MS-DOS / Windows 95
color0  #000000
color1  #aa0000
color2  #00aa00
color3  #aa5500
color4  #0000aa
color5  #aa00aa
color6  #00aaaa
color7  #aaaaaa

# Яркие (Bold) цвета
color8  #555555
color9  #ff5555
color10 #55ff55
color11 #ffff55
color12 #5555ff
color13 #ff55ff
color14 #55ffff
color15 #ffffff

# START_AUTOGENERATED_TAB_STYLE
# Feel free to update these colors manually and remove these comments.
active_tab_foreground   #ffffff
active_tab_background   #0006aa
inactive_tab_foreground #ffffff
inactive_tab_background #0a0c27
# END_AUTOGENERATED_TAB_STYLE
&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;Чтобы отображение (цвета, шрифты, сочетания клавиш) работало корректно при подключении по SSH с терминала kitty, на удаленном сервере должен быть установлен файл конфигурации терминала (terminfo для xterm-kitty)&lt;br /&gt;&lt;br /&gt;sudo apt install kitty-terminfo&lt;br /&gt;&lt;br /&gt;если невозможна установка, то&lt;br /&gt;&lt;br /&gt;kitty +kitten ssh пользователь@хост&lt;br /&gt;&lt;br /&gt;или добавить в ~/.config/kitty/kitty.conf&lt;br /&gt;term xterm-256color&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;хоткеи&lt;/summary&gt;&lt;br /&gt;Управление окнами (Внутренние панели / Сплиты)&lt;br /&gt;Ctrl + Shift + Enter — Открыть новое окно (разделить экран).&lt;br /&gt;Ctrl + Shift + W — Закрыть текущее окно.&lt;br /&gt;Ctrl + Shift + [ — Переключиться на предыдущее окно.&lt;br /&gt;Ctrl + Shift + ] — Переключиться на следующее окно.&lt;br /&gt;Ctrl + Shift + R — Начать изменение размера активного окна.&lt;br /&gt;&lt;br /&gt;Управление вкладками (Tabs)&lt;br /&gt;Ctrl + Shift + T — Создать новую вкладку.&lt;br /&gt;Ctrl + Shift + Q — Закрыть текущую вкладку.&lt;br /&gt;Ctrl + Shift + Left — Перейти на левую вкладку.&lt;br /&gt;Ctrl + Shift + Right — Перейти на правую вкладку.&lt;br /&gt;Ctrl + Shift + Alt + T — Переименовать текущую вкладку.&lt;br /&gt;&lt;br /&gt;Прокрутка и буфер (Scrollback)&lt;br /&gt;Ctrl + Shift + Up — Прокрутить вверх на одну строку.&lt;br /&gt;Ctrl + Shift + Down — Прокрутить вниз на одну строку.&lt;br /&gt;Ctrl + Shift + PageUp — Прокрутить вверх на страницу.&lt;br /&gt;Ctrl + Shift + PageDown — Прокрутить вниз на страницу.&lt;br /&gt;Ctrl + Shift + H — Открыть весь буфер вывода в текстовом редакторе (например, в vim).&lt;br /&gt;&lt;br /&gt;Работа с текстом и экраном&lt;br /&gt;Ctrl + Shift + C — Скопировать выделенный текст в буфер.&lt;br /&gt;Ctrl + Shift + V — Вставить текст из буфера.&lt;br /&gt;Ctrl + Shift + Backspace — Сбросить терминал (очистить экран).&lt;br /&gt;Ctrl + Shift + Equal (=) — Увеличить размер шрифта.&lt;br /&gt;Ctrl + Shift + Minus (-) — Уменьшить размер шрифта.&lt;br /&gt;&lt;br /&gt;Перезагрузка конфигурации&lt;br /&gt;Ctrl + Shift + F5 — Применить изменения из kitty.conf без перезапуска терминала.&lt;br /&gt;&lt;br /&gt;сдвинуть вкладки&lt;br /&gt;Ctrl+Shift+,&lt;br /&gt;Ctrl+Shift+.&lt;br /&gt;&lt;br /&gt;Левый клик: переключение на выбранную вкладку.&lt;br /&gt;Клик колесиком (middle click): закрыть вкладку.&lt;br /&gt;&lt;/details&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;wezterm&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://wezterm.org/&quot;&gt;https://wezterm.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;установка&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
curl -fsSL https://apt.fury.io/wez/gpg.key | sudo gpg --yes --dearmor -o /usr/share/keyrings/wezterm-fury.gpg
echo &apos;deb [signed-by=/usr/share/keyrings/wezterm-fury.gpg] https://apt.fury.io/wez/ * *&apos; | sudo tee /etc/apt/sources.list.d/wezterm.list
sudo chmod 644 /usr/share/keyrings/wezterm-fury.gpg
sudo apt update
sudo apt install wezterm
&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;темы&lt;br /&gt;&lt;a href=&quot;https://wezterm.org/colorschemes/t/index.html&quot;&gt;https://wezterm.org/colorschemes/t/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;темы берёт из&lt;br /&gt;&lt;a href=&quot;https://github.com/mbadolato/iterm2-color-schemes&quot;&gt;https://github.com/mbadolato/iterm2-color-schemes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;дополнительно&lt;br /&gt;&lt;a href=&quot;https://github.com/michaelbrusegard/awesome-wezterm&quot;&gt;https://github.com/michaelbrusegard/awesome-wezterm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;установка тем&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
mkdir -p ~/.config/wezterm/colors &amp;&amp; git clone --depth 1 https://github.com/mbadolato/iterm2-color-schemes /tmp/wezterm-themes &amp;&amp; cp /tmp/wezterm-themes/wezterm/* ~/.config/wezterm/colors/ &amp;&amp; rm -rf /tmp/wezterm-themes
&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;создание конфига&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
mkdir -p ~/.config/wezterm &amp;&amp; nano ~/.config/wezterm/wezterm.lua
&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;вставить&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
local wezterm = require &apos;wezterm&apos;
local config = wezterm.config_builder()

-- ещё темы &apos;CGA&apos;, &apos;Terminal Basic&apos;, &apos;Konsolas&apos; или &apos;Terminal Basic&apos;
config.color_scheme = &apos;CGA&apos;

-- вместо alt+enter сделать распахивание по F11
config.keys = {
  { key = &apos;F11&apos;, mods = &apos;NONE&apos;, action = wezterm.action.ToggleFullScreen },
  { key = &apos;Enter&apos;, mods = &apos;ALT&apos;, action = wezterm.action.DisableDefaultAssignment },
}

return config
&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;В WezTerm встроен мощный экран отладки.&lt;br /&gt;Откройте WezTerm.Нажмите комбинацию клавиш Ctrl + Shift + L.&lt;br /&gt;Перед вами откроется консоль отладки (Debug Overlay).&lt;br /&gt;Наберите там (или скопируйте) команду и нажмите Enter&lt;br /&gt;wezterm.config_file&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;разное&lt;/summary&gt;&lt;br /&gt;по сочетаниям клавиш&lt;br /&gt;Отключаем ВСЕ стандартные комбинации WezTerm (включая Alt+Enter)&lt;br /&gt;config.disable_default_key_bindings = true&lt;br /&gt;если вы хотите вернуть копирование/вставку, раскомментируйте строки ниже:&lt;br /&gt;  -- { key = &apos;C&apos;, mods = &apos;CTRL|SHIFT&apos;, action = wezterm.action.CopyTo &apos;Clipboard&apos; },&lt;br /&gt;  -- { key = &apos;V&apos;, mods = &apos;CTRL|SHIFT&apos;, action = wezterm.action.PasteFrom &apos;Clipboard&apos; },&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;/details&gt;&lt;/details&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5837376.html&quot;&gt;консольная подборка&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5789209.html&quot;&gt;консоль python в роли командной строки&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5759311.html&quot;&gt;разница между DE и WM, а также работа в голых иксах&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=5878271&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/5878271.html</comments>
  <category>cmd</category>
  <category>bash</category>
  <category>config</category>
  <category>wayland</category>
  <category>консоль</category>
  <category>linux</category>
  <category>ноут</category>
  <category>полезное</category>
  <category>debian</category>
  <category>bsd</category>
  <category>x</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/5877830.html</guid>
  <pubDate>Mon, 16 Mar 2026 18:32:28 GMT</pubDate>
  <title>изоляция Max</title>
  <link>https://uzverss.dreamwidth.org/5877830.html</link>
  <description>&lt;br&gt;&lt;details&gt;&lt;summary&gt;посмотреть&lt;/summary&gt;&lt;br /&gt;&lt;h4&gt;установка&lt;/h4&gt;&lt;br /&gt;&lt;a href=&quot;https://download.max.ru/linux-repos&quot;&gt;https://download.max.ru/linux-repos&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.max.ru/linux/deb/public.asc | sudo gpg --dearmor -o /etc/apt/keyrings/max.gpg &amp;gt;/dev/null
echo &quot;deb [signed-by=/etc/apt/keyrings/max.gpg] https://download.max.ru/linux/deb stable main&quot; | sudo tee /etc/apt/sources.list.d/max.list
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;sudo apt update&lt;br /&gt;sudo apt install max&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;изолировать десктопный клиент linux&lt;/h4&gt;&lt;br /&gt;есть qemu и docker, то есть virbr0 и docker0 надо запустить, чтобы оно не видело мою сеть&lt;br /&gt;&lt;br /&gt;sudo apt install firejail&lt;br /&gt;&lt;br /&gt;даём доступ в сеть&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
sudo sed -i &apos;s/^restricted-network yes/restricted-network no/&apos; /etc/firejail/firejail.config
sed -i &apos;s/^# *network yes$/network yes/&apos; /etc/firejail/firejail.config
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;запустить в песочнице&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
firejail --noprofile --net=docker0 --dns=1.1.1.1 --private=~/max_data --env=DISPLAY=$DISPLAY max
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;уровень изоляции&lt;/summary&gt;&lt;br /&gt;Вот что именно он НЕ СМОЖЕТ передать:&lt;br /&gt;Ваши файлы: Благодаря --private=~/max_data приложение «думает», что в вашем домашнем каталоге пусто. Оно не увидит ваши документы, фото, SSH-ключи, переписку в Telegram или историю браузера Chrome.&lt;br /&gt;Ваше окружение (LAN): Благодаря --net=docker0 клиент видит только виртуальную сеть Docker. Он не узнает, какие устройства (умные лампы, NAS, другие ПК) есть в вашей домашней сети 192.168.x.x.&lt;br /&gt;Ваш реальный MAC-адрес: Он увидит только виртуальный MAC-адрес интерфейса Docker, а не аппаратный адрес вашей Wi-Fi или сетевой карты.&lt;br /&gt;Список установленных программ: Firejail по умолчанию скрывает содержимое многих системных директорий, мешая составить профиль вашего софта.&lt;br /&gt;&lt;br /&gt;Что он ВСЁ ЕЩЕ МОЖЕТ передать:&lt;br /&gt;Ваш внешний IP-адрес: Поскольку трафик уходит в интернет через ваш роутер, сервер MAX увидит ваш реальный публичный IP (если вы не используете VPN на уровне всей системы или внутри контейнера).&lt;br /&gt;Сведения о «железе»: Даже в песочнице приложение может прочитать модель процессора (/proc/cpuinfo), объем оперативной памяти и версию ядра Linux.&lt;br /&gt;Ваш часовой пояс и язык системы: Эти данные обычно доступны через переменные окружения, если их не подменить принудительно.&lt;br /&gt;Метаданные внутри приложения: Номер телефона (при регистрации), ID вашего аккаунта и время активности в сети.&lt;br /&gt;&lt;br /&gt;Как сделать изоляцию «абсолютной»?&lt;br /&gt;Если вы хотите скрыть даже внешний IP, запускайте команду через VPN-интерфейс (если он у вас поднят в системе как отдельное устройство, например tun0):&lt;br /&gt;&lt;br /&gt;firejail --net=tun0 --dns=1.1.1.1 --private=~/max_data --env=DISPLAY=$DISPLAY max&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;проверка изоляции&lt;/summary&gt;&lt;br /&gt;1. Проверка сетевого адреса (IP и MAC)&lt;br /&gt;firejail --noprofile --net=docker0 --private=~/max_data bash -c &quot;ip addr&quot;&lt;br /&gt;&lt;br /&gt;2. Проверка DNS-утечек&lt;br /&gt;firejail --noprofile --net=docker0 --dns=1.1.1.1 --private=~/max_data bash -c &quot;cat /etc/resolv.conf&quot;&lt;br /&gt;&lt;br /&gt;3. Видит ли он соседей по сети?&lt;br /&gt;firejail --noprofile --net=docker0 --private=~/max_data ping -c 2 192.168.1.1&lt;br /&gt;&lt;br /&gt;4. Проверка файловой системы&lt;br /&gt;firejail --noprofile --private=~/max_data bash -c &quot;ls -a ~&quot;&lt;br /&gt;&lt;br /&gt;5. Мониторинг в реальном времени&lt;br /&gt;firejail --top&lt;br /&gt;&lt;br /&gt;6. Проверка маршрутов&lt;br /&gt;firejail --noprofile --net=docker0 --private=~/max_data ip route&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Изоляция через Docker&lt;/summary&gt;&lt;br /&gt;Размер образа будет зависеть от того, насколько «чистым» вы его сделаете. Если использовать Ubuntu или Debian в качестве базы, то итоговый образ займет примерно 400–700 МБ.&lt;br /&gt;Вот из чего складывается этот объем:&lt;br /&gt;Базовый слой (Base Image): ubuntu:22.04 весит около 75 МБ.&lt;br /&gt;Зависимости (Библиотеки): MAX — это графическое приложение (скорее всего, на базе Electron или Qt), ему нужны библиотеки X11, GTK/Qt, Mesa (для графики) и звуковые драйверы. Это добавит еще 200–300 МБ.&lt;br /&gt;Сам клиент MAX: Его .deb пакет весит около 80–120 МБ.&lt;br /&gt;&lt;br /&gt;Это создаст полностью изолированную файловую систему и сетевой стек.&lt;br /&gt;Создайте Dockerfile ubuntu:22.04&lt;br /&gt;dockerfile&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
FROM ubuntu:22.04
RUN apt-get update &amp;&amp; apt-get install -y wget gpg libgl1-mesa-dri libgl1-mesa-glx libpulse0
# Добавьте репозиторий MAX и установите клиент (подставьте команды из инструкции на сайте)
RUN wget -qO - https://download.max.ru | gpg --dearmor &amp;gt; /etc/apt/trusted.gpg.d/max.gpg
RUN echo &quot;deb https://download.max.ru stable main&quot; &amp;gt; /etc/apt/sources.list.d/max.list
RUN apt-get update &amp;&amp; apt-get install -y max
# Запуск от имени обычного пользователя для безопасности
RUN useradd -m maxuser
USER maxuser
CMD [&quot;max&quot;]
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;или debian:13-slim&lt;br /&gt;dockerfile&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
FROM debian:13-slim
# Установка только необходимых библиотек без лишнего мусора
RUN apt-get update &amp;&amp; apt-get install -y --no-install-recommends \
    wget ca-certificates gpg libgl1-mesa-dri libgl1-mesa-glx \
    libpulse0 libx11-6 libxcomposite1 libasound2 \
    &amp;&amp; wget -qO - https://download.max.ru | gpg --dearmor &amp;gt; /etc/apt/trusted.gpg.d/max.gpg \
    &amp;&amp; echo &quot;deb https://download.max.ru stable main&quot; &amp;gt; /etc/apt/sources.list.d/max.list \
    &amp;&amp; apt-get update &amp;&amp; apt-get install -y max \
    &amp;&amp; apt-get clean &amp;&amp; rm -rf /var/lib/apt/lists/*

# Создаем пользователя, чтобы не сидеть под root
RUN useradd -m maxuser
USER maxuser
WORKDIR /home/maxuser
CMD [&quot;max&quot;]
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;сборка&lt;br /&gt;docker build -t max-client .&lt;br /&gt;&lt;br /&gt;разрешение доступа&lt;br /&gt;xhost +local:docker&lt;br /&gt;&lt;br /&gt;варианты запуска&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
docker run -d \
  --name max_isolated \
  --net bridge \
  -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  --device /dev/snd \
  max-client
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
docker run -it --rm \
  --net bridge \
  --name max_isolated \
  -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix:ro \
  -v ~/max_data:/home/maxuser/.config/MAX \
  --device /dev/snd \
  --dns 1.1.1.1 \
  -u $(id -u):$(id -g) \
  ваше_имя_образа_с_max max
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
docker run -it --rm \
  --net bridge \
  -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -v ~/max_data:/home/user/.config/max \
  --device /dev/snd \
  ubuntu:22.04 bash
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;возможные ошибки&lt;/summary&gt;&lt;br /&gt;ls -la /usr/bin/firejail&lt;br /&gt;Если в начале строки нет буквы s (например, -rwxr-xr-x), выполните:&lt;br /&gt;sudo chmod u+s /usr/bin/firejail&lt;br /&gt;&lt;br /&gt;если нет звука&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
firejail --noprofile \
  --net=docker0 --dns=1.1.1.1 \
  --private=~/max_data \
  --env=DISPLAY=$DISPLAY \
  --env=PULSE_SERVER=unix:/run/user/$(id -u)/pulse/native \
  --whitelist=/run/user/$(id -u)/pulse/native \
  max
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Иногда приложению нужны права на низкоуровневые протоколы. Добавьте в команду:&lt;br /&gt;--protocol=unix,inet,inet6&lt;br /&gt;&lt;br /&gt;Cannot open netlink socket: Operation not supported&lt;br /&gt;ping: socktype: SOCK_RAW&lt;br /&gt;ping: socket: Операция не позволена&lt;br /&gt;ping: =&amp;gt; missing cap_net_raw+p capability or setuid?&lt;br /&gt;&lt;br /&gt; Разрешите создание namespaces&lt;br /&gt;Выполните команду (как root):&lt;br /&gt;sudo sysctl -w kernel.unprivileged_userns_clone=1&lt;br /&gt;&lt;br /&gt;(Чтобы настройка сохранилась после перезагрузки, добавьте строку kernel.unprivileged_userns_clone=1 в файл /etc/sysctl.d/99-sysctl.conf).&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;изоляция на android&lt;/summary&gt;&lt;br /&gt;Чтобы пресечь сканирование сети и контактов в обычном Android-приложении (по аналогии с вашим конфигом Firejail), используйте следующие инструменты:&lt;br /&gt;&lt;br /&gt;1. Защита контактов (Аналог --private / No-Access)&lt;br /&gt;В Android нельзя просто «подсунуть» пустой файл контактов через конфиг, но можно обмануть приложение:&lt;br /&gt;Настройки системы: Самый простой путь — Настройки -&amp;gt; Приложения -&amp;gt; Max -&amp;gt; Разрешения -&amp;gt; Контакты -&amp;gt; Запретить.&lt;br /&gt;Shelter / Insular (Рекомендую): Установите Max в Рабочий профиль через Shelter. В этом профиле список контактов по умолчанию пуст. Приложение будет думать, что у вас 0 знакомых, и не получит доступа к вашей основной книге.&lt;br /&gt;App Ops (через Shizuku): Позволяет установить режим Ignore. Приложение будет запрашивать контакты, система скажет «ок», но вернет пустой список вместо ошибки (это предотвращает вылеты приложения).&lt;br /&gt;&lt;br /&gt;2. Защита сети (Аналог --net=docker0 и --dns)&lt;br /&gt;Сканирование локальной сети (LAN) в Android обычно происходит через mDNS или перебор IP в подсети.&lt;br /&gt;RethinkDNS / NetGuard:&lt;br /&gt;Установите это приложение (оно работает как локальный VPN).&lt;br /&gt;В настройках для приложения Max включите Isolate (Изоляция). Это запретит ему любые соединения, кроме тех, что вы разрешите.&lt;br /&gt;Там же можно принудительно задать DNS 1.1.1.1, как в вашей команде.&lt;br /&gt;GrapheneOS / CalyxOS: Если у вас кастомная прошивка, там есть переключатель &quot;Network&quot;. Если его выключить, приложение вообще не увидит сетевой стек (полный аналог net none).&lt;br /&gt;&lt;br /&gt;3. Защита от сканирования Wi-Fi/Bluetooth&lt;br /&gt;Приложения часто сканируют сеть через поиск соседних Wi-Fi точек или Bluetooth-устройств.&lt;br /&gt;Зайдите в Настройки -&amp;gt; Местоположение -&amp;gt; Поиск сетей Wi-Fi и устройств Bluetooth -&amp;gt; Выключить оба.&lt;br /&gt;Обязательно отзовите у приложения Max разрешение на Местоположение (Location). В Android доступ к списку Wi-Fi сетей неразрывно связан с GPS-разрешением.&lt;br /&gt;&lt;br /&gt;Итоговый рецепт «Max-Android-Jail»:&lt;br /&gt;Создаете рабочий профиль через Shelter.&lt;br /&gt;Клонируете туда Max.&lt;br /&gt;В основном профиле удаляете Max.&lt;br /&gt;Ставите RethinkDNS, включаете в нем DNS 1.1.1.1 и блокируете для Max все, кроме нужных адресов.&lt;br /&gt;Хотите подробнее узнать, как настроить RethinkDNS, чтобы приложение видело только интернет, но не вашу локальную сеть?&lt;br /&gt;&lt;br /&gt;1. Установка и базовый DNS&lt;br /&gt;Установите RethinkDNS (лучше версию с F-Droid или сайта разработчика, там больше функций, чем в Play Store).&lt;br /&gt;Откройте приложение, нажмите на плитку DNS.&lt;br /&gt;Выберите Configure -&amp;gt; Cloudflare (это и есть ваш 1.1.1.1) или введите вручную через «Custom DNS».&lt;br /&gt;2. Изоляция от локальной сети (Аналог --net)&lt;br /&gt;Чтобы приложение max не могло «пинговать» ваш роутер, умные лампочки или другие устройства в домашней сети:&lt;br /&gt;В главном меню RethinkDNS зайдите в раздел Firewall.&lt;br /&gt;Найдите пункт Universal Firewall Rules (Общие правила).&lt;br /&gt;Включите переключатель Block LAN connections (Блокировать соединения в локальной сети).&lt;br /&gt;Это запретит всем приложениям доступ к IP-адресам типа 192.168.x.x, 10.x.x.x и т.д.&lt;br /&gt;3. Настройка конкретно для приложения Max&lt;br /&gt;Если вы не хотите ограничивать всю систему, а только max:&lt;br /&gt;В главном меню нажмите Apps (Приложения).&lt;br /&gt;Найдите в списке приложение Max.&lt;br /&gt;Нажмите на него, чтобы открыть индивидуальные настройки.&lt;br /&gt;Убедитесь, что для него включен режим Firewall on.&lt;br /&gt;Если нужно, чтобы оно работало только когда вы его видите, включите Block when screen is off.&lt;br /&gt;(Опционально) В разделе Log вы сможете увидеть, куда именно max пытается «стучаться» (IP и домены), и заблокировать конкретные узлы одним нажатием.&lt;br /&gt;4. Запуск «песочницы»&lt;br /&gt;Вернитесь на главный экран RethinkDNS.&lt;br /&gt;Нажмите кнопку START. Система запросит разрешение на создание VPN-соединения — подтвердите.&lt;br /&gt;Теперь трафик идет через 1.1.1.1, а доступ к локальной сети для max закрыт.&lt;br /&gt;Важный нюанс: Чтобы приложение не сканировало сеть через Wi-Fi/Bluetooth (соседние точки доступа), обязательно зайдите в настройки Android и отзовите у Max разрешение на «Местоположение» (Location). В Android сканирование эфира технически привязано к GPS.&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=5877830&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/5877830.html</comments>
  <category>docker</category>
  <category>max</category>
  <category>работа</category>
  <category>безопасность</category>
  <category>сисадм</category>
  <category>android</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/5877592.html</guid>
  <pubDate>Sat, 28 Feb 2026 16:40:00 GMT</pubDate>
  <title>VLESS + REALITY</title>
  <link>https://uzverss.dreamwidth.org/5877592.html</link>
  <description>&lt;br&gt;&lt;img src=&quot;https://finevpn.org/wp-content/uploads/2025/02/SEzgNUYbetxBGPANH15G9sjglXd5mU77P1UMvqCK@2x-1200x584.jpg&quot; width=&quot;411&quot;&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;развернуть&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://xtls.github.io/ru/document/&quot;&gt;https://xtls.github.io/ru/document/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/XTLS/Xray-examples&quot;&gt;https://github.com/XTLS/Xray-examples&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;bash -c &quot;$(curl -L &lt;a href=&quot;https://github.com/XTLS/Xray-install/raw/main/install-release.sh&quot;&gt;https://github.com/XTLS/Xray-install/raw/main/install-release.sh&lt;/a&gt;)&quot; @ help&lt;br /&gt;&lt;br /&gt;Стандарт иерархии файловых систем (FHS)&lt;br /&gt;installed: /etc/systemd/system/xray.service&lt;br /&gt;installed: /etc/systemd/system/xray@.service&lt;br /&gt;&lt;br /&gt;installed: /usr/local/bin/xray&lt;br /&gt;installed: /usr/local/etc/xray/*.json&lt;br /&gt;&lt;br /&gt;installed: /usr/local/share/xray/geoip.dat&lt;br /&gt;installed: /usr/local/share/xray/geosite.dat&lt;br /&gt;&lt;br /&gt;installed: /var/log/xray/access.log&lt;br /&gt;installed: /var/log/xray/error.log&lt;br /&gt;&lt;br /&gt;Основные правила использования&lt;br /&gt;Установите и обновите Xray-core и геоданные с помощью этой команды User=nobody, но она НЕ перезапишет Userсуществующие файлы сервиса.&lt;br /&gt;bash -c &quot;$(curl -L &lt;a href=&quot;https://github.com/XTLS/Xray-install/raw/main/install-release.sh&quot;&gt;https://github.com/XTLS/Xray-install/raw/main/install-release.sh&lt;/a&gt;)&quot; @ install&lt;br /&gt;&lt;br /&gt;Удалите Xray, за исключением файлов json и logs.&lt;br /&gt;bash -c &quot;$(curl -L &lt;a href=&quot;https://github.com/XTLS/Xray-install/raw/main/install-release.sh&quot;&gt;https://github.com/XTLS/Xray-install/raw/main/install-release.sh&lt;/a&gt;)&quot; @ remove&lt;br /&gt;&lt;br /&gt;Удалите Xray, включите JSON и логи.&lt;br /&gt;bash -c &quot;$(curl -L &lt;a href=&quot;https://github.com/XTLS/Xray-install/raw/main/install-release.sh&quot;&gt;https://github.com/XTLS/Xray-install/raw/main/install-release.sh&lt;/a&gt;)&quot; @ remove --purge&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Установка Xray на сервер&lt;/summary&gt;&lt;br /&gt;bash &amp;lt;(curl -Ls &lt;a href=&quot;https://github.com/XTLS/Xray-install/raw/main/install-release.sh&quot;&gt;https://github.com/XTLS/Xray-install/raw/main/install-release.sh&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Проверка:&lt;br /&gt;xray version&lt;br /&gt;&lt;br /&gt;Сгенерировать ключи REALITY&lt;br /&gt;xray x25519&lt;br /&gt;&lt;br /&gt;Private key: XXXXX&lt;br /&gt;Password:  YYYYY&lt;br /&gt;&lt;br /&gt;Выбери target‑сайт&lt;br /&gt;Важно:&lt;br /&gt;крупный сайт&lt;br /&gt;поддерживает TLS 1.3&lt;br /&gt;не заблокирован у тебя&lt;br /&gt;не «экзотический»&lt;br /&gt;Пример: любой крупный CDN‑сайт, который у тебя открывается стабильно.&lt;br /&gt;Делайте dest под популярный CDN (Cloudflare, Microsoft, Google)&lt;br /&gt;Проверь:&lt;br /&gt;openssl s_client -connect example.com:443 -tls1_3&lt;br /&gt;&lt;br /&gt;xray tls ping images.apple.com&lt;br /&gt;xray tls ping www.cisco.com&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;пояснения&lt;/summary&gt;&lt;br /&gt;На какие строки смотреть в выводе xray tls ping?&lt;br /&gt;&lt;br /&gt;При анализе вывода вам нужно проверять ровно три главных параметра:&lt;br /&gt;1. Успех рукопожатия (Handshake)Что искать: &lt;br /&gt;Строку Handshake succeeded в обоих блоках (Pinging without SNI и Pinging with SNI).&lt;br /&gt;Почему важно: Если там написано Failed или соединение сбрасывается, сайт сразу отпадает.&lt;br /&gt;&lt;br /&gt;2. Версия TLSЧто искать: &lt;br /&gt;Строку TLS Version: TLS 1.3.&lt;br /&gt;Почему важно: Реалити работает только со стабильным протоколом TLS 1.3. &lt;br /&gt;Если сервер выдает TLS 1.2, он не подходит.&lt;br /&gt;&lt;br /&gt;3. Совпадение хэшей сертификата (Самое важное!)&lt;br /&gt;Что искать: Строку Cert&apos;s leaf SHA256: [набор_символов] в блоке Without SNI и точно такую же строку в блоке With SNI.&lt;br /&gt;Почему важно: Значения хэшей в обоих блоках должны быть абсолютно одинаковыми (буква в букву). &lt;br /&gt;Если они отличаются (как было у apple.com), сайт использовать для Reality нельзя — цензор легко обнаружит подмену.&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&quot;dest&quot;: &quot;images.apple.com:443&quot;&lt;br /&gt;&quot;dest&quot;: &quot;www.cisco.com:443&quot;&lt;br /&gt;&lt;br /&gt;вставляем dest в блок realitySettings&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
&quot;realitySettings&quot;: {
  &quot;show&quot;: false,
  &quot;dest&quot;: &quot;images.apple.com:443&quot;,
  &quot;serverNames&quot;: [
    &quot;images.apple.com&quot;,
    &quot;www.apple.com&quot;
  ],
  &quot;privateKey&quot;: &quot;ВАШ_ПРИВАТНЫЙ_КЛЮЧ&quot;,
  &quot;shortIds&quot;: [
    &quot;ВАШ_SHORT_ID&quot;
  ]
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Генерируем UUID для VLESS&lt;br /&gt;xray uuid или cat /proc/sys/kernel/random/uuid&lt;br /&gt;&lt;br /&gt;Генерируем SHORT_ID&lt;br /&gt;openssl rand -hex 8&lt;br /&gt;&lt;br /&gt;shortIds — это короткий идентификатор, который:&lt;br /&gt;передаётся клиентом при подключении&lt;br /&gt;проверяется сервером&lt;br /&gt;участвует в аутентификации REALITY&lt;br /&gt;Без правильного shortId соединение не установится.&lt;br /&gt;Это hex‑строка&lt;br /&gt;8–16 символов&lt;br /&gt;только 0–9 и a–f&lt;br /&gt;без пробелов&lt;br /&gt;&lt;br /&gt;Где указывается&lt;br /&gt;На сервере (config.json)&lt;br /&gt;&lt;pre&gt;
&quot;shortIds&quot;: [
  &quot;6ba85179e30d4fc2&quot;
]
&lt;/pre&gt;&lt;br /&gt;Можно указать несколько:&lt;br /&gt;&lt;pre&gt;
&quot;shortIds&quot;: [
  &quot;a1b2c3d4&quot;,
  &quot;6ba85179&quot;,
  &quot;9f8e7d6c&quot;
]
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Конфиг лежит здесь:&lt;br /&gt;/usr/local/etc/xray/config.json&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
server
{
  &quot;log&quot;: {
    &quot;loglevel&quot;: &quot;warning&quot;
  },
  &quot;inbounds&quot;: [
    {
      &quot;listen&quot;: &quot;0.0.0.0&quot;,
      &quot;port&quot;: 443,
      &quot;protocol&quot;: &quot;vless&quot;,
      &quot;settings&quot;: {
        &quot;clients&quot;: [
          {
            &quot;id&quot;: &quot;ВАШ-UUID&quot;
          }
        ],
        &quot;decryption&quot;: &quot;none&quot;
      },
      &quot;streamSettings&quot;: {
        &quot;network&quot;: &quot;grpc&quot;,
        &quot;security&quot;: &quot;reality&quot;,
        &quot;grpcSettings&quot;: {
          &quot;serviceName&quot;: &quot;grpc-video-speed&quot;
        },
        &quot;realitySettings&quot;: {
          &quot;show&quot;: false,
          &quot;dest&quot;: &quot;САЙТ_ДЛЯ_МАСКИРОВКИ.com:443&quot;,
          &quot;xver&quot;: 0,
          &quot;serverNames&quot;: [
            &quot;САЙТ_ДЛЯ_МАСКИРОВКИ.com&quot;
          ],
          &quot;privateKey&quot;: &quot;ВАШ-PRIVATE-KEY&quot;,
          &quot;shortIds&quot;: [
            &quot;SHORT_ID_1&quot;,
            &quot;SHORT_ID_2&quot;,
            &quot;SHORT_ID_3&quot;
          ]
        }
      }
    }
  ],
  &quot;outbounds&quot;: [
    {
      &quot;protocol&quot;: &quot;freedom&quot;
    }
  ]
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Что заменить:&lt;br /&gt;ВАШ-UUID&lt;br /&gt;ВАШ-PRIVATE-KEY&lt;br /&gt;shortIds (8–16 hex символов)&lt;br /&gt;&lt;br /&gt;Открываем порт 443&lt;br /&gt;Если включён firewall:&lt;br /&gt;ufw allow 443/tcp&lt;br /&gt;&lt;br /&gt;Запуск Xray&lt;br /&gt;systemctl restart xray&lt;br /&gt;systemctl enable xray&lt;br /&gt;systemctl status xray&lt;br /&gt;systemctl cat xray&lt;br /&gt;Если всё зелёное — сервер готов.&lt;br /&gt;&lt;br /&gt;запущенные&lt;br /&gt;systemctl list-units --state=running&lt;br /&gt;systemctl list-units --type=service --state=running&lt;br /&gt;&lt;br /&gt;стартующие при загрузке&lt;br /&gt;systemctl list-unit-files --type=service --state=enabled&lt;br /&gt;&lt;br /&gt;узнать, стоит ли в автозагрузке твой xray&lt;br /&gt;systemctl is-enabled xray&lt;br /&gt;&lt;br /&gt;Как быстро проверить JSON&lt;br /&gt;На сервере:&lt;br /&gt;cat /usr/local/etc/xray/config.json | python3 -m json.tool&lt;br /&gt;Если есть ошибка — Python покажет строку.&lt;br /&gt;Проверка самим Xray:&lt;br /&gt;xray run -test -config /usr/local/etc/xray/config.json&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Используем Xray как клиент&lt;/summary&gt;&lt;br /&gt;bash -c &quot;$(curl -L &lt;a href=&quot;https://github.com/XTLS/Xray-install/raw/main/install-release.sh&quot;&gt;https://github.com/XTLS/Xray-install/raw/main/install-release.sh&lt;/a&gt;)&quot; @ install&lt;br /&gt;&lt;br /&gt;конфигурационный файл config.json:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;log&quot;: {
    &quot;loglevel&quot;: &quot;info&quot;
  },
  &quot;inbounds&quot;: [
    {
      &quot;port&quot;: 1080,
      &quot;listen&quot;: &quot;127.0.0.1&quot;,
      &quot;protocol&quot;: &quot;socks&quot;,
      &quot;settings&quot;: {
        &quot;auth&quot;: &quot;noauth&quot;,
        &quot;udp&quot;: true
      },
      &quot;sniffing&quot;: {
        &quot;enabled&quot;: true,
        &quot;destOverride&quot;: [&quot;http&quot;, &quot;tls&quot;]
      }
    }
  ],
  &quot;outbounds&quot;: [
    {
      &quot;protocol&quot;: &quot;vless&quot;,
      &quot;tag&quot;: &quot;proxy&quot;,
      &quot;settings&quot;: {
        &quot;vnext&quot;: [
          {
            &quot;address&quot;: &quot;IP_ВАШЕГО_СЕРВЕРА&quot;, 
            &quot;port&quot;: 443, 
            &quot;users&quot;: [
              {
                &quot;id&quot;: &quot;ВАШ-UUID&quot;, 
                &quot;encryption&quot;: &quot;none&quot;
                /* Строка &quot;flow&quot;: &quot;xtls-rprx-vision&quot; УДАЛЕНА, комментарии как в Cи */
              }
            ]
          }
        ]
      },
      &quot;streamSettings&quot;: {
        &quot;network&quot;: &quot;grpc&quot;,
        &quot;security&quot;: &quot;reality&quot;,
        &quot;grpcSettings&quot;: {
          &quot;serviceName&quot;: &quot;grpc-video-speed&quot;
        },
        &quot;realitySettings&quot;: {
          &quot;serverName&quot;: &quot;САЙТ_ДЛЯ_МАСКИРОВКИ&quot;,
          &quot;publicKey&quot;: &quot;ВАШ_PUBLIC_KEY&quot;,
          &quot;fingerprint&quot;: &quot;chrome&quot;,
          &quot;shortId&quot;: &quot;ВАШ_SHORT_ID&quot; 
        }
      }
    },
    {
      &quot;protocol&quot;: &quot;freedom&quot;,
      &quot;tag&quot;: &quot;direct&quot;
    }
  ],
  &quot;dns&quot;: {
    &quot;tag&quot;: &quot;dns-in&quot;,
    &quot;queryStrategy&quot;: &quot;UseIPv4&quot;,
    &quot;servers&quot;: [
      &quot;8.8.8.8&quot;,
      &quot;1.1.1.1&quot;,
      &quot;localhost&quot;
    ]
  },
  &quot;routing&quot;: {
    &quot;domainStrategy&quot;: &quot;IPOnDemand&quot;,
    &quot;rules&quot;: [
      {
        &quot;type&quot;: &quot;field&quot;,
        &quot;port&quot;: 53,
        &quot;network&quot;: &quot;udp&quot;,
        &quot;outboundTag&quot;: &quot;proxy&quot; 
      },
      {
        &quot;type&quot;: &quot;field&quot;,
        &quot;ip&quot;: [&quot;geoip:private&quot;, &quot;geoip:ru&quot;], 
        &quot;outboundTag&quot;: &quot;direct&quot;
      },
      {
        &quot;type&quot;: &quot;field&quot;,
        &quot;network&quot;: &quot;tcp,udp&quot;,
        &quot;outboundTag&quot;: &quot;proxy&quot;
      }
    ]
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Замените все поля на свои значения: UUID, PASSWORD (PublicKey), SHORT_ID, IP сервера САЙТ_ДЛЯ_МАСКИРОВКИ.&lt;br /&gt;&lt;br /&gt;Запуск Xray клиента&lt;br /&gt;xray run -c config.json&lt;br /&gt;&lt;br /&gt;По умолчанию создаст SOCKS5 прокси на 127.0.0.1:1080.&lt;br /&gt;&lt;br /&gt;Использование в Linux&lt;br /&gt;Через браузер&lt;br /&gt;&lt;br /&gt;Настрой SOCKS5 прокси: 127.0.0.1:1080&lt;br /&gt;Или через proxychains:&lt;br /&gt;&lt;br /&gt;sudo vim /etc/proxychains4.conf&lt;br /&gt;Удали строку socks4 127.0.0.1 9050 и добавь свою: socks5  127.0.0.1  1080&lt;br /&gt;или просто заменить всё на это&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
strict_chain
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
localnet 127.0.0.0/255.0.0.0
quiet_mode

[ProxyList]
socks5  127.0.0.1 1080
# socks5  127.0.0.1 9050
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;proxychains4 firefox&lt;br /&gt;или&lt;br /&gt;proxychains4 curl &lt;a href=&quot;https://1.1.1.1&quot;&gt;https://1.1.1.1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;проверка&lt;br /&gt;proxychains4 curl ifconfig.me \n;&lt;br /&gt;&lt;br /&gt;Запустить любой скрипт:&lt;br /&gt;proxychains4 python3 script.py&lt;br /&gt;&lt;br /&gt;ProxyChains подменяет системные вызовы динамических библиотек. Если программа статически скомпилирована (например, на языке Go, как сам Xray или Docker), ProxyChains может с ней не сработать. В таких случаях используют переменные окружения:&lt;br /&gt;export https_proxy=&lt;a href=&quot;http://127.0.0.1:1080&quot;&gt;http://127.0.0.1:1080&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Через системный прокси&lt;br /&gt;Можно выставить переменные окружения:&lt;br /&gt;&lt;br /&gt;export https_proxy=socks5://127.0.0.1:1080&lt;br /&gt;export http_proxy=socks5://127.0.0.1:1080&lt;br /&gt;И браузер/утилиты будут использовать VPN туннель.&lt;br /&gt;&lt;br /&gt;Проверка работы&lt;br /&gt;curl -x socks5h://127.0.0.1:1080 &lt;a href=&quot;https://1.1.1.1&quot;&gt;https://1.1.1.1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Если вернулось содержимое страницы → подключение работает.&lt;br /&gt;&lt;br /&gt;проверка DNS&lt;br /&gt;&lt;a href=&quot;https://dnsleaktest.com/&quot;&gt;https://dnsleaktest.com/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://mullvad.net/ru/check&quot;&gt;https://mullvad.net/ru/check&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Можно подключаться к Server по ssh через xray. Одной строкой:&lt;br /&gt;ssh root@server.xray.com -o &quot;ProxyCommand=nc -X connect -x 127.0.0.1:10808 %h %p&quot;&lt;br /&gt;&lt;br /&gt;sudo apt install qt5-default qt5-qmake qtbase5-dev-tools&lt;br /&gt;wget &lt;a href=&quot;https://github.com/qv2ray/qv2ray/releases/download/vX.Y.Z/Qv2ray-vX.Y.Z.AppImage&quot;&gt;https://github.com/qv2ray/qv2ray/releases/download/vX.Y.Z/Qv2ray-vX.Y.Z.AppImage&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/2dust/v2rayN/releases&quot;&gt;https://github.com/2dust/v2rayN/releases&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/v2rayA/v2rayA/releases&quot;&gt;https://github.com/v2rayA/v2rayA/releases&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;тунеллирование через sing-box&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://sing-box.sagernet.org/installation/package-manager/&quot;&gt;https://sing-box.sagernet.org/installation/package-manager/&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
sudo mkdir -p /etc/apt/keyrings &amp;&amp;
   sudo curl -fsSL https://sing-box.app/gpg.key -o /etc/apt/keyrings/sagernet.asc &amp;&amp;
   sudo chmod a+r /etc/apt/keyrings/sagernet.asc &amp;&amp;
   echo &apos;
Types: deb
URIs: https://deb.sagernet.org/
Suites: *
Components: *
Enabled: yes
Signed-By: /etc/apt/keyrings/sagernet.asc
&apos; | sudo tee /etc/apt/sources.list.d/sagernet.sources &amp;&amp;
   sudo apt-get update &amp;&amp;
   sudo apt-get install sing-box
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;vi /etc/systemd/system/sing-box.service&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
# /etc/systemd/system/sing-box.service
[Unit]
Description=sing-box service
After=network.target nss-lookup.target NetworkManager.service

[Service]
Type=simple
User=root
WorkingDirectory=/etc/sing-box
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW
ExecStart=/usr/bin/sing-box run -c /etc/sing-box/config.json
Restart=on-failure
RestartSec=10
LimitNOFILE=infinity

[Install]
WantedBy=multi-user.target
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;или Editing /etc/systemd/system/sing-box.service.d/override.conf&lt;br /&gt;sudo systemctl edit sing-box&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
[Service]
User=root
Group=root
ExecStart=
ExecStart=/usr/bin/sing-box -D /var/lib/sing-box -c /etc/sing-box/config.json run
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;глянуть запущенные сервисы&lt;br /&gt;systemctl list-units --type=service --state=running&lt;br /&gt;&lt;br /&gt;sudo systemctl cat sing-box&lt;br /&gt;sudo systemctl daemon-reload&lt;br /&gt;sudo systemctl enable --now sing-box&lt;br /&gt;&lt;br /&gt;минимальный конфиг в /etc/resolv.conf должно быть nameserver 8.8.8.8&lt;br /&gt;vi /etc/sing-box/config.json &lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;log&quot;: {
    &quot;level&quot;: &quot;info&quot;
  },
  &quot;inbounds&quot;: [
    {
      &quot;type&quot;: &quot;tun&quot;,
      &quot;address&quot;: [
        &quot;172.19.0.1/30&quot;
      ],
      &quot;auto_route&quot;: true,
      &quot;strict_route&quot;: false,
      &quot;stack&quot;: &quot;gvisor&quot;
    }
  ],
  &quot;outbounds&quot;: [
    {
      &quot;type&quot;: &quot;socks&quot;,
      &quot;tag&quot;: &quot;proxy&quot;,
      &quot;server&quot;: &quot;127.0.0.1&quot;,
      &quot;server_port&quot;: 1080
    },
    {
      &quot;type&quot;: &quot;direct&quot;,
      &quot;tag&quot;: &quot;direct&quot;
    }
  ],
  &quot;route&quot;: {
    &quot;auto_detect_interface&quot;: true,
    &quot;rules&quot;: [
      {
        &quot;user&quot;: [
          &quot;nobody&quot;
        ],
        &quot;outbound&quot;: &quot;direct&quot;
      },
      {
        &quot;ip_cidr&quot;: [
          &quot;8.8.8.8/32&quot;
        ],
        &quot;outbound&quot;: &quot;direct&quot;
      },
      {
        &quot;ip_version&quot;: 6,
        &quot;action&quot;: &quot;reject&quot;
      }
    ]
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;конфиг с тунеллированием всего, кроме зоны ru и прочих российских доменов&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;log&quot;: {
    &quot;level&quot;: &quot;info&quot;
  },
  &quot;dns&quot;: {
    &quot;servers&quot;: [
      {
        &quot;type&quot;: &quot;udp&quot;,
        &quot;tag&quot;: &quot;dns-direct&quot;,
        &quot;server&quot;: &quot;8.8.8.8&quot;
      }
    ]
  },
  &quot;inbounds&quot;: [
    {
      &quot;type&quot;: &quot;tun&quot;,
      &quot;tag&quot;: &quot;tun-in&quot;,
      &quot;address&quot;: [
        &quot;172.19.0.1/30&quot;
      ],
      &quot;auto_route&quot;: true,
      &quot;strict_route&quot;: false,
      &quot;stack&quot;: &quot;system&quot;
    }
  ],
  &quot;outbounds&quot;: [
    {
      &quot;type&quot;: &quot;socks&quot;,
      &quot;tag&quot;: &quot;proxy&quot;,
      &quot;server&quot;: &quot;127.0.0.1&quot;,
      &quot;server_port&quot;: 1080
    },
    {
      &quot;type&quot;: &quot;direct&quot;,
      &quot;tag&quot;: &quot;direct&quot;
    }
  ],
  &quot;route&quot;: {
    &quot;auto_detect_interface&quot;: true,
    &quot;rules&quot;: [
      {
        &quot;user&quot;: [
          &quot;nobody&quot;
        ],
        &quot;outbound&quot;: &quot;direct&quot;
      },
      {
        &quot;inbound&quot;: &quot;tun-in&quot;,
        &quot;action&quot;: &quot;sniff&quot;
      },
      {
        &quot;protocol&quot;: &quot;dns&quot;,
        &quot;action&quot;: &quot;route&quot;,
        &quot;outbound&quot;: &quot;direct&quot;
      },
      {
        &quot;port&quot;: 53,
        &quot;action&quot;: &quot;hijack-dns&quot;
      },
      {
        &quot;domain_suffix&quot;: [
          &quot;ru&quot;,
          &quot;su&quot;,
          &quot;rf&quot;,
          &quot;xn--p1ai&quot;,
          &quot;by&quot;,
          &quot;kz&quot;,
          &quot;local&quot;,
          &quot;home&quot;,
          &quot;lan&quot;
        ],
        &quot;domain&quot;: [
          &quot;yadro.com&quot;,
          &quot;protei.me&quot;,
          &quot;protei.com&quot;,
          &quot;rkn.gov.ru&quot;,
          &quot;rsoc.ru&quot;,
          &quot;grfc.ru&quot;,
          &quot;mvd.ru&quot;,
          &quot;fsb.ru&quot;,
          &quot;gov.ru&quot;,
          &quot;gosuslugi.ru&quot;,
          &quot;esia.gosuslugi.ru&quot;,
          &quot;crpt.ru&quot;,
          &quot;честныйзнак.рф&quot;,
          &quot;xn--80ajghhoc2aj1c8b.xn--p1ai&quot;,
          &quot;fias.nalog.ru&quot;,
          &quot;egais.ru&quot;,
          &quot;sberbank.ru&quot;,
          &quot;tbank.ru&quot;,
          &quot;vtb.ru&quot;,
          &quot;qiwi.com&quot;,
          &quot;vk.com&quot;,
          &quot;avito.ru&quot;,
          &quot;ozon.ru&quot;,
          &quot;wildberries.ru&quot;,
          &quot;okko.tv&quot;,
          &quot;kinopoisk.ru&quot;,
          &quot;gosuslugi.com&quot;,
          &quot;esia-gosuslugi.org&quot;,
          &quot;gosuslugi-dev.com&quot;,
          &quot;code-inside.com&quot;,
          &quot;isg-neuro.com&quot;,
          &quot;ntechlab.com&quot;
        ],
        &quot;domain_keyword&quot;: [
          &quot;yandex&quot;,
          &quot;vkontakte&quot;
        ],
        &quot;ip_cidr&quot;: [
          &quot;127.0.0.0/8&quot;,
          &quot;10.0.0.0/8&quot;,
          &quot;172.16.0.0/12&quot;,
          &quot;192.168.0.0/16&quot;
        ],
        &quot;outbound&quot;: &quot;direct&quot;
      },
      {
        &quot;ip_version&quot;: 6,
        &quot;action&quot;: &quot;reject&quot;
      }
    ]
  }
}

&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;конфиг с тунеллированием всего, кроме зоны ru и прочих российских доменов и systemd-resolved&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;log&quot;: {
    &quot;level&quot;: &quot;info&quot;
  },
  &quot;dns&quot;: {
    &quot;servers&quot;: [
      {
        &quot;type&quot;: &quot;udp&quot;,
        &quot;tag&quot;: &quot;dns-direct&quot;,
        &quot;server&quot;: &quot;8.8.8.8&quot;
      }
    ],
    &quot;rules&quot;: [
      {
        &quot;action&quot;: &quot;route&quot;,
        &quot;server&quot;: &quot;dns-direct&quot;
      }
    ],
    &quot;final&quot;: &quot;dns-direct&quot;,
    &quot;strategy&quot;: &quot;ipv4_only&quot;
  },
  &quot;inbounds&quot;: [
    {
      &quot;type&quot;: &quot;tun&quot;,
      &quot;tag&quot;: &quot;tun-in&quot;,
      &quot;address&quot;: [
        &quot;172.19.0.1/30&quot;
      ],
      &quot;auto_route&quot;: true,
      &quot;strict_route&quot;: false,
      &quot;stack&quot;: &quot;mixed&quot;
    }
  ],
  &quot;outbounds&quot;: [
    {
      &quot;type&quot;: &quot;socks&quot;,
      &quot;tag&quot;: &quot;proxy&quot;,
      &quot;server&quot;: &quot;127.0.0.1&quot;,
      &quot;server_port&quot;: 1080
    },
    {
      &quot;type&quot;: &quot;direct&quot;,
      &quot;tag&quot;: &quot;direct&quot;,
      &quot;domain_resolver&quot;: &quot;dns-direct&quot;
    }
  ],
  &quot;route&quot;: {
    &quot;auto_detect_interface&quot;: true,
    &quot;rules&quot;: [
      {
        &quot;port&quot;: 53,
        &quot;action&quot;: &quot;hijack-dns&quot;
      },
      {
        &quot;user&quot;: [
          &quot;systemd-resolve&quot;,
          &quot;systemd-network&quot;,
          &quot;sing-box&quot;,
          &quot;nobody&quot;
        ],
        &quot;outbound&quot;: &quot;direct&quot;
      },
      {
        &quot;port&quot;: 1080,
        &quot;outbound&quot;: &quot;direct&quot;
      },
      {
        &quot;inbound&quot;: &quot;tun-in&quot;,
        &quot;action&quot;: &quot;sniff&quot;
      },
      {
        &quot;domain_suffix&quot;: [
          &quot;ru&quot;, &quot;su&quot;, &quot;rf&quot;, &quot;xn--p1ai&quot;, &quot;by&quot;, &quot;kz&quot;, &quot;local&quot;, &quot;home&quot;, &quot;lan&quot;
        ],
        &quot;domain&quot;: [
          &quot;yadro.com&quot;, &quot;protei.me&quot;, &quot;protei.com&quot;, &quot;rkn.gov.ru&quot;, &quot;rsoc.ru&quot;, 
          &quot;grfc.ru&quot;, &quot;mvd.ru&quot;, &quot;fsb.ru&quot;, &quot;gov.ru&quot;, &quot;gosuslugi.ru&quot;, 
          &quot;esia.gosuslugi.ru&quot;, &quot;crpt.ru&quot;, &quot;честныйзнак.рф&quot;, 
          &quot;xn--80ajghhoc2aj1c8b.xn--p1ai&quot;, &quot;fias.nalog.ru&quot;, &quot;egais.ru&quot;, 
          &quot;sberbank.ru&quot;, &quot;tbank.ru&quot;, &quot;vtb.ru&quot;, &quot;qiwi.com&quot;, &quot;vk.com&quot;, 
          &quot;avito.ru&quot;, &quot;ozon.ru&quot;, &quot;wildberries.ru&quot;, &quot;okko.tv&quot;, 
          &quot;kinopoisk.ru&quot;, &quot;gosuslugi.com&quot;, &quot;esia-gosuslugi.org&quot;, 
          &quot;gosuslugi-dev.com&quot;, &quot;code-inside.com&quot;, &quot;isg-neuro.com&quot;, 
          &quot;ntechlab.com&quot;
        ],
        &quot;domain_keyword&quot;: [
          &quot;yandex&quot;, &quot;vkontakte&quot;
        ],
        &quot;ip_cidr&quot;: [
          &quot;127.0.0.0/8&quot;, &quot;10.0.0.0/8&quot;, &quot;172.16.0.0/12&quot;, &quot;192.168.0.0/16&quot;
        ],
        &quot;outbound&quot;: &quot;direct&quot;
      },
      {
        &quot;auth_user&quot;: [],
        &quot;outbound&quot;: &quot;proxy&quot;
      },
      {
        &quot;ip_version&quot;: 6,
        &quot;action&quot;: &quot;reject&quot;
      }
    ]
  }
}

&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;sudo ufw allow from 172.19.0.0/30&lt;br /&gt;&lt;br /&gt;sudo systemctl restart systemd-resolved&lt;br /&gt;sudo systemctl restart sing-box&lt;br /&gt;&lt;br /&gt;проверка корректности конфигурации&lt;br /&gt;/usr/bin/sing-box check -c /etc/sing-box/config.json&lt;br /&gt;sudo systemctl status sing-box&lt;br /&gt;sudo journalctl -u sing-box -n 20 --no-pager&lt;br /&gt;&lt;br /&gt;проверка работы&lt;br /&gt;curl icanhazip.com # ip прокси&lt;br /&gt;curl 2ip.ru        # ip адрес без прокси&lt;br /&gt;&lt;br /&gt;в одной консоли&lt;br /&gt;sudo tcpdump -i eth0 -A -n &quot;tcp port 443&quot; | grep -Ei &quot;yandex|google&quot;&lt;br /&gt;в другой&lt;br /&gt;sudo tcpdump -i tun0 -A -n &quot;tcp port 443&quot; | grep -Ei &quot;yandex|google&quot;&lt;br /&gt;в третьей&lt;br /&gt;curl &lt;a href=&quot;https://google.com&quot;&gt;https://google.com&lt;/a&gt;&lt;br /&gt;затем&lt;br /&gt;curl &lt;a href=&quot;https://yandex.ru&quot;&gt;https://yandex.ru&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;доступ к ipv6&lt;/summary&gt;&lt;br /&gt;если отсутствует блокировка Протокола 41 (IPv6-in-IPv4) &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://ru.wikipedia.org/wiki/Список_брокеров_IPv6&quot;&gt;https://ru.wikipedia.org/wiki/Список_брокеров_IPv6&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://wiki.archlinux.org/title/IPv6_tunnel_broker_setup&quot;&gt;https://wiki.archlinux.org/title/IPv6_tunnel_broker_setup&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://test-ipv6.com&quot;&gt;https://test-ipv6.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;на сервере&lt;/summary&gt;&lt;br /&gt;sudo ufw status numbered&lt;br /&gt;sudo ufw delete №_правила&lt;br /&gt;&lt;br /&gt;sudo ufw allow out 2408/udp &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/vernette/warpscout/releases/&quot;&gt;https://github.com/vernette/warpscout/releases/&lt;/a&gt;&lt;br /&gt;./warpscout register&lt;br /&gt;./warpscout find-junk&lt;br /&gt;./warpscout scan -o awg.conf&lt;br /&gt;&lt;br /&gt;cat warpscout-account.json&lt;br /&gt;&lt;br /&gt;&quot;private_key&quot;: &quot;...&quot; — ваш приватный ключ для секции [Interface].&lt;br /&gt;&quot;ipv6&quot;: &quot;...&quot; — ваш выделенный IPv6-адрес (обычно начинается на 2606:4700:...).&lt;br /&gt;&quot;ipv4&quot;: &quot;...&quot; — внутренний IPv4-адрес Cloudflare (обычно 172.16.0.2 или похожий)&lt;br /&gt;&lt;br /&gt;PrivateKey =  то что в &quot;private_key&quot; warpscout-account.json &lt;br /&gt;PublicKey = то что в &quot;peer_public_key&quot; warpscout-account.json &lt;br /&gt;&lt;br /&gt;sudo apt install wireguard resolvconf -y&lt;br /&gt;&lt;br /&gt;sudo vim /etc/wireguard/wg0.conf&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
[Interface]
PrivateKey = ВАШ_ПРИВАТНЫЙ_КЛЮЧ_ИЗ_JSON
# Указываем ТОЛЬКО IPv6 адрес
Address = ВАШ_IPv6_АДРЕС_ИЗ_JSON/128
DNS = 2606:4700:4700::1111

[Peer]
PublicKey = ВАШ_ПУБЛИЧНЫЙ_КЛЮЧ_ИЗ_JSON
# Строго только два двоеточия и слэш ноль. Это разрешает только IPv6
AllowedIPs = ::/0
# Адрес эндпоинта Cloudflare (можно использовать IPv4 или IPv6)
Endpoint = 162.159.192.1:2408
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;wg genkey |tee /etc/wireguard/privatekey | wg pubkey |tee /etc/wireguard/publickey&lt;br /&gt;chmod 600 privatekey&lt;br /&gt;&lt;br /&gt;sudo wg-quick down wg0&lt;br /&gt;sudo wg-quick up wg0&lt;br /&gt;&lt;br /&gt;ping6 -c 3 google.com&lt;br /&gt;&lt;br /&gt;systemctl enable wg-quick@wg0.service&lt;br /&gt;systemctl start wg-quick@wg0.service&lt;br /&gt;systemctl status wg-quick@wg0.service&lt;br /&gt;&lt;br /&gt;systemctl list-units --type service --state running&lt;br /&gt;systemctl list-units --type service --state failed&lt;br /&gt;&lt;br /&gt;В Linux за выбор между IPv4 и IPv6 при обращении к сайтам (например, ya.ru) отвечает системный файл /etc/gai.conf (Get Address Info).&lt;br /&gt;По умолчанию в современных ОС приоритет всегда отдается IPv6. Если домен имеет оба адреса, ping автоматически превращается в ping6.&lt;br /&gt;&lt;br /&gt;sudo vim /etc/gai.conf&lt;br /&gt;добавить&lt;br /&gt;precedence  ::ffff:0:0/96   100&lt;br /&gt;precedence  ::/0             10&lt;br /&gt;precedence  ::1/128          50&lt;br /&gt;&lt;br /&gt;::ffff:0:0/96 (приоритет 100): Это IPv4-адреса. Теперь у них наивысший приоритет. Если у сайта есть IPv4, сервер всегда выберет его в первую очередь.&lt;br /&gt;::1/128 (приоритет 50): Это локальная петля (localhost) для IPv6. Она осталась в приоритете для внутренней работы приложений сервера.&lt;br /&gt;::/0 (приоритет 10): Это весь остальной глобальный IPv6-интернет (включая ваш интерфейс wg0). Мы опустили его приоритет на самый низ.&lt;br /&gt;&lt;br /&gt;sudo vim /usr/local/etc/xray/config.json&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;log&quot;: {
    &quot;loglevel&quot;: &quot;warning&quot;
  },
  &quot;inbounds&quot;: [
    {
      &quot;listen&quot;: &quot;0.0.0.0&quot;,
      &quot;port&quot;: 443,
      &quot;protocol&quot;: &quot;vless&quot;,
      &quot;settings&quot;: {
        &quot;clients&quot;: [
          {
            &quot;id&quot;: &quot;ВАШ-UUID&quot;
          }
        ],
        &quot;decryption&quot;: &quot;none&quot;
      },
      &quot;streamSettings&quot;: {
        &quot;network&quot;: &quot;grpc&quot;,
        &quot;security&quot;: &quot;reality&quot;,
        &quot;grpcSettings&quot;: {
          &quot;serviceName&quot;: &quot;grpc-video-speed&quot;
        },
        &quot;realitySettings&quot;: {
          &quot;show&quot;: false,
          &quot;dest&quot;: &quot;САЙТ_ДЛЯ_МАСКИРОВКИ.com:443&quot;,
          &quot;xver&quot;: 0,
          &quot;serverNames&quot;: [
            &quot;САЙТ_ДЛЯ_МАСКИРОВКИ.com&quot;
          ],
          &quot;privateKey&quot;: &quot;ВАШ-PRIVATE-KEY&quot;,
          &quot;shortIds&quot;: [
            &quot;SHORT_ID_1&quot;,
            &quot;SHORT_ID_2&quot;,
            &quot;SHORT_ID_3&quot;
          ]
        }
      }
    }
  ],
  &quot;outbounds&quot;: [
    {
      &quot;protocol&quot;: &quot;freedom&quot;,
      &quot;settings&quot;: {
//        &quot;domainStrategy&quot;: &quot;UseIPv6&quot;
        &quot;domainStrategy&quot;: &quot;UseIP&quot;
      },
      &quot;tag&quot;: &quot;direct&quot;
    }
  ],
  &quot;routing&quot;: {
    &quot;domainStrategy&quot;: &quot;AsIs&quot;
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;sudo xray run -c /путь/к/вашему/локальному_конфигу.json&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;на клиенте&lt;/summary&gt;&lt;br /&gt;sudo vim /usr/local/etc/xray/config.json&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;log&quot;: {
    &quot;loglevel&quot;: &quot;info&quot;
  },
  &quot;inbounds&quot;: [
    {
      &quot;port&quot;: 1080,
      &quot;listen&quot;: &quot;127.0.0.1&quot;,
      &quot;protocol&quot;: &quot;socks&quot;,
      &quot;settings&quot;: {
        &quot;auth&quot;: &quot;noauth&quot;,
        &quot;udp&quot;: true
      },
      &quot;sniffing&quot;: {
        &quot;enabled&quot;: true,
        &quot;destOverride&quot;: [&quot;http&quot;, &quot;tls&quot;]
      }
    }
  ],
  &quot;outbounds&quot;: [
    {
      &quot;protocol&quot;: &quot;vless&quot;,
      &quot;tag&quot;: &quot;proxy&quot;,
      &quot;settings&quot;: {
        &quot;vnext&quot;: [
          {
            &quot;address&quot;: &quot;IP_ВАШЕГО_СЕРВЕРА&quot;, 
            &quot;port&quot;: 443, 
            &quot;users&quot;: [
              {
                &quot;id&quot;: &quot;ВАШ-UUID&quot;, 
                &quot;encryption&quot;: &quot;none&quot;
                /* Строка &quot;flow&quot;: &quot;xtls-rprx-vision&quot; УДАЛЕНА, комментарии как в Cи */
              }
            ]
          }
        ]
      },
      &quot;streamSettings&quot;: {
        &quot;network&quot;: &quot;grpc&quot;,
        &quot;security&quot;: &quot;reality&quot;,
        &quot;grpcSettings&quot;: {
          &quot;serviceName&quot;: &quot;grpc-video-speed&quot;
        },
        &quot;realitySettings&quot;: {
          &quot;serverName&quot;: &quot;САЙТ_ДЛЯ_МАСКИРОВКИ&quot;,
          &quot;publicKey&quot;: &quot;ВАШ_PUBLIC_KEY&quot;,
          &quot;fingerprint&quot;: &quot;chrome&quot;,
          &quot;shortId&quot;: &quot;ВАШ_SHORT_ID&quot; 
        }
      }
    },
    {
      &quot;protocol&quot;: &quot;freedom&quot;,
      &quot;tag&quot;: &quot;direct&quot;
    }
  ],
  &quot;dns&quot;: {
    &quot;tag&quot;: &quot;dns-in&quot;,
//    &quot;queryStrategy&quot;: &quot;UseIPv4&quot;,
    &quot;queryStrategy&quot;: &quot;UseIP&quot;,
    &quot;servers&quot;: [
      &quot;8.8.8.8&quot;,
      &quot;1.1.1.1&quot;,
      &quot;localhost&quot;
    ]
  },
  &quot;routing&quot;: {
    &quot;domainStrategy&quot;: &quot;IPOnDemand&quot;,
    &quot;rules&quot;: [
      {
        &quot;type&quot;: &quot;field&quot;,
        &quot;port&quot;: 53,
        &quot;network&quot;: &quot;udp&quot;,
        &quot;outboundTag&quot;: &quot;proxy&quot; 
      },
      {
        &quot;type&quot;: &quot;field&quot;,
        &quot;ip&quot;: [&quot;geoip:private&quot;, &quot;geoip:ru&quot;], 
        &quot;outboundTag&quot;: &quot;direct&quot;
      },
      {
        &quot;type&quot;: &quot;field&quot;,
        &quot;network&quot;: &quot;tcp,udp&quot;,
        &quot;outboundTag&quot;: &quot;proxy&quot;
      }
    ]
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;sudo xray run -c /путь/к/вашему/локальному_конфигу.json&lt;br /&gt;&lt;br /&gt;systemctl restart xray&lt;br /&gt;systemctl enable xray&lt;br /&gt;systemctl status xray&lt;br /&gt;systemctl cat xray&lt;br /&gt;Если всё зелёное — сервер готов.&lt;br /&gt;&lt;br /&gt;запущенные&lt;br /&gt;systemctl list-units --state=running&lt;br /&gt;systemctl list-units --type=service --state=running&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;curl -x socks5h://127.0.0.1:1080 &lt;a href=&quot;https://icanhazip.com&quot;&gt;https://icanhazip.com&lt;/a&gt;&lt;br /&gt;proxychains curl &lt;a href=&quot;https://icanhazip.com&quot;&gt;https://icanhazip.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;proxychains curl -sL &lt;a href=&quot;https://ntc.party/&quot;&gt;https://ntc.party/&lt;/a&gt; | lynx -stdin&lt;br /&gt;proxychains curl -sL &lt;a href=&quot;https://ntc.party/&quot;&gt;https://ntc.party/&lt;/a&gt; | lynx -stdin -dump&lt;br /&gt;proxychains curl -sL &lt;a href=&quot;https://ntc.party/&quot;&gt;https://ntc.party/&lt;/a&gt; | w3m -T text/html&lt;br /&gt;&lt;br /&gt;sudo vim /etc/sing-box/config.json&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;log&quot;: {
    &quot;loglevel&quot;: &quot;info&quot;
  },
  &quot;inbounds&quot;: [
    {
      &quot;port&quot;: 1080,
      &quot;listen&quot;: &quot;127.0.0.1&quot;,
      &quot;protocol&quot;: &quot;socks&quot;,
      &quot;settings&quot;: {
        &quot;auth&quot;: &quot;noauth&quot;,
        &quot;udp&quot;: true
      },
      &quot;sniffing&quot;: {
        &quot;enabled&quot;: true,
        &quot;destOverride&quot;: [&quot;http&quot;, &quot;tls&quot;]
      }
    }
  ],
  &quot;outbounds&quot;: [
    {
      &quot;protocol&quot;: &quot;vless&quot;,
      &quot;tag&quot;: &quot;proxy&quot;,
      &quot;settings&quot;: {
        &quot;vnext&quot;: [
          {
            &quot;address&quot;: &quot;85.28.47.223&quot;, 
            &quot;port&quot;: 443, 
            &quot;users&quot;: [
              {
                &quot;id&quot;: &quot;4ccd01b7-40ef-4f92-bfaf-33dea77db0e7&quot;, 
                &quot;encryption&quot;: &quot;none&quot;
                /* Строка &quot;flow&quot;: &quot;xtls-rprx-vision&quot; УДАЛЕНА, комментарии как в Cи */
              }
            ]
          }
        ]
      },
      &quot;streamSettings&quot;: {
        &quot;network&quot;: &quot;grpc&quot;,
        &quot;security&quot;: &quot;reality&quot;,
        &quot;grpcSettings&quot;: {
          &quot;serviceName&quot;: &quot;grpc-video-speed&quot;
        },
        &quot;realitySettings&quot;: {
          &quot;serverName&quot;: &quot;reddit.com&quot;,
          &quot;publicKey&quot;: &quot;1SyU72LkfLgTB8XP4HkoolAbmAGXPZd8nQFXnjvjjSk&quot;,
          &quot;fingerprint&quot;: &quot;chrome&quot;,
          &quot;shortId&quot;: &quot;04c0a42ece230ac3&quot; 
        }
      }
    },
    {
      &quot;protocol&quot;: &quot;freedom&quot;,
      &quot;tag&quot;: &quot;direct&quot;
    }
  ],
  &quot;dns&quot;: {
    &quot;tag&quot;: &quot;dns-in&quot;,
//    &quot;queryStrategy&quot;: &quot;UseIPv4&quot;,
    &quot;queryStrategy&quot;: &quot;UseIP&quot;,
    &quot;servers&quot;: [
      &quot;8.8.8.8&quot;,
      &quot;1.1.1.1&quot;,
      &quot;localhost&quot;
    ]
  },
  &quot;routing&quot;: {
    &quot;domainStrategy&quot;: &quot;IPOnDemand&quot;,
    &quot;rules&quot;: [
      {
        &quot;type&quot;: &quot;field&quot;,
        &quot;port&quot;: 53,
        &quot;network&quot;: &quot;udp&quot;,
        &quot;outboundTag&quot;: &quot;proxy&quot; 
      },
      {
        &quot;type&quot;: &quot;field&quot;,
        &quot;ip&quot;: [&quot;geoip:private&quot;, &quot;geoip:ru&quot;], 
        &quot;outboundTag&quot;: &quot;direct&quot;
      },
      {
        &quot;type&quot;: &quot;field&quot;,
        &quot;network&quot;: &quot;tcp,udp&quot;,
        &quot;outboundTag&quot;: &quot;proxy&quot;
      }
    ]
  }
}

&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Адрес fdfe:dcba:9876::1/126 — это частный локальный IPv6-адрес (из диапазона Unique Local Address — ULA) ✍️. &lt;br /&gt;В мире IPv6 он выполняет точно такую же роль, как адрес 192.168.1.1 или 10.0.0.1 в старых сетях IPv4.&lt;br /&gt;&lt;br /&gt;/usr/bin/sing-box check -c /etc/sing-box/config.json&lt;br /&gt;sudo systemctl restart sing-box&lt;br /&gt;sudo systemctl status sing-box&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;curl icanhazip.com # ip прокси&lt;br /&gt;curl 2ip.ru        # ip адрес без прокси&lt;br /&gt;ping6 google.com&lt;br /&gt;ping6 ya.ru&lt;br /&gt;lynx &lt;a href=&quot;https://ntc.party&quot;&gt;https://ntc.party&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Подключение в Android через v2rayNG&lt;/summary&gt;&lt;br /&gt;Устанавливаем v2rayNG из GitHub.&lt;br /&gt;&lt;a href=&quot;https://github.com/2dust/v2rayNG/releases&quot;&gt;https://github.com/2dust/v2rayNG/releases&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;qr код&lt;br /&gt;qrencode -t ansiutf8 &quot;vless://ВАШ-UUID@IP_ВАШЕГО_СЕРВЕРА:443?mode=gun&amp;security=reality&amp;encryption=none&amp;pbk=ВАШ_PUBLIC_KEY&amp;fp=chrome&amp;type=grpc&amp;serviceName=grpc-video-speed&amp;sni=САЙТ_ДЛЯ_МАСКИРОВКИ&amp;sid=SHORT_ID#Название_Сервера&quot;&lt;br /&gt;&lt;br /&gt;нужно заменить:&lt;br /&gt;ВАШ-UUID&lt;br /&gt;IP_ВАШЕГО_СЕРВЕРА&lt;br /&gt;ВАШ_PUBLIC_KEY&lt;br /&gt;SHORT_ID&lt;br /&gt;САЙТ_ДЛЯ_МАСКИРОВКИ&lt;br /&gt;&lt;br /&gt;и отредактировать полученный конфиг в приложении, в частности добавить в SpiderX значение /&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;ошибки подключения&lt;/summary&gt;&lt;br /&gt;Проверка логов Xray&lt;br /&gt;На сервере:&lt;br /&gt;journalctl -u xray -f&lt;br /&gt;&lt;br /&gt;Попробуй подключиться и смотри:&lt;br /&gt;Если логов НЕТ&lt;br /&gt;→ трафик до сервера не доходит (блокировка или порт закрыт)&lt;br /&gt;&lt;br /&gt;Если есть ошибка типа:&lt;br /&gt;invalid short id&lt;br /&gt;invalid user&lt;br /&gt;→ ошибка конфигурации.&lt;br /&gt;&lt;br /&gt;Типичные признаки ошибки конфигурации&lt;br /&gt;PublicKey неправильный&lt;br /&gt;shortId не совпадает&lt;br /&gt;SNI ≠ serverNames&lt;br /&gt;dest ≠ serverNames&lt;br /&gt;включён midsa65Verify&lt;br /&gt;&lt;/details&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;ссылки&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/XTLS&quot;&gt;https://github.com/XTLS&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/2dust/v2rayNG&quot;&gt;https://github.com/2dust/v2rayNG&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://finevpn.org/ru/what-is-xray-in-vpn/&quot;&gt;https://finevpn.org/ru/what-is-xray-in-vpn/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/855754/&quot;&gt;Используем Xray как VPN&lt;/a&gt;&lt;br /&gt;Собственный VPN Vless Reality на X-Ray Core. Установка ядра X-Ray Core&lt;br /&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=PHn5JE9rXgg&quot;&gt;https://www.youtube.com/watch?v=PHn5JE9rXgg&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=5877592&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/5877592.html</comments>
  <category>ipv6</category>
  <category>vpn</category>
  <category>proxy</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/5877503.html</guid>
  <pubDate>Fri, 30 Jan 2026 21:47:15 GMT</pubDate>
  <title>Добавляем поддержку звука в бытовой NAS (сетевое хранилище)</title>
  <link>https://uzverss.dreamwidth.org/5877503.html</link>
  <description>&lt;br&gt;&lt;details&gt;&lt;summary&gt;&lt;b&gt;развернуть&lt;/b&gt;&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://agran.livejournal.com/182872.html&quot;&gt;https://agran.livejournal.com/182872.html&lt;/a&gt;&lt;br /&gt;исходники прошивки:&lt;br /&gt;&lt;a href=&quot;http://support.wd.com/product/download.asp?groupid=904&amp;sid=211&amp;lang=ru&quot;&gt;http://support.wd.com/product/download.asp?groupid=904&amp;sid=211&amp;lang=ru&lt;/a&gt;&lt;br /&gt;в прошивке есть файл \packages\kernel_3.2.26.28\wd\README&lt;br /&gt;И там описано как откомпилировать ядро и модули.&lt;br /&gt;&lt;br /&gt;ссылка на компилятор: &lt;a href=&quot;https://launchpadlibrarian.net/129960680/gcc-linaro-arm-linux-gnueabihf-4.7-2013.01-20130125_linux.tar.bz2&quot;&gt;https://launchpadlibrarian.net/129960680/gcc-linaro-arm-linux-gnueabihf-4.7-2013.01-20130125_linux.tar.bz2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;сделано для Ubuntu 12.04 x86. В 64 битной версии может потребоваться установка 32 битных модулей:&lt;br /&gt;apt-get install ia32-libs&lt;br /&gt;&lt;br /&gt;архив с уже откомпилированными необходимыми модулями ядра: &lt;a href=&quot;http://yadi.sk/d/3Ug6EBWuH3dZL&quot;&gt;http://yadi.sk/d/3Ug6EBWuH3dZL&lt;/a&gt;&lt;br /&gt;Эти модули откомпилированы из исходников 156 прошивки, они будут работать и с более поздними прошивками (проверил на 165 прошивке - работает).&lt;br /&gt;Необходимо положить папку sound в /lib/modules/3.2.26/kernel на нашем NAS.&lt;br /&gt;&lt;br /&gt;Дописать в файл /lib/modules/3.2.26/modules.dep следующие строки:&lt;br /&gt;kernel/sound/soundcore.ko:&lt;br /&gt;kernel/sound/usb/snd-usb-audio.ko:&lt;br /&gt;kernel/sound/usb/snd-usbmidi-lib.ko:&lt;br /&gt;kernel/sound/core/snd.ko:&lt;br /&gt;kernel/sound/core/snd-hwdep.ko:&lt;br /&gt;kernel/sound/core/snd-page-alloc.ko:&lt;br /&gt;kernel/sound/core/snd-pcm.ko:&lt;br /&gt;kernel/sound/core/snd-rawmidi.ko:&lt;br /&gt;kernel/sound/core/snd-timer.ko:&lt;br /&gt;kernel/sound/core/seq/snd-seq.ko:&lt;br /&gt;kernel/sound/core/seq/snd-seq-device.ko:&lt;br /&gt;kernel/sound/core/seq/snd-seq-midi.ko:&lt;br /&gt;kernel/sound/core/seq/snd-seq-midi-event.ko:&lt;br /&gt;&lt;br /&gt;После чего выполнить команду:&lt;br /&gt;depmod -a&lt;br /&gt;&lt;br /&gt;Потом:&lt;br /&gt;modprobe snd-usb-audio&lt;br /&gt;&lt;br /&gt;Что бы звуковые модули автоматически загружались при старте NAS, в файле /etc/modules&lt;br /&gt;дописываем:&lt;br /&gt;snd-usb-audio&lt;br /&gt;&lt;br /&gt;Теперь установим пакет отвечающий за работу со звуком.&lt;br /&gt;apt-get update&lt;br /&gt;apt-get install alsa&lt;br /&gt;&lt;br /&gt;Подключаем свою usb-аудиокарту (у меня SB play!) и вводим&lt;br /&gt;cat /proc/asound/cards&lt;br /&gt;должна появится ваша аудиокарта.&lt;br /&gt;&lt;br /&gt;Положим name.wav файл в папку Public.&lt;br /&gt;&lt;br /&gt;И выполним команду:&lt;br /&gt;aplay /shares/Public/name.wav&lt;br /&gt;&lt;br /&gt;Если из динамиков подключённых к usb-аудиокарте послышится наша запись значит всё готово.&lt;br /&gt;&lt;br /&gt;Если выдаст:&lt;br /&gt;ALSA lib confmisc.c:768 :(parse_card) cannot find card &apos;0&apos;&lt;br /&gt;&lt;br /&gt;то в файле /etc/modprobe.d/alsa-base.conf редактируем строку&lt;br /&gt;options snd-usb-audio index=-2&lt;br /&gt;так что бы было&lt;br /&gt;options snd-usb-audio index=0&lt;br /&gt;&lt;br /&gt;лучше изменить на index=0 в любом случае, так как иначе оно может перестать работать позже.&lt;br /&gt;Перезагружаем NAS.&lt;br /&gt;&lt;br /&gt;установка mpd: &lt;a href=&quot;http://agran.livejournal.com/181608.html&quot;&gt;http://agran.livejournal.com/181608.html&lt;/a&gt;&lt;br /&gt;И всё бы хорошо, но регулятор громкости не работал, что бы это исправить в файле /etc/mpd.conf разкоментируем строку:&lt;br /&gt;mixer_type &quot;software&quot;&lt;br /&gt;&lt;br /&gt;И перезагружаем mpd&lt;br /&gt;/etc/init.d/mpd restart&lt;br /&gt;&lt;br /&gt;Теперь звук должен регулироваться.&lt;br /&gt;&lt;br /&gt;p.s.s.&lt;br /&gt;Проигрывание mp3 320kbs отъедает 6.3% CPU и 3.5% RAM.&lt;br /&gt;Проигрывание m4a - 3% CPU и 4% RAM.&lt;br /&gt;---------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;компиляция ядра:&lt;br /&gt;&lt;a href=&quot;https://www.kernelconfig.io/&quot;&gt;https://www.kernelconfig.io/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://wiki.gentoo.org/wiki/Kernel/Configuration/ru&quot;&gt;https://wiki.gentoo.org/wiki/Kernel/Configuration/ru&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://progi.pro/chto-delaet-make-oldconfig-delat-imenno-v-make-fayle-yadra-linux-4724477&quot;&gt;https://progi.pro/chto-delaet-make-oldconfig-delat-imenno-v-make-fayle-yadra-linux-4724477&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://opensource.com/article/18/10/kbuild-and-kconfig&quot;&gt;https://opensource.com/article/18/10/kbuild-and-kconfig&lt;/a&gt;&lt;br /&gt;Поиск модулей&lt;br /&gt;Внутри menuconfig можно использовать / для поиска модулей по имени.&lt;br /&gt;Нажатие клавиши 1, в примере ниже, заставит make menuconfig перейти прямо к опции помеченной (1)&lt;br /&gt;make ARCH=x86 menuconfig&lt;br /&gt;make ARCH=mips menuconfig&lt;br /&gt;make ARCH=arm64 menuconfig&lt;br /&gt;yes &quot;&quot; | make ARCH=arm64 oldconfig&lt;br /&gt;make ARCH=arm64 defconfig&lt;br /&gt;make ARCH=arm64 olddefconfig&lt;br /&gt;make ARCH=x86 modules_install&lt;br /&gt;make defconfig сгенерируйте конфигурацию по умолчанию&lt;br /&gt;make oldconfig используется для применения вашего старого файла .config к новому ядру.&lt;br /&gt;make olddefconfig&lt;br /&gt;make alldefconfig похоже make olddefconfig, но он также принимает фрагмент конфигурации для слияния&lt;br /&gt;make silentoldconfig устарел с версии 4.19, заменён syncconfig&lt;br /&gt;make syncconfig похожа на текстовый интерфейс из make config. Для новых опций она предоставляет выбор пользователю&lt;br /&gt;Если новые опции должны быть оставлены как они рекомендуются (по умолчанию), то тогда используйте make olddefconfig&lt;br /&gt;make allnoconfig &lt;br /&gt;make allyesconfig&lt;br /&gt;make tinyconfig Сконфигурируйте минимально возможное ядро&lt;br /&gt;&lt;br /&gt;alsa pulse&lt;br /&gt;aplay -D hw:CARD=PCH,DEV=3 /usr/share/sounds/alsa/Noise.wav&lt;br /&gt;aplay -D default:CARD=Device /usr/share/sounds/alsa/Noise.wav&lt;br /&gt;sudo -u pulse parecord -d 15 -v /tmp/123.wav - проверка телефонной трубки&lt;br /&gt;sudo -u pulse paplay -d 2 -v /tmp/123.wav - вывод звука&lt;br /&gt;sudo -u pulse paplay /usr/share/sounds/alsa/Noise.wav&lt;br /&gt;sudo -u pulse pactl list sinks&lt;br /&gt;sudo -u pulse pactl list sources&lt;br /&gt;&lt;br /&gt;aplay -l&lt;br /&gt;lspci -k | grep Audio -A2&lt;br /&gt;&lt;br /&gt;ls -lah  /dev/snd&lt;br /&gt;ls -lah /sys/class/sound/card1/controlC1&lt;br /&gt;cat /proc/asound/modules&lt;br /&gt;cat /proc/asound/cards&lt;br /&gt;cat /proc/asound/devices&lt;br /&gt;&lt;br /&gt;проверка udev&lt;br /&gt;udevadm info -a /sys/class/sound/card1/controlC1&lt;br /&gt;udevadm info --query all --path /sys/class/sound/card1/controlC1&lt;br /&gt;udevadm test /sys/class/sound/card1/controlC1 2&amp;gt;&amp;1 | grep apply_to_event&lt;br /&gt;&lt;br /&gt;/dev/snd/controlC0для управления аудиомикшером,&lt;br /&gt;/dev/snd/pcmC0D0pи /dev/snd/pcmC0D1p для аудиовыхода, и&lt;br /&gt;/dev/snd/pcmC0D0c для аудиовхода.&lt;br /&gt;Также должны быть /dev/snd/seq и /dev/snd/timer для интерфейсов MIDI и таймера соответственно.&lt;br /&gt;&lt;br /&gt;ссылки по теме:&lt;br /&gt;&lt;a href=&quot;https://sabi.co.uk/Notes/linuxSoundALSA.html&quot;&gt;https://sabi.co.uk/Notes/linuxSoundALSA.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.chiark.greenend.org.uk/doc/linux-doc/html/sound/alsa-configuration.html&quot;&gt;https://www.chiark.greenend.org.uk/doc/linux-doc/html/sound/alsa-configuration.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://tldp.org/HOWTO/Module-HOWTO/x197.html&quot;&gt;https://tldp.org/HOWTO/Module-HOWTO/x197.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://unix.stackexchange.com/questions/90027/what-is-the-sequence-loading-linux-kernel-module-on-startup-how-priority-is-set&quot;&gt;https://unix.stackexchange.com/questions/90027/what-is-the-sequence-loading-linux-kernel-module-on-startup-how-priority-is-set&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.kernelconfig.io/config_snd_usb_audio?q=&amp;kernelversion=6.13.11&amp;arch=arm64&quot;&gt;https://www.kernelconfig.io/config_snd_usb_audio?q=&amp;kernelversion=6.13.11&amp;arch=arm64&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/&quot;&gt;https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.mankier.com/1/pactl&quot;&gt;https://www.mankier.com/1/pactl&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/tag/mpd/&quot;&gt;https://uzverss.livejournal.com/tag/mpd/&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=5877503&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/5877503.html</comments>
  <category>mpd</category>
  <category>audio</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/5877040.html</guid>
  <pubDate>Fri, 30 Jan 2026 21:21:22 GMT</pubDate>
  <title>программы и шрифты для ЦСЯ</title>
  <link>https://uzverss.dreamwidth.org/5877040.html</link>
  <description>&lt;br&gt;&lt;details&gt;&lt;summary&gt;Читать дальше&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;http://irmologion.ru/&quot;&gt;http://irmologion.ru/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://orthlib.ru/&quot;&gt;http://orthlib.ru/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.orthlib.info/&quot;&gt;http://www.orthlib.info/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.biblequote.org/&quot;&gt;https://www.biblequote.org/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/BibleQuote/BibleQuote&quot;&gt;https://github.com/BibleQuote/BibleQuote&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://cslav.org/links.htm&quot;&gt;http://cslav.org/links.htm&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://slavonicpro.ru/&quot;&gt;https://slavonicpro.ru/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://pechatnyj-dvor.narod.ru/&quot;&gt;https://pechatnyj-dvor.narod.ru/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://orthodoxepubsoc.org/download.htm&quot;&gt;https://orthodoxepubsoc.org/download.htm&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.ic-xc-nika.ru/soft/soft.html&quot;&gt;http://www.ic-xc-nika.ru/soft/soft.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.ponomar.net/maktabah/index.html&quot;&gt;https://www.ponomar.net/maktabah/index.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://sci.ponomar.net/ru/&quot;&gt;https://sci.ponomar.net/ru/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://sci.ponomar.net/translate/&quot;&gt;https://sci.ponomar.net/translate/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/slavonic/&quot;&gt;https://github.com/slavonic/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/slavdict/&quot;&gt;https://github.com/slavdict/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/slavdict/hip2unicode&quot;&gt;https://github.com/slavdict/hip2unicode&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/znamenica/&quot;&gt;https://github.com/znamenica/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/typiconman/&quot;&gt;https://github.com/typiconman/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/typiconman/Perl-Lingua-CU&quot;&gt;https://github.com/typiconman/Perl-Lingua-CU&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/typiconman/fonts-cu&quot;&gt;https://github.com/typiconman/fonts-cu&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://packages.altlinux.org/en/p11/srpms/perl-Lingua-CU/specfiles/&quot;&gt;https://packages.altlinux.org/en/p11/srpms/perl-Lingua-CU/specfiles/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/pgmmpk/cslavonic&quot;&gt;https://github.com/pgmmpk/cslavonic&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/zepinglee/citeproc-lua&quot;&gt;https://github.com/zepinglee/citeproc-lua&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/Integral/osd&quot;&gt;https://github.com/Integral/osd&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/jgm/pandoc&quot;&gt;https://github.com/jgm/pandoc&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://extensions.libreoffice.org/en/extensions/show/church-slavonic-dictionary&quot;&gt;https://extensions.libreoffice.org/en/extensions/show/church-slavonic-dictionary&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.ctan.org/tex-archive/language/churchslavonic&quot;&gt;https://www.ctan.org/tex-archive/language/churchslavonic&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://code.google.com/archive/p/hip-tools/downloads&quot;&gt;https://code.google.com/archive/p/hip-tools/downloads&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://lestvicaorthodox.com/load/materialy/shrifty_odinochnye/7&quot;&gt;https://lestvicaorthodox.com/load/materialy/shrifty_odinochnye/7&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://pod-o-mart.github.io/dictionaryBookmarklets/&quot;&gt;https://pod-o-mart.github.io/dictionaryBookmarklets/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/pod-o-mart/slavonicBookmarklets&quot;&gt;https://github.com/pod-o-mart/slavonicBookmarklets&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://slavonicpro.ru/download.html&quot;&gt;https://slavonicpro.ru/download.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://sancti.ru/patr/soft/font/slavonic.htm&quot;&gt;https://sancti.ru/patr/soft/font/slavonic.htm&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/MiKTeX&quot;&gt;https://github.com/MiKTeX&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://web.archive.org/web/20180217042334/https://dic.feb-web.ru/slavonic/corpus/index.htm&quot;&gt;https://web.archive.org/web/20180217042334/https://dic.feb-web.ru/slavonic/corpus/index.htm&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://scriptsource.org/cms/scripts/page.php?item_id=script_detail&amp;key=Cyrl&quot;&gt;https://scriptsource.org/cms/scripts/page.php?item_id=script_detail&amp;key=Cyrl&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/pod-o-mart/keyboardBookmarklets&quot;&gt;клавиатураБукмарклеты&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://fonts.google.com/?lang=cu_Cyrl&quot;&gt;https://fonts.google.com/?lang=cu_Cyrl&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/google/fonts&quot;&gt;https://github.com/google/fonts&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.wazu.jp/gallery/Test_CyrOCS.html&quot;&gt;Полная тестовая страница Unicode для OCS C yrillic&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.wazu.jp/gallery/Fonts_CyrOCS.html&quot;&gt;https://www.wazu.jp/gallery/Fonts_CyrOCS.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://web.archive.org/web/20130615093111/http://www.thessalonica.org.ru/ru/downloads.html#OOo&quot;&gt;https://web.archive.org/web/20130615093111/http://www.thessalonica.org.ru/ru/downloads.html#OOo&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://web.archive.org/web/20191008213210/http://thessalonica.org.ru/ru/fonts-download.html&quot;&gt;https://web.archive.org/web/20191008213210/http://thessalonica.org.ru/ru/fonts-download.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://scriptsource.org/cms/scripts/page.php?item_id=script_detail&amp;key=Cyrl&quot;&gt;https://scriptsource.org/cms/scripts/page.php?item_id=script_detail&amp;key=Cyrl&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://corpus-analysis.com/&quot;&gt;https://corpus-analysis.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://lib-fond.ru/&quot;&gt;https://lib-fond.ru/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://dyak-oko.mrezha.ru/&quot;&gt;http://dyak-oko.mrezha.ru/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.canto.ru/&quot;&gt;http://www.canto.ru/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.paradosi.eu/drevglas/&quot;&gt;https://www.paradosi.eu/drevglas/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.wertograd.chat.ru/&quot;&gt;http://www.wertograd.chat.ru/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kryloshanin.narod.ru/links.html&quot;&gt;https://kryloshanin.narod.ru/links.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://glagol-verbum.com/&quot;&gt;https://glagol-verbum.com/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://typikon.ru/&quot;&gt;http://typikon.ru/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ustavshik.ru/&quot;&gt;https://ustavshik.ru/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://pravoslavnyy.ru/&quot;&gt;https://pravoslavnyy.ru/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://vk.com/paerok&quot;&gt;https://vk.com/paerok&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://vk.com/pravoslavnye_knigi_rukopisi&quot;&gt;https://vk.com/pravoslavnye_knigi_rukopisi&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://vk.com/knigirusi&quot;&gt;https://vk.com/knigirusi&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://vk.com/slavoniclib&quot;&gt;https://vk.com/slavoniclib&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://vk.ru/liturglibrary&quot;&gt;https://vk.ru/liturglibrary&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://churchslavonic.net/index.html&quot;&gt;http://churchslavonic.net/index.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://manuscripts.ru/&quot;&gt;http://manuscripts.ru/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://manuscripts.ru/mns/portal.main?p1=32&amp;p_lid=1&quot;&gt;http://manuscripts.ru/mns/portal.main?p1=32&amp;p_lid=1&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://titus.uni-frankfurt.de/indexe.htm?/texte/texte2.htm#aksl&quot;&gt;https://titus.uni-frankfurt.de/indexe.htm?/texte/texte2.htm#aksl&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://gorazd.org/?q=ru/node/106&quot;&gt;http://gorazd.org/?q=ru/node/106&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://disk.yandex.ru/d/gh8Q_WOT3U6cvA&quot;&gt;Библиотека литургиста&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://disk.yandex.com/d/hX0_3veY9nEjGQ&quot;&gt;Конспекты, учебные пособия и лекции по литургике&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://disk.yandex.ru/d/3PhffLECcvDdq&quot;&gt;https://disk.yandex.ru/d/3PhffLECcvDdq&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://disk.yandex.ru/d/PddF-jobnoJIxw&quot;&gt;Архив №1. Сборник рукописей&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://lib.pravmir.ru/library/cat/2100&quot;&gt;Книги на церковнославянском языке&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://lestvicaorthodox.com/load/knigi/bogosluzhebnye_knigi/4&quot;&gt;Богослужебные и сопутствующие им книги&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://samstar-biblio.ucoz.ru/load/4&quot;&gt;Книжница Самарского староверия&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://archive.org/details/OldRussianOrthodoxBooks/месячник%20лицевой/page/n13/mode/2up&quot;&gt;Старопечатные православные книги&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://sokryt.ru/drevle&quot;&gt;https://sokryt.ru/drevle&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://old.mpda.ru/elib/rubric/32323.html&quot;&gt;https://old.mpda.ru/elib/rubric/32323.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://lib.ru/~moshkow/&quot;&gt;http://lib.ru/~moshkow/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.kulichki.com/moshkow/HRISTIAN/&quot;&gt;http://www.kulichki.com/moshkow/HRISTIAN/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.lib.ru/HRISTIAN/BIBLIYA/old/&quot;&gt;https://www.lib.ru/HRISTIAN/BIBLIYA/old/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.lib.ru/HRISTIAN/BIBLIYA/new/&quot;&gt;https://www.lib.ru/HRISTIAN/BIBLIYA/new/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://churchdocs.wordpress.com/category/книги/&quot;&gt;https://churchdocs.wordpress.com/category/книги/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://ekislova.ru/sla/books&quot;&gt;http://ekislova.ru/sla/books&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.bogoslovy.ru/list_cs.htm&quot;&gt;http://www.bogoslovy.ru/list_cs.htm&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://diak.ortox.ru/teksty___dlja_skachivanija&quot;&gt;http://diak.ortox.ru/teksty___dlja_skachivanija&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.orthlib.info/Typikon/T62_Contents_ogl.pdf&quot;&gt;http://www.orthlib.info/Typikon/T62_Contents_ogl.pdf&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/BibleQuote/&quot;&gt;https://github.com/BibleQuote/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.biblequote.org/&quot;&gt;https://www.biblequote.org/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://mybible.zone/ru/&quot;&gt;https://mybible.zone/ru/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://2ch.org/fl/res/689036.html&quot;&gt;https://2ch.org/fl/res/689036.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://arhivach.xyz/thread/1107326/&quot;&gt;https://arhivach.xyz/thread/1107326/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://azbyka.ru/biblia/?Mk.1&amp;utfcs&quot;&gt;https://azbyka.ru/biblia/?Mk.1&amp;utfcs&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://azbyka.ru/biblia/downloads/tsya.pdf&quot;&gt;https://azbyka.ru/biblia/downloads/tsya.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://ru.wikisource.org/wiki/Викитека:Дореформенная_орфография&quot;&gt;Викитека:Дореформенная_орфография&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://coollib.in/stat/old&quot;&gt;https://coollib.in/stat/old&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://imwerden.de/topic-90&quot;&gt;https://imwerden.de/topic-90&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://russportal.ru/index.php?id=russian_literature&quot;&gt;https://russportal.ru/index.php?id=russian_literature&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://starorusskiy.domachevo.com/&quot;&gt;https://starorusskiy.domachevo.com/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://2ch.su/fl/catalog.html?search=rus&amp;tags=1&quot;&gt;https://2ch.su/fl/catalog.html?search=rus&amp;tags=1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://orthlib.canto.ru/transl.php&quot;&gt;Online Преобразователь текста из формата HIP в UCS&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://slavenica.com/&quot;&gt;Переводчик славянских языков и письменностей&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;софт для android&lt;br /&gt;&lt;a href=&quot;https://alexsem.org/&quot;&gt;https://alexsem.org/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/developer?id=Alexander+Semeniuk&quot;&gt;https://play.google.com/store/apps/developer?id=Alexander+Semeniuk&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/developer?id=AZBUKA+VERY,+FOND&quot;&gt;https://play.google.com/store/apps/developer?id=AZBUKA+VERY,+FOND&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/developer?id=Хаџи+Срђан+Ћирковић&amp;hl=sr&quot;&gt;https://play.google.com/store/apps/developer?id=Хаџи+Срђан+Ћирковић&amp;hl=sr&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=ru.alexkozhin.flutter_posledovanie_rf&quot;&gt;https://play.google.com/store/apps/details?id=ru.alexkozhin.flutter_posledovanie_rf&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.rustore.ru/catalog/app/ru.alexkozhin.flutter_posledovanie_rf&quot;&gt;https://www.rustore.ru/catalog/app/ru.alexkozhin.flutter_posledovanie_rf&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.rustore.ru/catalog/developer/j9xobe&quot;&gt;https://www.rustore.ru/catalog/developer/j9xobe&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.rustore.ru/catalog/developer/dffce110&quot;&gt;https://www.rustore.ru/catalog/developer/dffce110&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;шрифты и тексты&lt;/summary&gt;&lt;br /&gt;mkdir -p ~/.fonts&lt;br /&gt;распаковать шрифты туда и установить в систему&lt;br /&gt;fc-cache -f -v&lt;br /&gt;&lt;br /&gt;исправит кодировку файла&lt;br /&gt;sudo apt install enca&lt;br /&gt;enca - проверка кодировки файлов;&lt;br /&gt;enconv - конвертация файлов.&lt;br /&gt;enconv имя_файла&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=5877040&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/5877040.html</comments>
  <category>цся</category>
  <category>подборка</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/5876790.html</guid>
  <pubDate>Fri, 30 Jan 2026 20:57:01 GMT</pubDate>
  <title>гайд по v2fly</title>
  <link>https://uzverss.dreamwidth.org/5876790.html</link>
  <description>&lt;br&gt;&lt;a href=&quot;https://github.com/v2fly&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://www.v2fly.org/v2ray.png&quot; width=&quot;260&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;раскрыть для чтения&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/v2fly&quot;&gt;https://github.com/v2fly&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.v2fly.org/en_US/guide/start.html&quot;&gt;https://www.v2fly.org/en_US/guide/start.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://hub.docker.com/r/v2fly/v2fly-core&quot;&gt;https://hub.docker.com/r/v2fly/v2fly-core&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Установка&lt;br /&gt;Самый быстрый способ — использовать официальный установочный скрипт для Linux:&lt;br /&gt;curl -Ls &lt;a href=&quot;https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh&quot;&gt;https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh&lt;/a&gt; | sudo bash&lt;br /&gt;&lt;br /&gt;Этот скрипт установит ядро в /usr/local/bin/v2ray и подготовит директории для конфигурации. &lt;br /&gt;2. Конфигурация&lt;br /&gt;Файл настроек обычно находится по пути /usr/local/etc/v2ray/config.json. Для минимальной работы (протокол VMess) необходимо: &lt;br /&gt;Сгенерировать UUID (ваш идентификатор/пароль): cat /proc/sys/kernel/random/uuid.&lt;br /&gt;Отредактировать файл, указав в секции inbounds:&lt;br /&gt;port: номер порта (например, 10086).&lt;br /&gt;protocol: vmess.&lt;br /&gt;id: ваш сгенерированный UUID. &lt;br /&gt;&lt;br /&gt;Запуск и проверка&lt;br /&gt;После сохранения настроек активируйте службу:&lt;br /&gt;Запуск: sudo systemctl start v2ray.&lt;br /&gt;Автозапуск: sudo systemctl enable v2ray.&lt;br /&gt;Проверка статуса: systemctl status v2ray. &lt;br /&gt;&lt;br /&gt;Для подключения используйте приложения v2rayN (Windows), v2rayA (Linux/Web) или V2Box (iOS). В клиенте нужно создать новый профиль, указав IP сервера, порт, протокол (VMess) и ваш UUID.&lt;br /&gt;&lt;br /&gt;Где указывать «пароли» (UUID) в конфиге&lt;br /&gt;В файле /usr/local/etc/v2ray/config.json пользователи перечисляются в массиве clients внутри секции inbounds&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
&quot;inbounds&quot;: [
  {
    &quot;port&quot;: 10086, 
    &quot;protocol&quot;: &quot;vmess&quot;, // или &quot;vless&quot;
    &quot;settings&quot;: {
      &quot;clients&quot;: [
        {
          &quot;id&quot;: &quot;ваш-первый-uuid-здесь&quot;,
          &quot;email&quot;: &quot;user1@example.com&quot;,
          &quot;level&quot;: 0
        },
        {
          &quot;id&quot;: &quot;ваш-второй-uuid-здесь&quot;,
          &quot;email&quot;: &quot;user2@example.com&quot;,
          &quot;level&quot;: 0
        }
      ]
    }
  }
]

&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Важные моменты:&lt;br /&gt;Генерация: Чтобы создать новый «пароль», выполните в терминале команду cat /proc/sys/kernel/random/uuid.&lt;br /&gt;Идентификация: Поле email необязательно, оно служит только для того, чтобы вы могли отличить один UUID от другого в логах.&lt;br /&gt;Протокол Trojan: Если вы используете протокол Trojan, там вместо UUID используется обычная текстовая строка (пароль). В секции settings для него это выглядит так: &quot;clients&quot;: [{&quot;password&quot;: &quot;ваш_пароль&quot;}].&lt;br /&gt;Протокол Shadowsocks: Если вы настраиваете Shadowsocks внутри V2Ray, пароль задается в поле &quot;password&quot;: &quot;ваш_пароль&quot; в настройках входящего соединения. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Для протокола VMess &quot;паролем&quot; является UUID. Вот минимальный рабочий пример секции inbounds для файла config.json.&lt;br /&gt;Пример конфига (Server side)&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;inbounds&quot;: [
    {
      &quot;port&quot;: 443, // Порт, который вы откроете на сервере
      &quot;protocol&quot;: &quot;vmess&quot;,
      &quot;settings&quot;: {
        &quot;clients&quot;: [
          {
            &quot;id&quot;: &quot;b831343b-6324-4d53-ad4f-8cda48b30811&quot;, // Ваш основной &quot;пароль&quot;
            &quot;alterId&quot;: 0,
            &quot;security&quot;: &quot;auto&quot;
          },
          {
            &quot;id&quot;: &quot;550e8400-e29b-41d4-a716-446655440000&quot;, // &quot;Пароль&quot; для второго друга
            &quot;alterId&quot;: 0
          }
        ]
      },
      &quot;streamSettings&quot;: {
        &quot;network&quot;: &quot;tcp&quot; 
      }
    }
  ],
  &quot;outbounds&quot;: [
    {
      &quot;protocol&quot;: &quot;freedom&quot;,
      &quot;settings&quot;: {}
    }
  ]
}

&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Главные правила:&lt;br /&gt;UUID: Должен быть в формате 8-4-4-4-12 символов. Генерируйте новый для каждого клиента командой cat /proc/sys/kernel/random/uuid.&lt;br /&gt;alterId: В современных версиях V2Fly (V2Ray 4.28.1+) рекомендуется ставить 0. Если на клиенте стоит старое приложение, может потребоваться одинаковое значение (например, 64) и там, и там.&lt;br /&gt;&lt;br /&gt;Получение сертификата&lt;br /&gt;Самый простой способ — использовать acme.sh. Замените example.com на ваш домен:&lt;br /&gt;bash&lt;br /&gt;curl &lt;a href=&quot;https://get.acme.sh&quot;&gt;https://get.acme.sh&lt;/a&gt; | sh&lt;br /&gt;~/.acme.sh/acme.sh --set-default-ca --server letsencrypt&lt;br /&gt;~/.acme.sh/acme.sh --issue -d example.com --standalone&lt;br /&gt;&lt;br /&gt;После этого скопируйте файлы сертификатов в папку V2Ray:&lt;br /&gt;bash&lt;br /&gt;~/.acme.sh/acme.sh --install-cert -d example.com \&lt;br /&gt;--fullchain-file /usr/local/etc/v2ray/v2ray.crt \&lt;br /&gt;--key-file /usr/local/etc/v2ray/v2ray.key&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Конфигурация сервера (VMess + TLS)&lt;/summary&gt;&lt;br /&gt;Конфигурация сервера (VMess + TLS)&lt;br /&gt;Отредактируйте /usr/local/etc/v2ray/config.json, добавив блок streamSettings:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;inbounds&quot;: [
    {
      &quot;port&quot;: 443, 
      &quot;protocol&quot;: &quot;vmess&quot;,
      &quot;settings&quot;: {
        &quot;clients&quot;: [
          { &quot;id&quot;: &quot;ваш-uuid-здесь&quot;, &quot;alterId&quot;: 0 }
        ]
      },
      &quot;streamSettings&quot;: {
        &quot;network&quot;: &quot;tcp&quot;,
        &quot;security&quot;: &quot;tls&quot;,
        &quot;tlsSettings&quot;: {
          &quot;certificates&quot;: [
            {
              &quot;certificateFile&quot;: &quot;/usr/local/etc/v2ray/v2ray.crt&quot;,
              &quot;keyFile&quot;: &quot;/usr/local/etc/v2ray/v2ray.key&quot;
            }
          ]
        }
      }
    }
  ],
  &quot;outbounds&quot;: [{ &quot;protocol&quot;: &quot;freedom&quot; }]
}

&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Настройка VMess + WS + TLS &lt;/summary&gt;&lt;br /&gt;Настройка сервера (config.json)&lt;br /&gt;Измените блок streamSettings, чтобы добавить поддержку WebSocket и указать путь (path):&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
&quot;streamSettings&quot;: {
  &quot;network&quot;: &quot;ws&quot;,
  &quot;security&quot;: &quot;tls&quot;,
  &quot;wsSettings&quot;: {
    &quot;path&quot;: &quot;/video&quot; // Секретный путь, может быть любым
  },
  &quot;tlsSettings&quot;: {
    &quot;certificates&quot;: [
      {
        &quot;certificateFile&quot;: &quot;/usr/local/etc/v2ray/v2ray.crt&quot;,
        &quot;keyFile&quot;: &quot;/usr/local/etc/v2ray/v2ray.key&quot;
      }
    ]
  }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Настройка Cloudflare (необязательно, но полезно)&lt;br /&gt;Если вы хотите скрыть IP сервера:&lt;br /&gt;В панели Cloudflare (раздел DNS) включите «Proxy status» (оранжевое облако) для вашей записи.&lt;br /&gt;В разделе SSL/TLS установите режим «Full» или «Full (strict)».&lt;br /&gt;3. Настройка клиента&lt;br /&gt;В приложении укажите:&lt;br /&gt;Транспорт/Сеть: ws (WebSocket).&lt;br /&gt;Путь (Path): /video.&lt;br /&gt;TLS: Включено.&lt;br /&gt;SNI / Pseudo-host: ваш домен.&lt;br /&gt;&lt;br /&gt;Использование Nginx в качестве фронтенда — самый надежный метод. Для цензора это выглядит как обычный сайт (например, блог), но обращения к секретному пути Nginx перенаправляет в V2Ray.&lt;br /&gt;1. Конфигурация Nginx&lt;br /&gt;Создайте файл /etc/nginx/sites-available/v2ray и вставьте туда настройки:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
server {
    listen 443 ssl;
    server_name example.com; # Ваш домен

    ssl_certificate /usr/local/etc/v2ray/v2ray.crt;
    ssl_certificate_key /usr/local/etc/v2ray/v2ray.key;

    location / {
        root /var/www/html; # Путь к вашему обычному сайту
        index index.html;
    }

    location /video { # Тот самый секретный путь
        proxy_redirect off;
        proxy_pass http://127.0.0.1:10086; # Перекидываем на локальный порт V2Ray
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection &quot;upgrade&quot;;
        proxy_set_header Host $host;
    }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Не забудьте активировать конфиг: ln -s /etc/nginx/sites-available/v2ray /etc/nginx/sites-enabled/ и перезапустить Nginx: systemctl restart nginx.&lt;br /&gt;2. Конфигурация V2Ray (изменения)&lt;br /&gt;Теперь сервер V2Ray должен слушать только локальный порт и без TLS (так как TLS уже обрабатывает Nginx):&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
&quot;inbounds&quot;: [
  {
    &quot;port&quot;: 10086, 
    &quot;listen&quot;: &quot;127.0.0.1&quot;, // Слушаем только внутри сервера
    &quot;protocol&quot;: &quot;vmess&quot;,
    &quot;settings&quot;: {
      &quot;clients&quot;: [{ &quot;id&quot;: &quot;ваш-uuid&quot;, &quot;alterId&quot;: 0 }]
    },
    &quot;streamSettings&quot;: {
      &quot;network&quot;: &quot;ws&quot;,
      &quot;wsSettings&quot;: {
        &quot;path&quot;: &quot;/video&quot;
      }
    }
  }
]
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Итог&lt;br /&gt;Снаружи: Всё выглядит как HTTPS-сайт на 443 порту.&lt;br /&gt;Внутри: Nginx «отрезает» запросы на /video и отдает их V2Ray.&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Настройка клиента&lt;/summary&gt;&lt;br /&gt;В приложении (например, v2rayN или V2Box) измените следующие параметры:&lt;br /&gt;Port: 443&lt;br /&gt;TLS: включить (on / tls)&lt;br /&gt;SNI (Server Name): ваш домен (example.com)&lt;br /&gt;Важно: Убедитесь, что порт 80 (для выпуска сертификата) и 443 (для работы V2Ray) открыты в фаерволе: ufw allow 80,443/tcp.&lt;br /&gt;Рекомендуемые клиенты:&lt;br /&gt;&lt;a href=&quot;https://github.com/2dust/v2rayNG&quot;&gt;https://github.com/2dust/v2rayNG&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/2dust/v2flyNG&quot;&gt;https://github.com/2dust/v2flyNG&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;В чем разница?&lt;br /&gt;v2rayNG — это стандартный графический клиент. Он самый стабильный и проверенный.&lt;br /&gt;v2flyNG — часто используется для тестов новых функций ядра V2Fly.&lt;br /&gt;&lt;br /&gt;Где взять правильный v2rayNG:&lt;br /&gt;GitHub (рекомендуется): &lt;a href=&quot;https://github.com/2dust/v2rayng/releases&quot;&gt;https://github.com/2dust/v2rayng/releases&lt;/a&gt; (ищите APK с пометкой arm64-v8a).&lt;br /&gt;Google Play: v2rayNG.&lt;br /&gt;&lt;br /&gt;Как быстро настроить:&lt;br /&gt;Скачайте .apk (обычно файл v2rayNG_x.x.x_arm64-v8a.apk).&lt;br /&gt;Нажмите &quot;+&quot; в приложении.&lt;br /&gt;Выберите Type: VMess.&lt;br /&gt;Введите данные из вашего конфига:&lt;br /&gt;Address: ваш домен.&lt;br /&gt;Port: 443.&lt;br /&gt;ID: ваш UUID.&lt;br /&gt;Security: auto.&lt;br /&gt;Network: ws.&lt;br /&gt;Path: /video.&lt;br /&gt;TLS: tls.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Вот готовый шаблон для вашей конфигурации (VMess + WS + TLS).&lt;br /&gt;1. Подготовьте данные&lt;br /&gt;Замените значения на свои:&lt;br /&gt;v: Версия (оставляем 2)&lt;br /&gt;ps: Название профиля (любое имя)&lt;br /&gt;add: Ваш домен (например, myserver.com)&lt;br /&gt;port: 443&lt;br /&gt;id: Ваш UUID&lt;br /&gt;path: /video&lt;br /&gt;sni: Ваш домен&lt;br /&gt;&lt;br /&gt;Готовая ссылка (пример)&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;v&quot;: &quot;2&quot;,
  &quot;ps&quot;: &quot;MyServer-V2Fly&quot;,
  &quot;add&quot;: &quot;ВАШ_ДОМЕН&quot;,
  &quot;port&quot;: &quot;443&quot;,
  &quot;id&quot;: &quot;ВАШ_UUID&quot;,
  &quot;aid&quot;: &quot;0&quot;,
  &quot;scy&quot;: &quot;auto&quot;,
  &quot;net&quot;: &quot;ws&quot;,
  &quot;type&quot;: &quot;none&quot;,
  &quot;host&quot;: &quot;ВАШ_ДОМЕН&quot;,
  &quot;path&quot;: &quot;/video&quot;,
  &quot;tls&quot;: &quot;tls&quot;,
  &quot;sni&quot;: &quot;ВАШ_ДОМЕН&quot;
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Чтобы быстро получить готовую ссылку прямо в консоли сервера (без сторонних сайтов), выполните эту команду.&lt;br /&gt;Замените ВАШ_ДОМЕН и ВАШ_UUID на свои данные перед запуском:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
echo &quot;{\&quot;v\&quot;:\&quot;2\&quot;,\&quot;ps\&quot;:\&quot;MyServer\&quot;,\&quot;add\&quot;:\&quot;ВАШ_ДОМЕН\&quot;,\&quot;port\&quot;:\&quot;443\&quot;,\&quot;id\&quot;:\&quot;ВАШ_UUID\&quot;,\&quot;aid\&quot;:\&quot;0\&quot;,\&quot;scy\&quot;:\&quot;auto\&quot;,\&quot;net\&quot;:\&quot;ws\&quot;,\&quot;type\&quot;:\&quot;none\&quot;,\&quot;host\&quot;:\&quot;ВАШ_ДОМЕН\&quot;,\&quot;path\&quot;:\&quot;/video\&quot;,\&quot;tls\&quot;:\&quot;tls\&quot;,\&quot;sni\&quot;:\&quot;ВАШ_ДОМЕН\&quot;}&quot; | base64 -w 0 | sed &apos;s/^/vmess:\/\//&apos;
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Что делает эта команда:&lt;br /&gt;Формирует нужный JSON.&lt;br /&gt;Кодирует его в Base64 (флаг -w 0 убирает переносы строк).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Как импортировать в v2rayNG:&lt;br /&gt;Возьмите получившуюся Base64-строку.&lt;br /&gt;Добавьте в начало префикс vmess://.&lt;br /&gt;Итоговая строка должна выглядеть примерно так: vmess://eyB2IjogIjIiLCAicHMiOiAiTW...&lt;br /&gt;Скопируйте её в телефоне.&lt;br /&gt;В v2rayNG нажмите &quot;+&quot; вверху и выберите &quot;Import config from clipboard&quot;&lt;br /&gt;&lt;br /&gt;Генерация нового UUID (вашего уникального &quot;пароля&quot;) выполняется одной простой командой:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
cat /proc/sys/kernel/random/uuid
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Или, если в системе установлен пакет uuid-runtime&lt;br /&gt;uuidgen&lt;br /&gt;&lt;br /&gt;Скопируйте полученный код (вида 550e8400-e29b-41d4-a716-446655440000).&lt;br /&gt;Вставьте его в ваш конфиг /usr/local/etc/v2ray/config.json на сервере.&lt;br /&gt;Вставьте его же в команду для генерации ссылки vmess://, которую я давал выше.&lt;br /&gt;&lt;br /&gt;Важно: После изменения UUID в файле конфигурации на сервере, не забудьте перезапустить службу V2Ray, чтобы изменения вступили в силу:&lt;br /&gt;sudo systemctl restart v2ray&lt;br /&gt;&lt;br /&gt;Для Linux есть три основных пути: от простого интерфейса до работы в консоли.&lt;br /&gt;1. v2rayA (Рекомендуемый — Web-интерфейс)&lt;br /&gt;Установка:&lt;br /&gt;curl -Ls &lt;a href=&quot;https://mirrors.v2raya.org&quot;&gt;https://mirrors.v2raya.org&lt;/a&gt; | sudo bash&lt;br /&gt;sudo systemctl enable --now v2raya&lt;br /&gt;Как пользоваться: Откройте в браузере &lt;a href=&quot;http://localhost:2017&quot;&gt;http://localhost:2017&lt;/a&gt;, создайте аккаунт и просто вставьте вашу ссылку vmess://. Нажмите &quot;Import&quot;, затем &quot;Select&quot; и &quot;Ready&quot;.&lt;br /&gt;&lt;br /&gt;2. Nekoray / Nekobox (Графическое приложение)&lt;br /&gt;&lt;a href=&quot;https://github.com/MatsuriDayo/nekoray&quot;&gt;https://github.com/MatsuriDayo/nekoray&lt;/a&gt;&lt;br /&gt;сайт en.nekoray.org — это неофициальный ресурс.&lt;br /&gt;Хотя он выглядит как «официальная страница», разработчик проекта (MatsuriDayo) неоднократно заявлял, что единственным официальным источником является GitHub.&lt;br /&gt;Установка: Скачайте .deb пакет или AppImage с GitHub Nekoray.&lt;br /&gt;Запуск: Разрешите выполнение (chmod +x) и запустите. В меню выберите «Program» -&amp;gt; «Import from clipboard».&lt;br /&gt;Как запустить и настроить:&lt;br /&gt;При первом запуске он предложит выбрать ядро — выбирайте sing-box (оно современнее и быстрее).&lt;br /&gt;Скопируйте вашу ссылку vmess://.&lt;br /&gt;В программе нажмите Program → Add profile from clipboard (или просто Ctrl+V).&lt;br /&gt;Нажмите правой кнопкой на добавленный сервер → Start.&lt;br /&gt;Важно: Чтобы весь трафик системы пошел через прокси, поставьте галочку System Proxy (внизу или в меню).&lt;br /&gt;&lt;br /&gt;3. V2Fly (Ядро через консоль)&lt;br /&gt;curl -Ls &lt;a href=&quot;https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh&quot;&gt;https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh&lt;/a&gt; | sudo bash&lt;br /&gt;&lt;br /&gt;Настройка: Вам придется вручную создать файл /usr/local/etc/v2ray/config.json с секцией outbounds, где будут указаны данные вашего сервера (те же, что мы зашивали в ссылку).&lt;br /&gt;Вот как должен выглядеть файл /usr/local/etc/v2ray/config.json на вашем компьютере:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;inbounds&quot;: [
    {
      &quot;port&quot;: 1080, // Локальный порт, который вы укажете в браузере/Telegram
      &quot;listen&quot;: &quot;127.0.0.1&quot;,
      &quot;protocol&quot;: &quot;socks&quot;,
      &quot;settings&quot;: {
        &quot;udp&quot;: true
      }
    }
  ],
  &quot;outbounds&quot;: [
    {
      &quot;protocol&quot;: &quot;vmess&quot;,
      &quot;settings&quot;: {
        &quot;vnext&quot;: [
          {
            &quot;address&quot;: &quot;ВАШ_ДОМЕН&quot;, 
            &quot;port&quot;: 443,
            &quot;users&quot;: [
              {
                &quot;id&quot;: &quot;ВАШ_UUID&quot;,
                &quot;alterId&quot;: 0,
                &quot;security&quot;: &quot;auto&quot;
              }
            ]
          }
        ]
      },
      &quot;streamSettings&quot;: {
        &quot;network&quot;: &quot;ws&quot;,
        &quot;security&quot;: &quot;tls&quot;,
        &quot;tlsSettings&quot;: {
          &quot;serverName&quot;: &quot;ВАШ_ДОМЕН&quot;
        },
        &quot;wsSettings&quot;: {
          &quot;path&quot;: &quot;/video&quot;
        }
      }
    },
    {
      &quot;protocol&quot;: &quot;freedom&quot;,
      &quot;tag&quot;: &quot;direct&quot;
    }
  ]
}

&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Разбор ключевых секций:&lt;br /&gt;inbounds: Создает на вашем ПК локальный прокси. В примере выше это SOCKS5 на порту 1080.&lt;br /&gt;outbounds: Описывает, куда V2Ray должен отправлять трафик. Здесь мы прописали ваш сервер, UUID, WebSocket путь (/video) и включили TLS.&lt;br /&gt;freedom: Нужен, чтобы V2Ray умел ходить в сеть напрямую, если вы добавите правила маршрутизации.&lt;br /&gt;&lt;br /&gt;Чтобы разделять трафик, в секцию routing добавляются правила (rules). Мы укажем V2Ray отправлять трафик на домены .ru и российские IP напрямую (direct), а всё остальное — через ваш прокси-сервер (outbound).&lt;br /&gt;Добавьте блок routing в ваш config.json (обычно после outbounds):&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
&quot;routing&quot;: {
  &quot;domainStrategy&quot;: &quot;IPIfNonMatch&quot;,
  &quot;rules&quot;: [
    {
      &quot;type&quot;: &quot;field&quot;,
      &quot;outboundTag&quot;: &quot;direct&quot;,
      &quot;domain&quot;: [
        &quot;geosite:cn&quot;,
        &quot;geosite:ru&quot;,
        &quot;regexp:.*\\.ru$&quot;
      ]
    },
    {
      &quot;type&quot;: &quot;field&quot;,
      &quot;outboundTag&quot;: &quot;direct&quot;,
      &quot;ip&quot;: [
        &quot;geoip:private&quot;,
        &quot;geoip:ru&quot;
      ]
    }
  ]
},
&quot;outbounds&quot;: [
  {
    &quot;protocol&quot;: &quot;vmess&quot;,
    &quot;tag&quot;: &quot;proxy&quot;, // Добавьте этот тег для ссылки из правил
    &quot;settings&quot;: { ... },
    &quot;streamSettings&quot;: { ... }
  },
  {
    &quot;protocol&quot;: &quot;freedom&quot;,
    &quot;tag&quot;: &quot;direct&quot;, // Тег для прямого соединения
    &quot;settings&quot;: {}
  }
]
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Что здесь происходит:&lt;br /&gt;domainStrategy: Сначала проверяет домен, если не совпало — проверяет IP.&lt;br /&gt;geosite:ru: Использует встроенную базу доменов РФ.&lt;br /&gt;regexp:.*\.ru$: Регулярное выражение, направляющее все сайты в зоне .ru мимо прокси.&lt;br /&gt;geoip:ru: Использует базу IP-адресов РФ, чтобы российские сервисы не блокировали вас за «иностранный» вход.&lt;br /&gt;geoip:private: Исключает из проксирования ваши локальные ресурсы (роутер, принтер).&lt;br /&gt;&lt;br /&gt;Важное примечание:&lt;br /&gt;Для работы geosite и geoip на Debian должны быть установлены соответствующие файлы баз (обычно лежат в /usr/local/share/v2ray/). Если их нет, скачайте их:&lt;br /&gt;sudo curl -L -o /usr/local/share/v2ray/geoip.dat &lt;a href=&quot;https://github.com&quot;&gt;https://github.com&lt;/a&gt;&lt;br /&gt;sudo curl -L -o /usr/local/share/v2ray/geosite.dat &lt;a href=&quot;https://github.com&quot;&gt;https://github.com&lt;/a&gt;&lt;br /&gt;После правок не забудьте: sudo systemctl restart v2ray&lt;br /&gt;&lt;br /&gt;Чтобы базы IP и доменов не устаревали, лучше всего настроить ежедневное обновление через systemd-таймер. Это надежнее, чем обычный cron.&lt;br /&gt;1. Создайте скрипт обновления&lt;br /&gt;Создайте файл /usr/local/bin/update-v2ray-rules.sh:&lt;br /&gt;sudo nano /usr/local/bin/update-v2ray-rules.sh&lt;br /&gt;&lt;br /&gt;Вставьте туда следующий код:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
#!/bin/bash
# Путь к папке с базами
DAT_PATH=&quot;/usr/local/share/v2ray&quot;

# Скачивание свежих версий
curl -L -o $DAT_PATH/geoip.dat https://github.com
curl -L -o $DAT_PATH/geosite.dat https://github.com

# Перезапуск V2Ray для применения новых баз
systemctl restart v2ray
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Сделайте его исполняемым:&lt;br /&gt;sudo chmod +x /usr/local/bin/update-v2ray-rules.sh&lt;br /&gt;Создайте Systemd сервис&lt;br /&gt;Создайте файл /etc/systemd/system/v2ray-rules-update.service:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
[Unit]
Description=Update V2Ray GeoIP and GeoSite databases
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/update-v2ray-rules.sh
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Создайте Таймер (запуск раз в сутки)&lt;br /&gt;Создайте файл /etc/systemd/system/v2ray-rules-update.timer:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
[Unit]
Description=Run V2Ray rules update daily

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Активируйте таймер&lt;br /&gt;sudo systemctl daemon-reload&lt;br /&gt;sudo systemctl enable --now v2ray-rules-update.timer&lt;br /&gt;&lt;br /&gt;Увидеть статус таймера и время следующего запуска: systemctl list-timers --all | grep v2ray&lt;br /&gt;Запустить обновление вручную прямо сейчас: sudo systemctl start v2ray-rules-update.service&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Чтобы провайдер не перехватывал ваши DNS-запросы (DNS Poisoning), нужно настроить внутри V2Ray собственный DNS-сервер. В связке с правилами маршрутизации это позволит запрашивать IP российских сайтов через системный DNS, а заблокированных — через защищенный Google/Cloudflare.&lt;br /&gt;Добавьте блок dns и обновите routing в вашем config.json:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;dns&quot;: {
    &quot;servers&quot;: [
      {
        &quot;address&quot;: &quot;8.8.8.8&quot;, // Запросы через сервер для заблокированных сайтов
        &quot;port&quot;: 53,
        &quot;domains&quot;: [&quot;geosite:google&quot;, &quot;geosite:geolocation-!cn&quot;] 
      },
      {
        &quot;address&quot;: &quot;1.1.1.1&quot;,
        &quot;port&quot;: 53
      },
      {
        &quot;address&quot;: &quot;localhost&quot;, // Для российских сайтов используем DNS провайдера
        &quot;port&quot;: 53,
        &quot;domains&quot;: [&quot;geosite:ru&quot;, &quot;regexp:.*\\.ru$&quot;]
      }
    ]
  },
  &quot;routing&quot;: {
    &quot;domainStrategy&quot;: &quot;IPOnDemand&quot;, // Важно для перехвата DNS
    &quot;rules&quot;: [
      {
        &quot;type&quot;: &quot;field&quot;,
        &quot;port&quot;: 53,
        &quot;outboundTag&quot;: &quot;proxy&quot; // Направляем DNS трафик в туннель
      },
      {
        &quot;type&quot;: &quot;field&quot;,
        &quot;outboundTag&quot;: &quot;direct&quot;,
        &quot;domain&quot;: [&quot;geosite:ru&quot;, &quot;regexp:.*\\.ru$&quot;]
      }
      // ... ваши остальные правила из предыдущего шага ...
    ]
  }
}

&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Как это работает:&lt;br /&gt;Локальные домены: Если вы заходите на yandex.ru, V2Ray видит правило geosite:ru и спрашивает IP у вашего обычного (localhost) DNS.&lt;br /&gt;Заблокированные домены: Если вы идете на заблокированный ресурс, V2Ray отправляет зашифрованный запрос через ваш outbound (сервер) к Google DNS (8.8.8.8).&lt;br /&gt;Скрытие запросов: Провайдер больше не видит, какие именно сайты вы пытаетесь открыть.&lt;br /&gt;Последний штрих:&lt;br /&gt;Чтобы весь системный трафик в Debian начал использовать этот DNS, в настройках сети (или в файле /etc/resolv.conf) обычно указывают nameserver 127.0.0.1.&lt;br /&gt;Важно: Убедитесь, что в секции inbounds у вашего SOCKS-прокси включена поддержка UDP (&quot;udp&quot;: true), иначе DNS не заработает.&lt;br /&gt;&lt;br /&gt;Вот полный файл конфигурации клиента для Debian (/usr/local/etc/v2ray/config.json). Он объединяет в себе локальный SOCKS5-прокси, шифрование TLS, WebSocket, разделение трафика (РФ напрямую, остальное через сервер) и защищенный DNS.&lt;br /&gt;Финальный конфиг (Client side)&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;dns&quot;: {
    &quot;servers&quot;: [
      {
        &quot;address&quot;: &quot;8.8.8.8&quot;,
        &quot;port&quot;: 53,
        &quot;domains&quot;: [&quot;geosite:geolocation-!cn&quot;]
      },
      {
        &quot;address&quot;: &quot;1.1.1.1&quot;,
        &quot;port&quot;: 53
      },
      {
        &quot;address&quot;: &quot;localhost&quot;,
        &quot;port&quot;: 53,
        &quot;domains&quot;: [&quot;geosite:ru&quot;, &quot;regexp:.*\\.ru$&quot;]
      }
    ]
  },
  &quot;inbounds&quot;: [
    {
      &quot;port&quot;: 1080,
      &quot;listen&quot;: &quot;127.0.0.1&quot;,
      &quot;protocol&quot;: &quot;socks&quot;,
      &quot;settings&quot;: {
        &quot;udp&quot;: true,
        &quot;auth&quot;: &quot;noauth&quot;
      },
      &quot;sniffing&quot;: {
        &quot;enabled&quot;: true,
        &quot;destOverride&quot;: [&quot;http&quot;, &quot;tls&quot;]
      }
    }
  ],
  &quot;outbounds&quot;: [
    {
      &quot;protocol&quot;: &quot;vmess&quot;,
      &quot;tag&quot;: &quot;proxy&quot;,
      &quot;settings&quot;: {
        &quot;vnext&quot;: [
          {
            &quot;address&quot;: &quot;ВАШ_ДОМЕН&quot;,
            &quot;port&quot;: 443,
            &quot;users&quot;: [
              {
                &quot;id&quot;: &quot;ВАШ_UUID&quot;,
                &quot;alterId&quot;: 0,
                &quot;security&quot;: &quot;auto&quot;
              }
            ]
          }
        ]
      },
      &quot;streamSettings&quot;: {
        &quot;network&quot;: &quot;ws&quot;,
        &quot;security&quot;: &quot;tls&quot;,
        &quot;tlsSettings&quot;: {
          &quot;serverName&quot;: &quot;ВАШ_ДОМЕН&quot;
        },
        &quot;wsSettings&quot;: {
          &quot;path&quot;: &quot;/video&quot;
        }
      }
    },
    {
      &quot;protocol&quot;: &quot;freedom&quot;,
      &quot;tag&quot;: &quot;direct&quot;,
      &quot;settings&quot;: {}
    },
    {
      &quot;protocol&quot;: &quot;blackhole&quot;,
      &quot;tag&quot;: &quot;block&quot;,
      &quot;settings&quot;: {}
    }
  ],
  &quot;routing&quot;: {
    &quot;domainStrategy&quot;: &quot;IPOnDemand&quot;,
    &quot;rules&quot;: [
      {
        &quot;type&quot;: &quot;field&quot;,
        &quot;ip&quot;: [&quot;8.8.8.8&quot;, &quot;1.1.1.1&quot;],
        &quot;outboundTag&quot;: &quot;proxy&quot;
      },
      {
        &quot;type&quot;: &quot;field&quot;,
        &quot;outboundTag&quot;: &quot;direct&quot;,
        &quot;domain&quot;: [&quot;geosite:ru&quot;, &quot;regexp:.*\\.ru$&quot;]
      },
      {
        &quot;type&quot;: &quot;field&quot;,
        &quot;outboundTag&quot;: &quot;direct&quot;,
        &quot;ip&quot;: [&quot;geoip:private&quot;, &quot;geoip:ru&quot;]
      }
    ]
  }
}

&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Что нужно сделать после сохранения:&lt;br /&gt;Замените заглушки: Вместо ВАШ_ДОМЕН и ВАШ_UUID вставьте свои данные.&lt;br /&gt;&lt;br /&gt;Сохраните конфиг.&lt;br /&gt;Проверьте его на ошибки:&lt;br /&gt;v2ray test -c /usr/local/etc/v2ray/config.json&lt;br /&gt;&lt;br /&gt;Перезапустите службу:&lt;br /&gt;sudo systemctl restart v2ray&lt;br /&gt;&lt;br /&gt;Как пользоваться:&lt;br /&gt;Теперь в Telegram или в настройках прокси браузера (через расширение типа Proxy SwitchyOmega) укажите:&lt;br /&gt;Тип: SOCKS5&lt;br /&gt;Адрес: 127.0.0.1&lt;br /&gt;Порт: 1080&lt;br /&gt;&lt;br /&gt;Для браузера (Chrome, Firefox, Edge) лучшим инструментом является расширение Proxy SwitchyOmega. Оно позволяет не переключать прокси в настройках всей системы, а управлять ими прямо в браузере.&lt;br /&gt;&lt;a href=&quot;https://github.com/zero-peak/ZeroOmega&quot;&gt;https://github.com/zero-peak/ZeroOmega&lt;/a&gt;&lt;br /&gt;1. Установка&lt;br /&gt;Chrome Web Store&lt;br /&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/proxy-switchyomega-3-zero/pfnededegaaopdmhkdmcofjmoldfiped&quot;&gt;https://chromewebstore.google.com/detail/proxy-switchyomega-3-zero/pfnededegaaopdmhkdmcofjmoldfiped&lt;/a&gt;&lt;br /&gt;Firefox Add-ons&lt;br /&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/zeroomega/&quot;&gt;https://addons.mozilla.org/en-US/firefox/addon/zeroomega/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. Настройка профиля&lt;br /&gt;После установки откройте параметры расширения:&lt;br /&gt;Нажмите &quot;New profile&quot;, введите имя (например, V2Ray) и выберите тип Proxy Profile.&lt;br /&gt;В таблице настроек укажите:&lt;br /&gt;Protocol: SOCKS5&lt;br /&gt;Server: 127.0.0.1&lt;br /&gt;Port: 1080 (тот самый, что мы указали в inbounds конфига).&lt;br /&gt;Нажмите &quot;Apply changes&quot; (слева внизу).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;VLESS + Reality + Vision&lt;/summary&gt;&lt;br /&gt;bash -c &quot;$(curl -L &lt;a href=&quot;https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh&quot;&gt;https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh&lt;/a&gt;)&quot; @ install&lt;br /&gt;Генерация ключей: xray x25519&lt;br /&gt;Генерация UUID: xray uuid&lt;br /&gt;Конфиг сервера: Файл /usr/local/etc/xray/config.json. Основной фокус там в секции realitySettings, где указывается dest (например, google.com:443) и ваш privateKey.&lt;br /&gt;&lt;br /&gt;VLESS + Reality работает на порту 443 и требует обязательного наличия privateKey в конфиге, иначе Xray просто не запустится.&lt;br /&gt;&lt;br /&gt;Секция Inbounds для сервера:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;inbounds&quot;: [
    {
      &quot;port&quot;: 443,
      &quot;protocol&quot;: &quot;vless&quot;,
      &quot;settings&quot;: {
        &quot;clients&quot;: [
          {
            &quot;id&quot;: &quot;СГЕНЕРИРОВАННЫЙ_UUID&quot;,
            &quot;flow&quot;: &quot;xtls-rprx-vision&quot;
          }
        ],
        &quot;decryption&quot;: &quot;none&quot;
      },
      &quot;streamSettings&quot;: {
        &quot;network&quot;: &quot;tcp&quot;,
        &quot;security&quot;: &quot;reality&quot;,
        &quot;realitySettings&quot;: {
          &quot;show&quot;: false,
          &quot;dest&quot;: &quot;dl.google.com:443&quot;,
          &quot;xver&quot;: 0,
          &quot;serverNames&quot;: [
            &quot;dl.google.com&quot;
          ],
          &quot;privateKey&quot;: &quot;ВАШ_PRIVATE_KEY&quot;,
          &quot;minClientVer&quot;: &quot;&quot;,
          &quot;maxClientVer&quot;: &quot;&quot;,
          &quot;maxTimeDiff&quot;: 0,
          &quot;shortIds&quot;: [
            &quot;ВАШ_SHORT_ID&quot;
          ]
        }
      }
    }
  ],
  &quot;outbounds&quot;: [
    {
      &quot;protocol&quot;: &quot;freedom&quot;,
      &quot;tag&quot;: &quot;direct&quot;
    },
    {
      &quot;protocol&quot;: &quot;blackhole&quot;,
      &quot;tag&quot;: &quot;block&quot;
    }
  ]
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Как заполнить пропуски (команды для сервера):&lt;br /&gt;UUID: Создайте новый идентификатор:&lt;br /&gt;xray uuid&lt;br /&gt;Ключи: Сгенерируйте пару (в конфиг выше вставляйте только Private):&lt;br /&gt;xray x25519&lt;br /&gt;Short ID: Сгенерируйте любую hex-строку из 8 или 16 символов:&lt;br /&gt;openssl rand -hex 8&lt;br /&gt;Почему выбран именно dl.google.com:&lt;br /&gt;Этот домен используется для загрузки обновлений Chrome. Трафик к нему огромен, постоянен и идет со всего мира. Это идеальное «укрытие» для вашего VPN-трафика, так как цензоры не рискнут блокировать домены обновлений браузеров.&lt;br /&gt;&lt;br /&gt;Как проверить работу после правки:&lt;br /&gt;Запустите тест конфигурации, чтобы убедиться, что ни одна скобка не потеряна:&lt;br /&gt;xray test -c /usr/local/etc/xray/config.json&lt;br /&gt;Если в ответ получите Configuration OK, перезапускайте:&lt;br /&gt;systemctl restart xray&lt;br /&gt;&lt;br /&gt;Чтобы ссылка корректно импортировалась в v2rayNG (Android) или NekoRay (Debian), она должна содержать все параметры Reality. В протоколе VLESS они передаются как параметры запроса.&lt;br /&gt;Шаблон ссылки VLESS + Reality:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
Скопируйте эту строку и замените данные в скобках на свои:
vless://ВАШ_UUID@IP_СЕРВЕРА:443?security=reality&amp;sni=dl.google.com&amp;fp=chrome&amp;pbk=ВАШ_PUBLIC_KEY&amp;sid=ВАШ_SHORT_ID&amp;flow=xtls-rprx-vision&amp;type=tcp&amp;encryption=none#Reality-Google
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Разбор параметров (что на что менять):&lt;br /&gt;ВАШ_UUID: Идентификатор из конфига сервера.&lt;br /&gt;IP_СЕРВЕРА: Публичный IP вашего VPS.&lt;br /&gt;pbk (Public Key): Ваш Публичный ключ (тот, что шел в паре с privateKey). Важно: на сервере лежит приватный, а в ссылке — публичный.&lt;br /&gt;sid (Short ID): Тот же hex-код из 8 символов, что вы вписали в конфиг.&lt;br /&gt;sni: Домен маскировки (dl.google.com).&lt;br /&gt;fp: Fingerprint (отпечаток браузера). Ставим chrome, чтобы трафик выглядел как запросы из браузера.&lt;br /&gt;flow: xtls-rprx-vision — обязательный параметр для защиты от активного сканирования.&lt;br /&gt;&lt;br /&gt;Как быстро сгенерировать ссылку прямо на сервере:&lt;br /&gt;Если не хочется подставлять данные вручную, выполните эту команду на сервере (предварительно задав переменные):&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
# Пример заполнения (подставьте свои данные)
UUID=&quot;ваш_uuid&quot;
IP=&quot;ваш_ip&quot;
PUB_KEY=&quot;ваш_public_key&quot;
SID=&quot;ваш_short_id&quot;

echo &quot;vless://$UUID@$IP:443?security=reality&amp;sni=dl.google.com&amp;fp=chrome&amp;pbk=$PUB_KEY&amp;sid=$SID&amp;flow=xtls-rprx-vision&amp;type=tcp&amp;encryption=none#Reality-Google&quot;
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Как импортировать:&lt;br /&gt;Скопируйте готовую строку в буфер обмена.&lt;br /&gt;В v2rayNG или NekoRay нажмите &quot;+&quot; или &quot;Import from clipboard&quot;.&lt;br /&gt;Нажмите на иконку «молнии» или выполните Ping, чтобы проверить доступность.&lt;br /&gt;&lt;br /&gt;Вот пошаговый алгоритм:&lt;br /&gt;1. Правильный выбор ядра&lt;br /&gt;При импорте ссылки в NekoRay:&lt;br /&gt;Зайдите в меню Preferences -&amp;gt; Basic Settings.&lt;br /&gt;Убедитесь, что в качестве ядра (Core) выбрано sing-box. Протокол Reality (особенно с xtls-rprx-vision) лучше всего работает именно на этом ядре.&lt;br /&gt;&lt;br /&gt;2. Режим TUN (Проксирование всей системы)&lt;br /&gt;Чтобы не настраивать каждое приложение отдельно:&lt;br /&gt;Запустите NekoRay от имени администратора (или он сам запросит пароль при включении режима).&lt;br /&gt;В главном окне установите галочку TUN Mode.&lt;br /&gt;Теперь весь трафик Debian (терминал, браузер, системные обновления) пойдет через ваш сервер.&lt;br /&gt;&lt;br /&gt;3. Решение проблем с DNS на Debian&lt;br /&gt;Часто сайты не открываются, потому что DNS-запросы «утекают» или блокируются. В NekoRay:&lt;br /&gt;Перейдите в Preferences -&amp;gt; Routing Settings.&lt;br /&gt;Выберите вкладку DNS.&lt;br /&gt;Установите флажок Remote DNS на 8.8.8.8 или 1.1.1.1.&lt;br /&gt;В поле DNS Strategy выберите Prefer IPv4 (это решит 90% проблем с долгим открытием страниц).&lt;br /&gt;&lt;br /&gt;4. Если используете консольный V2Fly (Ядро через терминал)&lt;br /&gt;Если вы решили не использовать графический интерфейс, ваш /usr/local/etc/v2ray/config.json должен содержать блок outbounds для Reality. В отличие от VMess, структура будет такой:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
&quot;outbounds&quot;: [
  {
    &quot;protocol&quot;: &quot;vless&quot;,
    &quot;settings&quot;: {
      &quot;vnext&quot;: [{
        &quot;address&quot;: &quot;IP_СЕРВЕРА&quot;,
        &quot;port&quot;: 443,
        &quot;users&quot;: [{
          &quot;id&quot;: &quot;ВАШ_UUID&quot;,
          &quot;encryption&quot;: &quot;none&quot;,
          &quot;flow&quot;: &quot;xtls-rprx-vision&quot;
        }]
      }]
    },
    &quot;streamSettings&quot;: {
      &quot;network&quot;: &quot;tcp&quot;,
      &quot;security&quot;: &quot;reality&quot;,
      &quot;realitySettings&quot;: {
        &quot;publicKey&quot;: &quot;ВАШ_PUBLIC_KEY&quot;,
        &quot;shortId&quot;: &quot;ВАШ_SHORT_ID&quot;,
        &quot;sni&quot;: &quot;dl.google.com&quot;,
        &quot;fingerprint&quot;: &quot;chrome&quot;
      }
    }
  }
]

&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Если вы планируете смотреть YouTube через браузер, рекомендую в расширении ZeroOmega просто выбрать профиль «System Proxy» (или настроенный SOCKS5 на порт 2081 — стандарт для NekoRay).&lt;br /&gt;&lt;br /&gt;1. Установка ядра на клиент (Debian)&lt;br /&gt;Если еще не ставили, используйте тот же скрипт, что и на сервере:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. Чистый конфиг клиента (/usr/local/etc/xray/config.json)&lt;br /&gt;Этот конфиг создаст локальный SOCKS5 и HTTP прокси, через которые вы сможете пустить трафик.&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;inbounds&quot;: [
    {
      &quot;port&quot;: 1080, // Порт для SOCKS5
      &quot;listen&quot;: &quot;127.0.0.1&quot;,
      &quot;protocol&quot;: &quot;socks&quot;,
      &quot;settings&quot;: { &quot;udp&quot;: true }
    },
    {
      &quot;port&quot;: 1081, // Порт для HTTP (удобно для curl/wget)
      &quot;listen&quot;: &quot;127.0.0.1&quot;,
      &quot;protocol&quot;: &quot;http&quot;
    }
  ],
  &quot;outbounds&quot;: [
    {
      &quot;protocol&quot;: &quot;vless&quot;,
      &quot;settings&quot;: {
        &quot;vnext&quot;: [
          {
            &quot;address&quot;: &quot;IP_ВАШЕГО_СЕРВЕРА&quot;,
            &quot;port&quot;: 443,
            &quot;users&quot;: [
              {
                &quot;id&quot;: &quot;ВАШ_UUID&quot;,
                &quot;encryption&quot;: &quot;none&quot;,
                &quot;flow&quot;: &quot;xtls-rprx-vision&quot;
              }
            ]
          }
        ]
      },
      &quot;streamSettings&quot;: {
        &quot;network&quot;: &quot;tcp&quot;,
        &quot;security&quot;: &quot;reality&quot;,
        &quot;realitySettings&quot;: {
          &quot;publicKey&quot;: &quot;ВАШ_PUBLIC_KEY&quot;,
          &quot;shortId&quot;: &quot;ВАШ_SHORT_ID&quot;,
          &quot;sni&quot;: &quot;dl.google.com&quot;,
          &quot;fingerprint&quot;: &quot;chrome&quot;
        }
      }
    }
  ]
}

&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;3. Запуск и проверка&lt;br /&gt;Перезапуск: systemctl restart xray&lt;br /&gt;Проверка статуса: systemctl status xray&lt;br /&gt;Проверка работы туннеля через прокси:&lt;br /&gt;curl -x socks5h://127.0.0.1:1080 ifconfig.me&lt;br /&gt;&lt;br /&gt;4. Использование в консоли&lt;br /&gt;Чтобы временные команды в текущей сессии терминала шли через прокси (например, скачивание обучающих материалов через wget), выполните:&lt;br /&gt;export http_proxy=&quot;&lt;a href=&quot;http://127.0.0.1:1081&quot;&gt;http://127.0.0.1:1081&lt;/a&gt;&quot;&lt;br /&gt;export https_proxy=&quot;&lt;a href=&quot;http://127.0.0.1:1081&quot;&gt;http://127.0.0.1:1081&lt;/a&gt;&quot;&lt;br /&gt;Важное уточнение: Для браузера в ZeroOmega теперь указывайте SOCKS5 порт 1080.&lt;br /&gt;&lt;br /&gt;Для корректной работы с государственными и локальными ресурсами на Debian, блок routing на стороне клиента должен принудительно направлять трафик РФ в обход прокси.&lt;br /&gt;Вставьте этот блок в /usr/local/etc/xray/config.json на вашем ПК:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;routing&quot;: {
    &quot;domainStrategy&quot;: &quot;IPOnDemand&quot;,
    &quot;rules&quot;: [
      {
        &quot;type&quot;: &quot;field&quot;,
        &quot;outboundTag&quot;: &quot;direct&quot;,
        &quot;domain&quot;: [
          &quot;geosite:ru&quot;,
          &quot;regexp:.*\\.gov\\.ru$&quot;,
          &quot;regexp:.*\\.nalog\\.ru$&quot;,
          &quot;regexp:.*\\.gosuslugi\\.ru$&quot;
        ]
      },
      {
        &quot;type&quot;: &quot;field&quot;,
        &quot;outboundTag&quot;: &quot;direct&quot;,
        &quot;ip&quot;: [
          &quot;geoip:ru&quot;,
          &quot;geoip:private&quot;
        ]
      },
      {
        &quot;type&quot;: &quot;field&quot;,
        &quot;outboundTag&quot;: &quot;proxy&quot;,
        &quot;network&quot;: &quot;tcp,udp&quot;
      }
    ]
  },
  &quot;outbounds&quot;: [
    {
      &quot;protocol&quot;: &quot;vless&quot;,
      &quot;tag&quot;: &quot;proxy&quot;,
      &quot;settings&quot;: {
        &quot;vnext&quot;: [{
          &quot;address&quot;: &quot;IP_СЕРВЕРА&quot;,
          &quot;port&quot;: 443,
          &quot;users&quot;: [{
            &quot;id&quot;: &quot;UUID&quot;,
            &quot;encryption&quot;: &quot;none&quot;,
            &quot;flow&quot;: &quot;xtls-rprx-vision&quot;
          }]
        }]
      },
      &quot;streamSettings&quot;: {
        &quot;network&quot;: &quot;tcp&quot;,
        &quot;security&quot;: &quot;reality&quot;,
        &quot;realitySettings&quot;: {
          &quot;publicKey&quot;: &quot;PUBLIC_KEY&quot;,
          &quot;shortId&quot;: &quot;SHORT_ID&quot;,
          &quot;sni&quot;: &quot;dl.google.com&quot;,
          &quot;fingerprint&quot;: &quot;chrome&quot;
        }
      }
    },
    {
      &quot;protocol&quot;: &quot;freedom&quot;,
      &quot;tag&quot;: &quot;direct&quot;,
      &quot;settings&quot;: {}
    }
  ]
}

&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Почему это важно для госсайтов:&lt;br /&gt;Геоблокировка: Многие ресурсы (Госуслуги, Налоговая) блокируют доступ с иностранных IP-адресов вашего VPS. Правило geoip:ru решает эту проблему.&lt;br /&gt;Шифрование: Госсайты часто используют специфические сертификаты. Прямое соединение (direct) позволяет избежать ошибок SSL/TLS.&lt;br /&gt;Скорость: Локальные зеркала репозиториев Debian в зоне .ru будут работать на максимальной скорости вашего провайдера.&lt;br /&gt;Важно: Убедитесь, что у вас скачаны файлы баз в /usr/local/share/xray/geoip.dat и geosite.dat (скрипт установки обычно делает это сам).&lt;br /&gt;&lt;br /&gt;Чтобы увидеть, как Xray распределяет трафик в реальном времени, нужно включить логирование. Это позволит вам убедиться, что Госуслуги идут напрямую (direct), а обучающие материалы — через сервер (proxy).&lt;br /&gt;1. Включите логи в конфиге&lt;br /&gt;Добавьте блок log в начало вашего /usr/local/etc/xray/config.json:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;log&quot;: {
    &quot;loglevel&quot;: &quot;info&quot;,
    &quot;access&quot;: &quot;/var/log/xray/access.log&quot;,
    &quot;error&quot;: &quot;/var/log/xray/error.log&quot;
  },
  ...
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;2. Создайте папку для логов и дайте права&lt;br /&gt;Xray должен иметь право писать в этот файл:&lt;br /&gt;bash&lt;br /&gt;sudo mkdir -p /var/log/xray&lt;br /&gt;sudo chown nobody:nogroup /var/log/xray&lt;br /&gt;sudo systemctl restart xray&lt;br /&gt;&lt;br /&gt;3. Проверка в реальном времени (самое интересное)&lt;br /&gt;Запустите мониторинг и попробуйте открыть какой-нибудь сайт:&lt;br /&gt;tail -f /var/log/xray/access.log&lt;br /&gt;Что вы увидите в консоли:&lt;br /&gt;[Info] ... accepted tcp:yandex.ru:443 ... [direct] — значит правило сработало, трафик пошел мимо VPN.&lt;br /&gt;[Info] ... accepted tcp:youtube.com:443 ... [proxy] — трафик успешно ушел в туннель Reality.&lt;br /&gt;&lt;br /&gt;После настройки и проверки рекомендую изменить loglevel обратно на warning, чтобы не забивать диск лишней информацией.&lt;br /&gt;&lt;br /&gt;4. Отладка без файлов&lt;br /&gt;Если не хотите плодить логи на диске, можно просто смотреть вывод службы:&lt;br /&gt;journalctl -u xray -f&lt;br /&gt;&lt;br /&gt;1. Настройка внутри Telegram&lt;br /&gt;Зайдите в приложение и пройдите по пути:&lt;br /&gt;Настройки (Settings) → Продвинутые настройки (Advanced) → Тип соединения (Connection Type).&lt;br /&gt;Выберите Использовать собственный прокси (Use custom proxy).&lt;br /&gt;Нажмите Добавить прокси (Add proxy).&lt;br /&gt;2. Параметры подключения:&lt;br /&gt;Тип: SOCKS5&lt;br /&gt;Хост: 127.0.0.1&lt;br /&gt;Порт: 1080 (тот, что вы указали в inbounds файла config.json).&lt;br /&gt;Логин/Пароль: Оставьте пустыми (мы настроили noauth).&lt;br /&gt;&lt;br /&gt;Полезный лайфхак:&lt;br /&gt;Если вы хотите поделиться доступом с семьей или использовать прокси на другом устройстве в этой же локальной сети, замените в конфиге listen: 127.0.0.1 на listen: 0.0.0.0. Тогда в Telegram на телефоне (подключенном к тому же Wi-Fi) можно будет указать локальный IP вашего компьютера (например, 192.168.1.50).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Лучшие варианты для Android:&lt;br /&gt;v2rayNG (версия 1.8.5+) — Рекомендуемый.&lt;br /&gt;Google Play / GitHub.&lt;br /&gt;Как добавить: Нажмите + -&amp;gt; «Import config from clipboard» (вставьте ту самую длинную ссылку vless://, которую мы составили). Он идеально понимает Reality.&lt;br /&gt;NekoBox — Самый быстрый.&lt;br /&gt;GitHub.&lt;br /&gt;Плюс: Он использует ядро sing-box, которое работает с Reality чуть экономнее для батареи смартфона.&lt;br /&gt;v2flyNG — Тот, на который вы давали ссылку ранее.&lt;br /&gt;Тоже подходит, так как базируется на свежих ядрах, но интерфейс у него чуть более специфический.&lt;br /&gt;&lt;br /&gt;На что нажать в настройках (если вводите вручную):&lt;br /&gt;Если решите не использовать ссылку, а вбивать руками в v2rayNG:&lt;br /&gt;Protocol: VLESS&lt;br /&gt;Flow: xtls-rprx-vision (это критично для маскировки)&lt;br /&gt;Security: reality&lt;br /&gt;SNI: dl.google.com&lt;br /&gt;Fingerprint: chrome&lt;br /&gt;PublicKey: Ваш публичный ключ с сервера.&lt;br /&gt;Маленький совет: В Android-клиентах тоже есть функция «Раздельное туннелирование» (Per-app proxy). Включите её, чтобы через прокси ходили только YouTube и браузер, а банковские приложения и Госуслуги работали напрямую — так они не будут ругаться на &quot;иностранный IP&quot;.&lt;br /&gt;&lt;br /&gt;1. Проверка на сервере (Linux VPS)&lt;br /&gt;Убедитесь, что служба активна и не выдает ошибок:&lt;br /&gt;systemctl status xray&lt;br /&gt;# Если горит зеленым (active), значит ядро запустилось.&lt;br /&gt;# Посмотрите последние 10 строк логов:&lt;br /&gt;journalctl -u xray -n 10&lt;br /&gt;&lt;br /&gt;2. Проверка на Debian (Консоль)&lt;br /&gt;Сначала проверьте, что прокси-порт открыт локально:&lt;br /&gt;ss -tulpn | grep 1080&lt;br /&gt;&lt;br /&gt;Затем проверьте «личность» в сети (включив прокси для команды):&lt;br /&gt;# Должен показать IP вашего сервера:&lt;br /&gt;curl -x socks5h://127.0.0.1:1080 ifconfig.me&lt;br /&gt;&lt;br /&gt;# Должен показать ваш реальный домашний IP (благодаря блоку routing):&lt;br /&gt;curl ifconfig.me&lt;br /&gt;&lt;br /&gt;DNS-тест (Важно!)&lt;br /&gt;Зайдите на dnsleaktest.com и запустите &quot;Standard test&quot;.&lt;br /&gt;Результат: Вы не должны видеть DNS-серверов вашего провайдера. Должны быть только Google, Cloudflare или IP вашего сервера. Это значит, что провайдер не знает, куда вы ходите.&lt;br /&gt;&lt;br /&gt;Что делать, если не работает?&lt;br /&gt;Клиент не подключается: Проверьте, открыт ли порт 443 в фаерволе сервера: ufw allow 443/tcp.&lt;br /&gt;Ошибка TLS: Проверьте, что publicKey в ссылке совпадает с тем, что выдала команда xray x25519 на сервере.&lt;br /&gt;&lt;br /&gt;Генерация данных для Reality:&lt;br /&gt;xray uuid        # Ваш ID (пароль)&lt;br /&gt;xray x25519     # Пара Private/Public ключей&lt;br /&gt;openssl rand -hex 8  # Ваш ShortID&lt;br /&gt;&lt;br /&gt;Файлы конфигурации&lt;br /&gt;Путь: /usr/local/etc/xray/config.json&lt;br /&gt;Логи (если включены): /var/log/xray/access.log&lt;br /&gt;Базы GeoIP/Site: /usr/local/share/xray/&lt;br /&gt;&lt;br /&gt;Шаблон ссылки для импорта&lt;br /&gt;vless://UUID@IP:443?security=reality&amp;sni=dl.google.com&amp;fp=chrome&amp;pbk=PUBLIC_KEY&amp;sid=SHORT_ID&amp;flow=xtls-rprx-vision&amp;type=tcp&amp;encryption=none#Reality-Custom&lt;br /&gt;&lt;br /&gt;Короткое резюме по настройке Reality:&lt;br /&gt;На сервере: Ставим Xray, генерируем xray x25519, прописываем PrivateKey в /usr/local/etc/xray/config.json.&lt;br /&gt;На Debian: Ставим тот же Xray, прописываем PublicKey в исходящие соединения (outbounds).&lt;br /&gt;Маршрутизация: Блок routing с правилами geoip:ru и geosite:ru гарантирует, что госсайты и банки будут видеть ваш настоящий IP.&lt;br /&gt;Telegram: Использует SOCKS5 на 127.0.0.1:1080 (локальный порт вашего Xray)&lt;br /&gt;&lt;br /&gt;Чтобы не потерять плоды долгих настроек при переустановке системы или случайном удалении, используйте эту команду для создания резервной копии.&lt;br /&gt;Команда создаст архив в вашей домашней папке, который будет включать сам конфиг и исполняемый скрипт обновления баз:&lt;br /&gt;tar -cvzf ~/xray_backup_$(date +%F).tar.gz /usr/local/etc/xray/config.json /usr/local/bin/update-v2ray-rules.sh&lt;br /&gt;&lt;br /&gt;Если нужно будет вернуть всё как было на новом сервере/клиенте, просто выполните:&lt;br /&gt;sudo tar -xvzf ~/xray_backup_ДАТА.tar.gz -C /&lt;br /&gt;sudo systemctl restart xray&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=5876790&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/5876790.html</comments>
  <category>vpn</category>
  <category>proxy</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/5876620.html</guid>
  <pubDate>Fri, 30 Jan 2026 20:48:14 GMT</pubDate>
  <title>восстановление и улучшение видеороликов</title>
  <link>https://uzverss.dreamwidth.org/5876620.html</link>
  <description>&lt;br&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/4/44/Real-ESRGAN_logo.png&quot; width=&quot;354&quot;&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;раскрыть тему&lt;/summary&gt;&lt;br /&gt;как с помощью ИИ улучшить качество mp4, есть 5 минутный ролик с музыкой и разрешением 144?&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/xinntao/Real-ESRGAN&quot;&gt;https://github.com/xinntao/Real-ESRGAN&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;sudo apt install -y ffmpeg git python3 python3-venv python3-pip imagemagick&lt;br /&gt;&lt;br /&gt;python3 -m venv venv&lt;br /&gt;source venv/bin/activate&lt;br /&gt;&lt;br /&gt;git clone &lt;a href=&quot;https://github.com/xinntao/Real-ESRGAN.git&quot;&gt;https://github.com/xinntao/Real-ESRGAN.git&lt;/a&gt;&lt;br /&gt;cd Real-ESRGAN      # заходишь в папку с кодом&lt;br /&gt;pip3 install -r requirements.txt&lt;br /&gt;&lt;br /&gt;mkdir -p weights&lt;br /&gt;wget -P weights &lt;a href=&quot;https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-general-wdn-x4v3.pth&quot;&gt;https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-general-wdn-x4v3.pth&lt;/a&gt;&lt;br /&gt;wget -P weights &lt;a href=&quot;https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-general-x4v3.pth&quot;&gt;https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-general-x4v3.pth&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Поэтапный двухэтапный апскейл&lt;/b&gt;&lt;br /&gt;Структура папок&lt;br /&gt;&lt;pre&gt;
~/Real-ESRGAN/
├─ input/           # Исходное видео
│   └─ input.mp4
├─ frames/          # Кадры с исходного видео
├─ upscaled_stage1/ # Кадры после первого апскейла x2
├─ upscaled_stage2/ # Кадры после второго апскейла x2
├─ weights/         # Модели .pth
├─ output/    
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# 1. Разбираем видео на кадры с шумоподавлением&lt;/b&gt;&lt;br /&gt;mkdir -p frames upscaled_stage1 upscaled_stage2 output&lt;br /&gt;ffmpeg -i input/input.mp4 -vf &quot;hqdn3d=1.5:1.5:6:6&quot; -vsync 0 -q:v 1 frames/frame_%06d.jpg&lt;br /&gt;&lt;br /&gt;-vsync 0 → точное количество кадров&lt;br /&gt;-q:v 1 → высокая визуальная точность для JPEG&lt;br /&gt;hqdn3d → слегка сглаживает пиксельные квадраты&lt;br /&gt;frame_%06d.jpg → нумерация кадров с шестью цифрами: frame_000001.jpg, frame_000002.jpg и т.д.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# 2. Первый апскейл x2&lt;/b&gt;&lt;br /&gt;python3 inference_realesrgan.py \&lt;br /&gt;  -n realesr-general-wdn-x4v3 \&lt;br /&gt;  -i frames \&lt;br /&gt;  -o upscaled_stage1 \&lt;br /&gt;  --fp32 \&lt;br /&gt;  --num_processes 8 \&lt;br /&gt;  --outscale 2&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# 3. Второй апскейл x2&lt;/b&gt;&lt;br /&gt;python3 inference_realesrgan.py \&lt;br /&gt;  -n realesr-general-wdn-x4v3 \&lt;br /&gt;  -i upscaled_stage1 \&lt;br /&gt;  -o upscaled_stage2 \&lt;br /&gt;  --fp32 \&lt;br /&gt;  --num_processes 8 \&lt;br /&gt;  --outscale 2&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# 4. Сборка видео с оригинальным звуком и масштабирование до 720p&lt;/b&gt;&lt;br /&gt;ffmpeg -i upscaled_stage2/frame_%06d.jpg -i input/input.mp4 \&lt;br /&gt;-map 0:v -map 1:a \&lt;br /&gt;-vf &quot;scale=1280:720:flags=lanczos&quot; \&lt;br /&gt;-c:v libx264 -preset slow -crf 18 \&lt;br /&gt;output/final_720p.mp4&lt;br /&gt;&lt;br /&gt;scale=1280:720:flags=lanczos → аккуратное масштабирование&lt;br /&gt;Сохраняется оригинальный звук&lt;br /&gt;CRF 18 → хорошее качество&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# 5. (Опционально) Лёгкое пост-шарпирование&lt;/b&gt;&lt;br /&gt;ffmpeg -i output/final_720p.mp4 -vf &quot;unsharp=5:5:0.5&quot; output/final_720p_sharp.mp4&lt;br /&gt;&lt;br /&gt;&lt;b&gt;# 6. Очистка временных файлов&lt;/b&gt;&lt;br /&gt;rm -rf frames upscaled_stage1 upscaled_stage2&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Разбор по шагам:&lt;/b&gt;&lt;br /&gt;--fp32  → стабильность на CPU&lt;br /&gt;--num_processes 8  → Использует все потоки i5 (8) для ускорения&lt;br /&gt;Время для 5 минут видео: ~1.5–3 часа на твоём CPU&lt;br /&gt;&lt;br /&gt;-i upscaled_stage2/frame_%06d.jpg → кадры после апскейла&lt;br /&gt;-i input/input.mp4 → исходное видео с аудио&lt;br /&gt;-map 0:v → берём видео из первой части (кадры)&lt;br /&gt;-map 1:a → берём аудио из исходного видео&lt;br /&gt;⚡ Почему звук синхронизирован:&lt;br /&gt;FFmpeg автоматически подстраивает аудио под количество видеофреймов.&lt;br /&gt;-vsync 0 на этапе разбора кадров гарантирует, что каждый кадр соответствует исходной длительности.&lt;br /&gt;&lt;br /&gt;Формат и кодек видео&lt;br /&gt;Для Real‑ESRGAN нет строгих требований к формату, главное:&lt;br /&gt;Любой контейнер: .mp4, .mkv, .mov&lt;br /&gt;Кодек: H.264 (libx264) или H.265 (libx265) подходят&lt;br /&gt;Разрешение: любое, у тебя 144p → ок, просто пиксели будут крупные&lt;br /&gt;Фреймрейт: любой, Real‑ESRGAN сохранит оригинальный&lt;br /&gt;Пример mp4 с H.264:&lt;br /&gt;ffmpeg -i input.mp4 -c:v libx264 -crf 20 -preset fast input_for_esr.mp4&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Маленькие хитрости для лучшего вида&lt;/b&gt;&lt;br /&gt;Какие настройки лучше для 144p&lt;br /&gt;Scale x4 — оптимум&lt;br /&gt;Не делай x8 — будет пластик&lt;br /&gt;Лучше:&lt;br /&gt;144p → ~576p (x4)&lt;br /&gt;потом обычный апскейл до 720p/1080p&lt;br /&gt;&lt;br /&gt;✔ Перед апскейлом можно:&lt;br /&gt;ffmpeg -i input.mp4 -vf &quot;hqdn3d&quot; denoise.mp4&lt;br /&gt;✔ После — лёгкое зерно:&lt;br /&gt;-vf &quot;noise=alls=5:allf=t&quot;&lt;br /&gt;Если результат «мыльный»&lt;br /&gt;После сборки можно слегка подшарпить:&lt;br /&gt;ffmpeg -i output_720p.mp4 -vf &quot;unsharp=5:5:0.8&quot; final.mp4&lt;br /&gt;Если видео сильно пиксельное, можно попробовать hqdn3d=1:1:3:3 на первом шаге — квадраты будут ещё меньше, но детали чуть мягче.&lt;br /&gt;&lt;br /&gt;Мягкое шумоподавление перед апскейлом&lt;br /&gt;Вместо сильного hqdn3d=1.5:1.5:6:6 можно попробовать мягкий вариант, чтобы не терять детали:&lt;br /&gt;-vf &quot;hqdn3d=1:1:3:3&quot;&lt;br /&gt;Идеально для 144p → квадраты сглаживаются, но текстура остаётся.&lt;br /&gt;&lt;br /&gt;Используй WDN-модель для CPU&lt;br /&gt;realesr-general-wdn-x4v3.pth → мягче сглаживает артефакты.&lt;br /&gt;На шумных видео квадраты меньше, чем у обычной realesr-general-x4v3.pth.&lt;br /&gt;💡 Для более «чистого» результата можно экспериментировать с --outscale (x2, x3).&lt;br /&gt;&lt;br /&gt;Пост-шарпирование после сборки видео&lt;br /&gt;Лёгкий unsharp возвращает детали без добавления квадратиков:&lt;br /&gt;ffmpeg -i output/final_720p.mp4 -vf &quot;unsharp=5:5:0.5&quot; output/final_720p_sharp.mp4&lt;br /&gt;Можно менять параметры: 5:5:0.5 → горизонтальное/вертикальное ядро и сила резкости.&lt;br /&gt;&lt;br /&gt;Сохранение FPS и синхронизация аудио&lt;br /&gt;Используем -vsync 0 при разборе кадров:&lt;br /&gt;ffmpeg -i input.mp4 -vsync 0 frames/frame_%06d.jpg&lt;br /&gt;Сохраняет точное количество кадров → звук не отстаёт при сборке.&lt;br /&gt;&lt;br /&gt;Можно временно уменьшить качество JPEG для промежуточных кадров, чтобы не перегружать диск:&lt;br /&gt;-q:v 2  # чуть меньше качества, но быстрее&lt;br /&gt;После апскейла результат всё равно будет высоким.&lt;br /&gt;&lt;br /&gt;Настройка финального масштабирования&lt;br /&gt;Вместо bilinear используем Lanczos для резкости:&lt;br /&gt;-vf &quot;scale=1280:720:flags=lanczos&quot;&lt;br /&gt;Альтернатива bicubic — чуть мягче, но квадраты почти исчезают.&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=5876620&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/5876620.html</comments>
  <category>ии</category>
  <category>video</category>
  <category>ffmpeg</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/5876208.html</guid>
  <pubDate>Fri, 30 Jan 2026 20:35:30 GMT</pubDate>
  <title>Бесплатный VPN сервер, клиент, и тд. часть 2</title>
  <link>https://uzverss.dreamwidth.org/5876208.html</link>
  <description>&lt;br&gt;&lt;a href=&quot;https://openvpn.net/&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://img3.festima.ru/1/NzEu7PUJ8UdQBNbl&quot; width=&quot;360&quot;&gt;&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/58907.html&quot;&gt;Бесплатный VPN сервер, клиент, и тд. часть 1 LJ&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5814634.html&quot;&gt;Бесплатный VPN сервер, клиент, и тд. часть 1 DW&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/115863.html&quot;&gt;Бесплатный VPN сервер, клиент, и тд. часть 3 LJ&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5867792.html&quot;&gt;Бесплатный VPN сервер, клиент, и тд. часть 3 DW&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;proxy&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5812099.html&quot;&gt;список доступных криптографических инструментов и децентрализованных сервисов.&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://proxy-list.org/russian/index.php&quot;&gt;Статистика доступных прокси серверов&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ipspeed.info/ru/free-proxy.php&quot;&gt;Список бесплатных прокси&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://hackware.ru/?p=16271&quot;&gt;Атаки на прокси-сервер&lt;/a&gt;&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/post/582906/&quot;&gt;Единая точка выхода в web, I2P, TOR и обход блокировок&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://archive.fo/ux1qC&quot;&gt;https://archive.fo/ux1qC&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/oxyd76/tinyxit&quot;&gt;https://github.com/oxyd76/tinyxit&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://dev.m1089.ru/fproxy&quot;&gt;https://dev.m1089.ru/fproxy&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://mitmproxy.org/&quot;&gt;https://mitmproxy.org/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/SenseUnit/dumbproxy&quot;&gt;https://github.com/SenseUnit/dumbproxy&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;tinyproxy&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://linuxhint.com/install-tinyproxy-linux/&quot;&gt;Как установить и настроить TinyProxy на вашем Linux-сервере&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://tinyproxy.github.io/&quot;&gt;http://tinyproxy.github.io/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/tinyproxy/tinyproxy&quot;&gt;https://github.com/tinyproxy/tinyproxy&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;3proxy&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://3proxy.ru/documents/&quot;&gt;https://3proxy.ru/documents/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/3proxy/3proxy&quot;&gt;https://github.com/3proxy/3proxy&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://hackware.ru/?p=9016#34&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;Перенаправление через 3proxy&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5874576.html&quot;&gt;настройка 3proxy на debian12&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;tun2socks&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/xjasonlyu/tun2socks&quot;&gt;https://github.com/xjasonlyu/tun2socks&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://hub.docker.com/r/xjasonlyu/tun2socks/&quot;&gt;https://hub.docker.com/r/xjasonlyu/tun2socks/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://aur.archlinux.org/packages/tun2socks&quot;&gt;https://aur.archlinux.org/packages/tun2socks&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/584162/&quot;&gt;Tun2Socks: прокси-сервер в качестве шлюза, или VPN через прокси&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/767458/&quot;&gt;Поднимаем на OpenWrt клиент прокси VLESS, Shadowsocks, Shadowsocks2022. Настройка sing-box и tun2socks&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/1020866/&quot;&gt;Прозрачный VPN на роутере: VLESS + Reality + TPROXY на OpenWrt от А до Я&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;tholian stealth proxy&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/tholian-network/stealth&quot;&gt;https://github.com/tholian-network/stealth&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.free.stealthvpn&amp;hl=ru&quot;&gt;https://play.google.com/store/apps/details?id=com.free.stealthvpn&amp;hl=ru&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Shadowsocks&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/shadowsocks&quot;&gt;https://github.com/shadowsocks&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://shadowsocks.org/en/download/clients.html&quot;&gt;https://shadowsocks.org/en/download/clients.html&lt;/a&gt;&lt;br /&gt;pip install shadowsocks&lt;br /&gt;&lt;a href=&quot;https://github.com/shadowsocks/shadowsocks-libev&quot;&gt;https://github.com/shadowsocks/shadowsocks-libev&lt;/a&gt;&lt;br /&gt;sudo apt install shadowsocks-libev&lt;br /&gt;&lt;a href=&quot;https://github.com/shadowsocks/shadowsocks-libev/blob/master/docker/alpine/README.md&quot;&gt;https://github.com/shadowsocks/shadowsocks-libev/blob/master/docker/alpine/README.md&lt;/a&gt;&lt;br /&gt;docker pull shadowsocks/shadowsocks-libev&lt;br /&gt;docker run -p 8388:8388 -p 8388:8388/udp -d --restart always shadowsocks/shadowsocks-libev:latest&lt;br /&gt;&lt;br /&gt;Shadowsocks&lt;br /&gt;&lt;a href=&quot;https://github.com/shadowsocks/shadowsocks-android&quot;&gt;https://github.com/shadowsocks/shadowsocks-android&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.github.shadowsocks&amp;hl=ru&quot;&gt;https://play.google.com/store/apps/details?id=com.github.shadowsocks&amp;hl=ru&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.v2fly.org/en_US/v5/config/proxy/shadowsocks2022.html&quot;&gt;https://www.v2fly.org/en_US/v5/config/proxy/shadowsocks2022.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://getoutline.org/&quot;&gt;https://getoutline.org/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/Jigsaw-Code/?q=outline&quot;&gt;https://github.com/Jigsaw-Code/?q=outline&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/Jigsaw-Code/outline-server&quot;&gt;https://github.com/Jigsaw-Code/outline-server&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/Jigsaw-Code/outline-ss-server&quot;&gt;https://github.com/Jigsaw-Code/outline-ss-server&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Jigsaw-Code/outline-server/master/src/server_manager/install_scripts/install_server.sh&quot;&gt;https://raw.githubusercontent.com/Jigsaw-Code/outline-server/master/src/server_manager/install_scripts/install_server.sh&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://pikabu.ru/story/kak_sozdat_svoy_lichnyiy_vpn_server_outline_11650551&quot;&gt;Как создать свой личный VPN сервер Outline⁠⁠&lt;/a&gt;&lt;br /&gt;Криптовалюты — быстрый старт. Outline на европейском сервере за крипту. Свой аналог VPN.&lt;br /&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=L-vmufI0uP8&quot;&gt;https://www.youtube.com/watch?v=L-vmufI0uP8&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ключи доступа&lt;br /&gt;&lt;a href=&quot;https://t.me/free1ss&quot;&gt;https://t.me/free1ss&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://getoutline.net/access-keys/&quot;&gt;https://getoutline.net/access-keys/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://getoutline.me/access-keys/&quot;&gt;https://getoutline.me/access-keys/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/tsunamaru/ss2ch/wiki&quot;&gt;https://github.com/tsunamaru/ss2ch/wiki&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/StreisandEffect/streisand&quot;&gt;https://github.com/StreisandEffect/streisand&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.v2ray.com/ru/&quot;&gt;https://www.v2ray.com/ru/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/shadowsocks/shadowsocks-windows/releases&quot;&gt;https://github.com/shadowsocks/shadowsocks-windows/releases&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/cbeuw/GoQuiet&quot;&gt;https://github.com/cbeuw/GoQuiet&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/tsunamaru/riga-src/blob/master/services/shadowsocks-libev-goquet.service&quot;&gt;https://github.com/tsunamaru/riga-src/blob/master/services/shadowsocks-libev-goquet.service&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/tsunamaru/riga-src/blob/master/cfg/config-goquiet.json&quot;&gt;https://github.com/tsunamaru/riga-src/blob/master/cfg/config-goquiet.json&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/cbeuw/GoQuiet-android&quot;&gt;https://github.com/cbeuw/GoQuiet-android&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://justpaste.it/4tjdx&quot;&gt;https://justpaste.it/4tjdx&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://telegra.ph/shadowsocks-over-cloudflare-05-17&quot;&gt;https://telegra.ph/shadowsocks-over-cloudflare-05-17&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://justpaste.it/3mm70&quot;&gt;https://justpaste.it/3mm70&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://pastebin.com/mUYUp47q&quot;&gt;паста с двача&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://2ch.hk/s/arch/2019-08-23/res/2593544.html&quot;&gt;архивный тред с двача&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/post/358126/&quot;&gt;Коротко о Shadowsocks, или OpenVPN не нужен (в каждом доме)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://blog.wtigga.com/shadowsocks/&quot;&gt;Shadowsocks: свой VPN за пять минут&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://glashkoff.com/shadowsocks/&quot;&gt;Как настроить Shadowsocks (альтернатива VPN)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://ekhlakov.blogspot.com/2018/12/shadowsocks-centos-7.html&quot;&gt;Shadowsocks на CentOS 7&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://overclockers.ru/blog/Indigo81/show/31739/shadowsocks-cherez-cloudflare-cdn-povyshaem-bezopasnost-v-seti&quot;&gt;Настройка Shadowsocks через Cloudflare CDN&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/770400/&quot;&gt;FAQ по Shadowsocks/XRay/XTLS/Reality/Nekobox/etc. для обхода блокировок&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/555768/&quot;&gt;Личный сервер shadowsocks за 10 минут без затрат&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/556464/&quot;&gt;Личный сервер shadowsocks за 10 минут без затрат (часть 2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/687512/&quot;&gt;Личный сервер shadowsocks за 10 минут без затрат (часть 3)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/760066/&quot;&gt;Проксируем OpenVPN через Shadowsocks или чиним OpenVPN во время блокировок&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://krasovs.ky/2022/03/08/shadowsocks-and-cloak.html&quot;&gt;Обход блокировок с помощью Shadowsocks + Cloak&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/122254.html&quot;&gt;настройка shadowsocks на debian12&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/735536/&quot;&gt;3X-UI: Shadowsocks-2022 &amp; XRay (XTLS) сервер с простой настройкой и приятным интерфейсом&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://itstar.space/it/hiddify-prostoj-i-slozhnyj-vpn/&quot;&gt;Hiddify — простой и сложный VPN&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://hiddify.com/&quot;&gt;https://hiddify.com/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/hiddify/hiddify-next&quot;&gt;https://github.com/hiddify/hiddify-next&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://sing-box.sagernet.org/&quot;&gt;https://sing-box.sagernet.org/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/SagerNet/sing-box&quot;&gt;https://github.com/SagerNet/sing-box&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://f-droid.org/ru/packages/io.nekohasekai.sfa/&quot;&gt;https://f-droid.org/ru/packages/io.nekohasekai.sfa/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://web.archive.org/web/20241003104526/https://habr.com/ru/articles/756178/&quot;&gt;Обход блокировок на OpenWRT с помощью Sing-box (vless, vmess, trojan, ss2022) и баз GeoIP, Geosite&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;sing-box&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://sing-box.sagernet.org/&quot;&gt;https://sing-box.sagernet.org/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/SagerNet/sing-box&quot;&gt;https://github.com/SagerNet/sing-box&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/SagerNet/sing-box/releases&quot;&gt;https://github.com/SagerNet/sing-box/releases&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/SagerNet/sing-box/tree/dev-next/docs/configuration&quot;&gt;https://github.com/SagerNet/sing-box/tree/dev-next/docs/configuration&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://pkgs.alpinelinux.org/package/edge/community/x86_64/sing-box&quot;&gt;https://pkgs.alpinelinux.org/package/edge/community/x86_64/sing-box&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://hub.docker.com/search?q=sing-box&quot;&gt;https://hub.docker.com/search?q=sing-box&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://hub.docker.com/search?q=singbox&quot;&gt;https://hub.docker.com/search?q=singbox&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/MatsuriDayo/NekoBoxForAndroid&quot;&gt;https://github.com/MatsuriDayo/NekoBoxForAndroid&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/A-Zuro/Secret-Sing-Box&quot;&gt;https://github.com/A-Zuro/Secret-Sing-Box&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://sing-box.sagernet.org/configuration/dns/&quot;&gt;https://sing-box.sagernet.org/configuration/dns/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://vpnrouter.homes/singbox-dns/&quot;&gt;https://vpnrouter.homes/singbox-dns/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/1018964/&quot;&gt;Знакомство с sing-box&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/756178/&quot;&gt;Обход блокировок на OpenWRT с помощью Sing-box (vless, vmess, trojan, ss2022) и баз GeoIP, Geosite&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/767458/&quot;&gt;Поднимаем на OpenWrt клиент прокси VLESS, Shadowsocks, Shadowsocks2022. Настройка sing-box и tun2socks&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://adminkin.pro/obhod-blokirovok-runeta-narabotki-kitajcev-domohozyajke-na-zametku/&quot;&gt;Обход блокировок Рунета. Наработки китайцев домохозяйке на заметку&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/977950/&quot;&gt;Настройка sing-box и Momo (TPROXY) на OpenWrt: быстрый и точный обход блокировок&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://krasovs.ky/2024/08/05/sing-box-bypass.html&quot;&gt;Конфиг для выборочного обхода блокировок на базе sing-box&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.jamesflare.com/vless-tcp-reality-xtls-utls-xudp/&quot;&gt;Настройка протокола VLESS с расширенными функциями в Sing-Box.&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.okaa.io/2025/05/24/singbox自用完美配置文件/&quot;&gt;Идеальный конфигурационный файл SingBox (для личного использования)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/1024990/&quot;&gt;NaïveProxy в sing-box (альтернатива VLESS)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://xiaoxi404.com/post/2025/05/11/singbox-transparent-proxy/&quot;&gt;Настройте прозрачный прокси-сервер с помощью sing-box.&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://seewhy.me/posts/home-server&quot;&gt;https://seewhy.me/posts/home-server&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://wiki.rtzra.ru/software/sing-box/sing-box-config&quot;&gt;Sing-box: пример конфига&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/vulpeace/roscomcircum&quot;&gt;https://github.com/vulpeace/roscomcircum&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=io.nekohasekai.sfa&amp;hl=ru&quot;&gt;https://play.google.com/store/apps/details?id=io.nekohasekai.sfa&amp;hl=ru&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/hiddify/hiddify-next&quot;&gt;https://github.com/hiddify/hiddify-next&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/hiddify/hiddify-app&quot;&gt;https://github.com/hiddify/hiddify-app&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;VLESS Xray&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/XTLS&quot;&gt;https://github.com/XTLS&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/v2ray/v2ray-core&quot;&gt;https://github.com/v2ray/v2ray-core&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/XTLS/Xray-core&quot;&gt;https://github.com/XTLS/Xray-core&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh&quot;&gt;https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.v2ray.com/ru/awesome/tools.html&quot;&gt;https://www.v2ray.com/ru/awesome/tools.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/XTLS/Xray-examples&quot;&gt;https://github.com/XTLS/Xray-examples&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;https://github.com/Dreamacro/clash&quot;&gt;https://github.com/Dreamacro/clash&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/MetaCubeX/Clash.Meta&quot;&gt;https://github.com/MetaCubeX/Clash.Meta&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/kort0881/vpn-vless-configs-russia&quot;&gt;https://github.com/kort0881/vpn-vless-configs-russia&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://gist.github.com/kksudo/9e2072b3c60a72040f4e9d6fb9da7e9c&quot;&gt;Инструкция по настройке VPN (3X-UI / XRay)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/XTLS/Xray-core/discussions/3518&quot;&gt;Настройка VLESS + TCP + REALITY + VISION + uTLS&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/770400/&quot;&gt;FAQ по Shadowsocks/XRay/XTLS/Reality/Nekobox/etc. для обхода блокировок&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/774838/&quot;&gt;XRay (с VLESS/XTLS): проброс портов, реверс-прокси, и псевдо-VPN&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/869340/&quot;&gt;Установка и настройка VPN с VLESS и Reality&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/855754/&quot;&gt;Используем Xray как VPN&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://dtf.ru/howto/2941355-obhod-blokirovki-yutub-s-polnoi-maskirovkoi-nastraivaem-server-i-klient-xray-s-xtls-reality&quot;&gt;обход блокировки Ютуб с полной маскировкой: настраиваем сервер и клиент XRay с XTLS-Reality&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/757694/&quot;&gt;Установка и настройка XRay на OpenWRT (для Shadowsocks, XTLS-Reality и всего-всего-всего)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/728836/&quot;&gt;Обход блокировок: настройка сервера XRay для Shadowsocks-2022 и VLESS с XTLS-Vision, Websockets и фейковым веб-сайтом&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/727868/&quot;&gt;Современные технологии обхода блокировок: V2Ray, XRay, XTLS, Hysteria, Cloak и все-все-все&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/728696/&quot;&gt;Программы-клиенты для протоколов недетектируемого обхода блокировок сайтов: V2Ray/XRay, Clash, Sing-Box, и другие&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/2dust/v2rayN&quot;&gt;https://github.com/2dust/v2rayN&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/InvisibleManVPN/InvisibleMan-XRayClient&quot;&gt;https://github.com/InvisibleManVPN/InvisibleMan-XRayClient&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/yanue/V2rayU/tree/master&quot;&gt;https://github.com/yanue/V2rayU/tree/master&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/Shadowsocks-NET/Qv2ray&quot;&gt;https://github.com/Shadowsocks-NET/Qv2ray&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/Fndroid/clash_for_windows_pkg&quot;&gt;https://github.com/Fndroid/clash_for_windows_pkg&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;https://github.com/zzzgydi/clash-verge&quot;&gt;https://github.com/zzzgydi/clash-verge&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;https://github.com/MatsuriDayo/nekoray&quot;&gt;https://github.com/MatsuriDayo/nekoray&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/MatsuriDayo/nekoray/releases&quot;&gt;https://github.com/MatsuriDayo/nekoray/releases&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/aaaamirabbas/nekoray-macos/releases&quot;&gt;https://github.com/aaaamirabbas/nekoray-macos/releases&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;https://github.com/hiddify/hiddify-next&quot;&gt;https://github.com/hiddify/hiddify-next&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OpenWRT&lt;br /&gt;&lt;a href=&quot;https://openwrt.org/packages/pkgdata/xray-core&quot;&gt;https://openwrt.org/packages/pkgdata/xray-core&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/yichya/luci-app-xray&quot;&gt;https://github.com/yichya/luci-app-xray&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/xiaorouji/openwrt-passwall&quot;&gt;https://github.com/xiaorouji/openwrt-passwall&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Android&lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.v2ray.ang&amp;hl=en_US&quot;&gt;https://play.google.com/store/apps/details?id=com.v2ray.ang&amp;hl=en_US&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/2dust/v2rayNG&quot;&gt;https://github.com/2dust/v2rayNG&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/MetaCubeX/ClashMetaForAndroid&quot;&gt;https://github.com/MetaCubeX/ClashMetaForAndroid&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;https://f-droid.org/packages/com.github.metacubex.clash.meta/&quot;&gt;https://f-droid.org/packages/com.github.metacubex.clash.meta/&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://sagernet.org/&quot;&gt;https://sagernet.org/&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;https://github.com/SagerNet/SagerNet&quot;&gt;https://github.com/SagerNet/SagerNet&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=moe.matsuri.lite&quot;&gt;https://play.google.com/store/apps/details?id=moe.matsuri.lite&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/MatsuriDayo/Matsuri&quot;&gt;https://github.com/MatsuriDayo/Matsuri&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=moe.nb4a&quot;&gt;https://play.google.com/store/apps/details?id=moe.nb4a&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/MatsuriDayo/NekoBoxForAndroid/releases&quot;&gt;https://github.com/MatsuriDayo/NekoBoxForAndroid/releases&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/dyhkwong/Exclave&quot;&gt;https://github.com/dyhkwong/Exclave&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/hiddify/hiddify-next&quot;&gt;https://github.com/hiddify/hiddify-next&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;iOS&lt;br /&gt;&lt;a href=&quot;https://apps.apple.com/us/app/i2ray/id1445270056&quot;&gt;https://apps.apple.com/us/app/i2ray/id1445270056&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;https://apps.apple.com/us/app/shadowrocket/id932747118&quot;&gt;https://apps.apple.com/us/app/shadowrocket/id932747118&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;https://apps.apple.com/us/app/stash-rule-based-proxy/id1596063349&quot;&gt;https://apps.apple.com/us/app/stash-rule-based-proxy/id1596063349&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://apps.apple.com/us/app/pharos-pro/id1456610173&quot;&gt;https://apps.apple.com/us/app/pharos-pro/id1456610173&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://apps.apple.com/us/app/v2box-v2ray-client/id6446814690&quot;&gt;https://apps.apple.com/us/app/v2box-v2ray-client/id6446814690&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://apps.apple.com/us/app/streisand/id6450534064?platform=iphone&quot;&gt;https://apps.apple.com/us/app/streisand/id6450534064?platform=iphone&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;proxychains-ng&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/rofl0r/proxychains-ng&quot;&gt;https://github.com/rofl0r/proxychains-ng&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://kali.tools/?p=2075&quot;&gt;ProxyChains-NG&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://proxy-seller.io/blog/kak_nastroit_proksi_v_proxychains_na_linux/&quot;&gt;Как настроить прокси в ProxyChains на Linux&lt;/a&gt;&lt;br /&gt;$ sudo -e /etc/proxychains.conf&lt;br /&gt;# находим &lt;br /&gt;[ProxyList]&lt;br /&gt;# записываем что-то вроде&lt;br /&gt;socks5 X.X.X.X 1080 proxy_user proxy_pass&lt;br /&gt;&lt;br /&gt;proxychains -q curl -s &lt;a href=&quot;https://ipinfo.io&quot;&gt;https://ipinfo.io&lt;/a&gt;&lt;br /&gt;proxychains -q chromium --incognito &lt;a href=&quot;https://2ip.ru&quot;&gt;https://2ip.ru&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://askubuntu.com/questions/532375/launch-program-through-shadowsocks&quot;&gt;запустить программу через shadowsocks&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/shadowsocks/shadowsocks/wiki/Using-Shadowsocks-with-Command-Line-Tools&quot;&gt;https://github.com/shadowsocks/shadowsocks/wiki/Using-Shadowsocks-with-Command-Line-Tools&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;hysteria&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://v2.hysteria.network/&quot;&gt;https://v2.hysteria.network/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/apernet/hysteria&quot;&gt;https://github.com/apernet/hysteria&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://v2.hysteria.network/docs/advanced/Full-Server-Config/&quot;&gt;https://v2.hysteria.network/docs/advanced/Full-Server-Config/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://sing-box.sagernet.org/manual/proxy-protocol/hysteria2/&quot;&gt;https://sing-box.sagernet.org/manual/proxy-protocol/hysteria2/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://sing-box.sagernet.org/configuration/inbound/hysteria2/&quot;&gt;https://sing-box.sagernet.org/configuration/inbound/hysteria2/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://nickelface.notion.site/Samba-239dffd18f128092aa99cb679ad60567&quot;&gt;Развёртывание Samba-сервера за рубежом и защита от ограничений&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/YukiKras/wiki/blob/main/hysteria2-install.md&quot;&gt;Создание личного прокси за несколько минут&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/776402/&quot;&gt;Установка и настройка Hysteria&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://hub.xeovo.com/posts/115-hysteria-20-launch-new-way-to-bypass-censorship&quot;&gt;Hysteria 2.0 launch. New way to bypass censorship.&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;NaïveProxy&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/klzgrad/naiveproxy&quot;&gt;https://github.com/klzgrad/naiveproxy&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/klzgrad/forwardproxy&quot;&gt;https://github.com/klzgrad/forwardproxy&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/ZonD80/naivetools&quot;&gt;https://github.com/ZonD80/naivetools&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Настройка сервера&lt;/summary&gt;&lt;br /&gt;1. Создайте Docker Compose файлСоздайте на VPS директорию naive и внутри нее файл docker-compose.yml&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
services:
  caddy:
    image: ghcr.io/mlohr/caddy-forwardproxy:2.8-alpine
    container_name: caddy-naive
    restart: always
    ports:
      - &quot;80:80&quot;
      - &quot;443:443&quot;
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config

volumes:
  caddy_data:
  caddy_config:
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;2. Создайте конфигурацию Caddyfile&lt;br /&gt;В той же директории создайте файл Caddyfile. Замените данные в угловых скобках на свои:&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
Ваш_домен.com {
    # Маршрут для NaïveProxy
    forward_proxy {
        basic_auth ваш_логин ваш_пароль
        hide_ip
        hide_via
        probe_resistance
    }

    # Сайт-заглушка для цензоров (показывает обычную страницу при проверке)
    reverse_proxy https://debian.org {
        header_up Host {upstream_host_header}
    }
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;3. Запустите сервер&lt;br /&gt;docker compose up -d&lt;br /&gt;&lt;br /&gt;Caddy автоматически выпустит бесплатный SSL-сертификат от Let&apos;s Encrypt.&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Настройка клиента&lt;/summary&gt;&lt;br /&gt;1. Скачайте и распакуйте клиент&lt;br /&gt;&lt;a href=&quot;https://github.com/klzgrad/naiveproxy/releases/&quot;&gt;https://github.com/klzgrad/naiveproxy/releases/&lt;/a&gt;&lt;br /&gt;tar -xf naiveproxy-*-linux-x64.tar.xz&lt;br /&gt;cd naiveproxy-*-linux-x64&lt;br /&gt;&lt;br /&gt;2. Создайте конфигурационный файл config.json&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;listen&quot;: &quot;socks://127.0.0.1:1080&quot;,
  &quot;proxy&quot;: &quot;https://ваш_логин:ваш_пароль@Ваш_домен.com&quot;
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;3. Запустите клиент&lt;br /&gt;Теперь на вашем локальном компьютере поднята SOCKS5-прокси на порту 1080&lt;br /&gt;google-chrome --proxy-server=&quot;socks5://127.0.0.1:1080&quot;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/1024990/&quot;&gt;NaïveProxy в sing-box (альтернатива VLESS)&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Cloak&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/cbeuw/Cloak&quot;&gt;https://github.com/cbeuw/Cloak&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/cbeuw/Cloak-android&quot;&gt;https://github.com/cbeuw/Cloak-android&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/758570/&quot;&gt;Проксируем OpenVPN с помощью Cloak&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Squid&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;http://www.squid-cache.org/&quot;&gt;http://www.squid-cache.org/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ru.bmstu.wiki/Squid&quot;&gt;https://ru.bmstu.wiki/Squid&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://wiki.rsu.edu.ru/index.php/Настройка_proxy-сервера&quot;&gt;Настройка proxy-сервера&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://xgu.ru/wiki/Squid,_Kerberos_и_LDAP&quot;&gt;Squid, Kerberos и LDAP&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://yu-xuan.livejournal.com/13771.html&quot;&gt;Настройка squid с авторизацией в AD&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://interface31.ru/tech_it/2014/02/ubuntu-server-nastraivaem-router-nat-dhcp-squid3.html&quot;&gt;Ubuntu Server. Настраиваем роутер NAT + DHCP + Squid3&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://interface31.ru/tech_it/2015/06/nastraivaem-squid-dlya-raboty-s-active-directory-chast-1-bazovye-nastroyki.html&quot;&gt;Настраиваем Squid для работы с Active Directory. Часть 1 - базовые настройки&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://interface31.ru/tech_it/2015/06/nastraivaem-squid-dlya-raboty-s-active-directory-chast-2-kerberos-autentifikaciya.html&quot;&gt;Настраиваем Squid для работы с Active Directory. Часть 2 - Kerberos-аутентификация&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://interface31.ru/tech_it/2015/07/nastraivaem-squid-dlya-raboty-s-active-directory-chast-3-avtorizaciya-na-osnove-grupp-ad.html&quot;&gt;Настраиваем Squid для работы с Active Directory. Часть 3 - Авторизация на основе групп AD&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habrahabr.ru/post/267851/&quot;&gt;«Прозрачный» Squid с фильтрацией HTTPS ресурсов без подмены сертификатов (x86)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/109496.html&quot;&gt;установка squid с доступом по группам в AD, squidGuard, lighttpd+lightsquid, sams2 в centos часть 1&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/114063.html&quot;&gt;установка squid с доступом по группам в AD, squidGuard, lighttpd+lightsquid, sams2 в centos часть2&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;GOST&lt;/summary&gt;&lt;br /&gt;Github v3:  &lt;a href=&quot;https://github.com/go-gost/gost/&quot;&gt;https://github.com/go-gost/gost/&lt;/a&gt;&lt;br /&gt;Сайт с документацией v3: &lt;a href=&quot;https://gost.run/&quot;&gt;https://gost.run/&lt;/a&gt;&lt;br /&gt;Релизы для скачивания v3: &lt;a href=&quot;https://github.com/go-gost/gost/releases&quot;&gt;https://github.com/go-gost/gost/releases&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://archive.fo/RC4zj&quot;&gt;&lt;b&gt;GOST: швейцарский нож для туннелирования и обхода блокировок&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;прокси через gRPC&lt;br /&gt;// на сервере&lt;br /&gt;gost -L &quot;relay+grpc://:443?path=/Haha/MySecretTun&quot;&lt;br /&gt;// на клиенте&lt;br /&gt;gost -L &lt;a href=&quot;http://:8080&quot;&gt;http://:8080&lt;/a&gt; -L socks5://:1080 -F &quot;relay+grpc://SERVER_ADDR:443?path=/Haha/MySecretTun&quot;&lt;br /&gt;&lt;br /&gt;vpn&lt;br /&gt;// на сервере:&lt;br /&gt;gost -L tun://:5555?net=192.168.123.1/24  -L relay+tls://:443?bind=true&lt;br /&gt;// на клиенте:&lt;br /&gt;gost -L tun://:0/:5555?net=192.168.1.2/24 -F relay+tls://SERVER_ADDR:443&lt;br /&gt;&lt;br /&gt;Полноценный VPN поверх вебсокетов, в том числе с возможностью работать через CDN,&lt;br /&gt;// на сервере:&lt;br /&gt;gost -L tun://:8421?net=192.168.123.1/24 -L &quot;relay+wss://:443?bind=true&amp;?path=/secretpath&quot;&lt;br /&gt;// на клиенте:&lt;br /&gt;gost -L tun://:0/:8421?net=192.168.123.2/24 -F &quot;relay+wss://SERVER_IP:443?path=/secretpath&quot;&lt;br /&gt;&lt;br /&gt;docker связь с Yggdrasill&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
docker run -d --name proxy-ygg --restart always -p [ВНУТРЕННИЙ_IPv6_АДРЕС_VPS]:1080:1080 gogost/gost -L=socks5://ваш_логин:ваш_пароль@:1080
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;chisel&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/jpillora/chisel&quot;&gt;https://github.com/jpillora/chisel&lt;/a&gt;&lt;br /&gt;go install github.com/jpillora/chisel@latest&lt;br /&gt;docker run --rm -it jpillora/chisel --help&lt;br /&gt;&lt;a href=&quot;https://github.com/jpillora/chisel/blob/master/example/users.json&quot;&gt;https://github.com/jpillora/chisel/blob/master/example/users.json&lt;/a&gt;&lt;br /&gt;users.json&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
{
  &quot;myuser:mypassword&quot;: [&quot;socks&quot;]
}
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;chisel server --port 8080 --reverse --authfile users.json&lt;br /&gt;chisel client --auth myuser:mypassword IP_СЕРВЕРА:8080 1080:socks&lt;br /&gt;&lt;br /&gt;Раздача прокси с ПК на телефон (В одной Wi-Fi сети)&lt;br /&gt;комп&lt;br /&gt;chisel client --auth myuser:mypassword IP_СЕРВЕРА:8080 0.0.0.0:1080:socks&lt;br /&gt;телефон&lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.scheler.superproxy&quot;&gt;https://play.google.com/store/apps/details?id=com.scheler.superproxy&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/MatsuriDayo/NekoBoxForAndroid&quot;&gt;https://github.com/MatsuriDayo/NekoBoxForAndroid&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/bndeff/socksdroid&quot;&gt;https://github.com/bndeff/socksdroid&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;ssh proxy via host, прокси SOCKS&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/114348.html&quot;&gt;&lt;b&gt;создание постоянного SSH-тоннеля&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/106496.html&quot;&gt;SSH-туннели — пробрасываем порт&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/90631.html&quot;&gt;установка XRDP, VNC и SSH на Ubuntu и Debian. autossh&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://coderknows.com/2019/02/28/ssh-tunel/&quot;&gt;Настройка SSH-тунеля&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://gon.gl/blog/2019/03/03/permanent-ssh-tunnel.html&quot;&gt;Как настроить постоянно работающий SSH-туннель&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/post/345418/&quot;&gt;Маршрутизация локальной сети через прозрачный socks-прокси&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/aktos-io/link-with-server&quot;&gt;https://github.com/aktos-io/link-with-server&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://ruslash.com/ssh-proxy-via-host/&quot;&gt;http://ruslash.com/ssh-proxy-via-host/&lt;/a&gt;&lt;br /&gt;На локальном хосте выполняем:&lt;br /&gt;$ ssh -L 8888:localhost:8888 HOSTA&lt;br /&gt;На следующем хосте&lt;br /&gt;$ ssh -D 8888 HOSTX&lt;br /&gt;Потом подключаемся на локальный 8888 порт и используем его в качестве socks прокси.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://wiki.enchtex.info/practice/ssh_socks_proxy_server&quot;&gt;https://wiki.enchtex.info/practice/ssh_socks_proxy_server&lt;/a&gt;&lt;br /&gt;на локальной машине подключаемся к удаленной системе с помощью команды:&lt;br /&gt;$ ssh -D8080 user@server&lt;br /&gt;где -D8080 – произвольный номер порта.&lt;br /&gt;в настройках программы выбираем использоваться socks прокси на адрес 127.0.0.1:8080&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://romantelychko.com/blog/1058/&quot;&gt;Создаём SOCKS 5 прокси с помощью SSH-соединения через удалённый сервер в Linux&lt;/a&gt;&lt;br /&gt;Cоздать SOCKS 5 прокси довольно просто. Достаточно выполнить команду по следующей схеме:&lt;br /&gt;&lt;br /&gt;ssh -f -C2qTnN -D &amp;lt;порт&amp;gt; &amp;lt;удаленный_пользователь&amp;gt;@&amp;lt;удаленный_сервер&amp;gt; -p 22&lt;br /&gt;Где&lt;br /&gt;-f Запросит ssh перейти в фоновый режим только перед выполнением команды.&lt;br /&gt;-C Включит сжатие всех данных (включая stdin, stdout, stderr и данные для перенаправленных Х11 и TCP/IP соединений).&lt;br /&gt;-2 Принуждает ssh использовать только протокол версии 2.&lt;br /&gt;-q Тихий режим. Подавляет все предупреждения и диагностические сообщения. Будут отображены только фатальные ошибки.&lt;br /&gt;-T Отменить переназначение терминала.&lt;br /&gt;-n Перенаправляет стандартный ввод из /dev/null (фактически, предотвращает чтение из стандартного ввода).&lt;br /&gt;-N Не выполнять удаленную команду.&lt;br /&gt;-D [локальный IP : ] порт&lt;br /&gt;-p указывает, какой порт использовать; очевидно, это значение по умолчанию равно 22, поэтому приведенное выше утверждение не имеет смысла, но включено для ясности.&lt;br /&gt;&lt;br /&gt;Например:&lt;br /&gt;&lt;br /&gt;ssh -f -C2qTnN -D 1080 roman@8.8.8.8&lt;br /&gt;После введения пароля к удаленному серверу, SSH перейдёт в фоновый режим.&lt;br /&gt;&lt;br /&gt;Далее вам следует открыть любой браузер, в котором прописать адрес SOCKS 5 прокси в параметрах соединения.&lt;br /&gt;&lt;br /&gt;Для примера я взял Firefox.&lt;br /&gt;Идём «Правка» → «Настройки» → вкладка «Дополнительно» → вкладка «Сеть» → раздел «Соединение» → кнопка «Настроить»&lt;br /&gt;Устанавливаем там пункт «Ручная настройка сервиса прокси», в поле «Узел SOCKS» пишем наш IP адрес (обычно 127.0.0.1), а в поле «Порт» — указанный порт (в примере 1080).&lt;br /&gt;Ставим ключ на пункт «SOCKS 5» и применяем настройки.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://askubuntu.com/questions/469582/how-do-i-set-up-a-local-socks-proxy-that-tunnels-traffic-through-ssh&quot;&gt;Как мне настроить локальный SOCKS прокси, который туннелирует трафик через SSH?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://queirozf.com/entries/how-to-setup-a-proxy-over-an-ssh-tunnel-ubuntu-examples-firefox-chrome&quot;&gt;Как настроить прокси через туннель SSH в Ubuntu: примеры с Firefox и Chrome&lt;/a&gt;&lt;br /&gt;создайте прокси SOCKS на локальном хосте: 9999 (выберите любой неиспользуемый порт) через соединение SSH с &lt;remoteserver&gt;портом &lt;portnum&gt;, используя имя пользователя &lt;b&gt;[Unknown site tag]&lt;/b&gt;. Вам может быть предложено ввести пароль.&lt;br /&gt;Фактический пример:&lt;br /&gt;$ ssh -D 9999 -f -C -N johndoe@path.to.proxy.server.edu -p 52831&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/974040/&quot;&gt;Прокси для ленивых: поднимаем SOCKS5 поверх SSH, пока чайник закипает&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;1) DPI видит протокол SSH.&lt;br /&gt;2) UDP не поддерживается. Звонки в Telegram или Zoom через такой SOCKS5 могут не работать&lt;br /&gt;3) DNS. Убедитесь, что ваш браузер проксирует и DNS-запросы тоже (галочка &quot;Proxy DNS when using SOCKS v5&quot; в Firefox)&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://docs.github.com/ru/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent&quot;&gt;https://docs.github.com/ru/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;На клиенте:&lt;br /&gt;ssh-keygen -t ed25519 -C &quot;your_email@example.com&quot; -f name_files&lt;br /&gt;ssh-copy-id user@1.1.1.1&lt;br /&gt;или&lt;br /&gt;cat ~/.ssh/id_ed25519.pub | ssh user@server_ip &quot;mkdir -p ~/.ssh &amp;&amp; touch ~/.ssh/authorized_keys &amp;&amp; chmod -R go= ~/.ssh &amp;&amp; cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys&quot;&lt;br /&gt;&lt;br /&gt;На сервере:&lt;br /&gt;Создаем пользователя без доступа к консоли (только туннель — высший пилотаж паранойи)&lt;br /&gt;sudo useradd -m -s /usr/sbin/nologin friend_user&lt;br /&gt;sudo passwd friend_user&lt;br /&gt;&lt;br /&gt;ssh -D 1081 -N -C user@1.1.1.1&lt;br /&gt;-D 1081: поднимает локальный SOCKS5 на порту 1081.&lt;br /&gt;-N: говорит SSH «не открывай мне шелл, я тут только ради туннеля».&lt;br /&gt;-C: включает сжатие (полезно, если вы читаете текст, бесполезно, если смотрите 4K-видео).&lt;br /&gt;&lt;br /&gt;autossh -M 0 -o &quot;ServerAliveInterval 30&quot; -o &quot;ServerAliveCountMax 3&quot; -D 1081 -N user@1.1.1.1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SSH через HTTP прокси&lt;br /&gt;&lt;a href=&quot;http://www.zeitoun.net/articles/ssh-through-http-proxy/start&quot;&gt;http://www.zeitoun.net/articles/ssh-through-http-proxy/start&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.math.ucla.edu/computing/kb/creating-ssh-proxy-tunnel-putty&quot;&gt;https://www.math.ucla.edu/computing/kb/creating-ssh-proxy-tunnel-putty&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;SOCKS 5 прокси с помощью SSH-соединения рецепт&lt;/summary&gt;&lt;br /&gt;1. Генерация с кастомным именем&lt;br /&gt;ssh-keygen -t ed25519 -C &quot;your_email@example.com&quot; -f ~/.ssh/my_custom_key&lt;br /&gt;&lt;br /&gt;Это создаст два файла:&lt;br /&gt;my_custom_key — приватный ключ.&lt;br /&gt;my_custom_key.pub — публичный ключ.&lt;br /&gt;&lt;br /&gt;2. Добавление ключа в authorized_keys&lt;br /&gt;ssh-copy-id -i ~/.ssh/my_custom_key.pub user@server_ip&lt;br /&gt;cat ~/.ssh/my_custom_key.pub | ssh user@server_ip &quot;mkdir -p ~/.ssh &amp;&amp; chmod 700 ~/.ssh &amp;&amp; cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys &amp;&amp; chmod 600 ~/.ssh/authorized_keys&quot;&lt;br /&gt;&lt;br /&gt;Так как имя файла отличается от стандартного, SSH не найдет его автоматически. У вас есть два варианта:&lt;br /&gt;Указывать путь при подключении:&lt;br /&gt;ssh -i ~/.ssh/my_custom_key user@server_ip&lt;br /&gt;&lt;br /&gt;Прописать в конфиг (лучший вариант)&lt;br /&gt;~/.ssh/config создается только на вашем локальном компьютере (ноутбуке или ПК), с которого вы подключаетесь&lt;br /&gt;Добавьте в файл ~/.ssh/config (создайте его, если нет):&lt;br /&gt;Пример структуры конфига&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
# Общие настройки для всех хостов (необязательно)
Host *
    AddKeysToAgent yes        # Автоматически добавлять ключи в ssh-agent
    IdentityFile ~/.ssh/id_ed25519  # Ключ по умолчанию

# Первый сервер (например, рабочий)
Host work-server
    HostName 1.2.3.4
    User admin
    IdentityFile ~/.ssh/work_key

# Второй сервер (например, домашний или GitHub)
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/github_key

# Третий сервер (доступ через нестандартный порт)
Host home-nas
    HostName myhome.dyndns.org
    Port 2222
    User root
    IdentityFile ~/.ssh/nas_key
    IdentitiesOnly yes  # Использовать только этот ключ и никакой другой
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Как это работает&lt;br /&gt;Теперь вместо длинных команд вам достаточно написать короткое имя:&lt;br /&gt;ssh work-server — SSH сам подставит IP, пользователя и нужный ключ.&lt;br /&gt;ssh home-nas — SSH автоматически подключится к порту 2222.&lt;br /&gt;&lt;br /&gt;то есть вместо&lt;br /&gt;ssh -NT -D 0.0.0.0:2080 -i /home/user/.ssh/my_vpn_key user@my_vpn -p 2222&lt;br /&gt;ssh -NT -D 0.0.0.0:2080 user@home-nas&lt;br /&gt;&lt;br /&gt;Важные нюансы:&lt;br /&gt;Права доступа: Файл конфига должен быть защищен, иначе SSH проигнорирует его:&lt;br /&gt;chmod 600 ~/.ssh/config&lt;br /&gt;Порядок имеет значение: SSH читает файл сверху вниз. Если вы используете Host * с параметром IdentityFile, он может предлагаться серверам в дополнение к специфичным ключам.&lt;br /&gt;Алиасы: В строке Host можно писать любое удобное вам слово — это просто псевдоним.&lt;br /&gt;&lt;br /&gt;Для корректной работы SSH критически важно установить правильные права на файлы и папки (на стороне сервера): &lt;br /&gt;Папка ~/.ssh: chmod 700 (чтение/запись только для владельца).&lt;br /&gt;Файл authorized_keys: chmod 600 (чтение/запись только для владельца). &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;проверка порта&lt;br /&gt;lsof -i :2080&lt;br /&gt;&lt;br /&gt;проверка прокси&lt;br /&gt;curl --socks5-hostname 127.0.0.1:2080 &lt;a href=&quot;https://ifconfig.me&quot;&gt;https://ifconfig.me&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;плагин в браузере&lt;/summary&gt;&lt;br /&gt;Тип протокола в плагине&lt;br /&gt;В настройках Zero Omega для вашего профиля убедитесь, что выбран протокол SOCKS5, а не HTTP.&lt;br /&gt;Protocol: SOCKS5&lt;br /&gt;Server: 127.0.0.1 (или IP вашего компьютера в локальной сети, если подключаетесь извне)&lt;br /&gt;Port: 2080&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;systemd&lt;/summary&gt;&lt;br /&gt;sudo vim /etc/systemd/system/ssh-proxy.service&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
[Unit]
Description=SSH SOCKS Proxy Tunel
After=network.target

[Service]
# Замените &apos;user&apos; на вашего локального пользователя
User=user
# Полный путь к ключу обязателен
# ExecStart=/usr/bin/ssh -NT -D 0.0.0.0:2080 -i /home/user/.ssh/my_vpn_key user@my_vpn -p 2222 -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes
ExecStart=/usr/bin/ssh -C2qTnN -D 127.0.0.1:2080 -i /home/user/.ssh/my_vpn_key user@my_vpn -p 2222 -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes
# Автоперезапуск при падении
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Разбор опций:&lt;br /&gt;-NT: -N отключает выполнение команд (только туннель), -T отключает выделение терминала.&lt;br /&gt;-o ServerAliveInterval=60: Каждую минуту SSH будет слать &quot;пинги&quot;, чтобы соединение не разрывалось по таймауту.&lt;br /&gt;-o ExitOnForwardFailure=yes: Если порт 2080 занят, сервис сразу упадет с ошибкой (чтобы systemd мог его перезапустить корректно).&lt;br /&gt;0.0.0.0:2080: Позволяет подключаться к этому прокси другим устройствам в сети (если нужно только себе, ставьте 127.0.0.1:2080).&lt;br /&gt;&lt;br /&gt;3. Активация сервиса&lt;br /&gt;Выполните команды по очереди:&lt;br /&gt;Перезагрузите конфиги systemd:&lt;br /&gt;bash&lt;br /&gt;sudo systemctl daemon-reload&lt;br /&gt;Используйте код с осторожностью.&lt;br /&gt;&lt;br /&gt;Разрешите автозапуск:&lt;br /&gt;bash&lt;br /&gt;sudo systemctl enable ssh-proxy&lt;br /&gt;Используйте код с осторожностью.&lt;br /&gt;&lt;br /&gt;Запустите прокси прямо сейчас:&lt;br /&gt;bash&lt;br /&gt;sudo systemctl start ssh-proxy&lt;br /&gt;Используйте код с осторожностью.&lt;br /&gt;&lt;br /&gt;Как проверить статус:&lt;br /&gt;bash&lt;br /&gt;systemctl status ssh-proxy&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;андроид&lt;/summary&gt;&lt;br /&gt;Для Android есть два пути: использовать SSH-клиент с функцией SOCKS-прокси (аналог -D) или использовать V2Ray-клиенты, которые умеют работать с SSH.&lt;br /&gt;Способ 1: Termux (Максимально близко к ПК)&lt;br /&gt;Это полноценный терминал, где работают те же команды.&lt;br /&gt;Установите Termux (лучше из F-Droid).&lt;br /&gt;Выполните: pkg install openssh.&lt;br /&gt;Положите ключ в ~/.ssh/my_vpn_key и дайте права chmod 600.&lt;br /&gt;Запустите ту же команду:&lt;br /&gt;bash&lt;br /&gt;ssh -D 127.0.0.1:2080 -i ~/.ssh/my_vpn_key user@my_vpn -p 2222 -N&lt;br /&gt;Используйте код с осторожностью.&lt;br /&gt;&lt;br /&gt;В браузере или настройках системы укажите SOCKS5 прокси 127.0.0.1:2080.&lt;br /&gt;Способ 2: HTTP Custom или SSH Custom (Популярные GUI-приложения)&lt;br /&gt;Это приложения специально для создания туннелей.&lt;br /&gt;Скачайте HTTP Custom (или SSH Custom) из Play Store.&lt;br /&gt;В меню выберите тип подключения SSH.&lt;br /&gt;В настройках укажите:&lt;br /&gt;Server/IP и Port (2222).&lt;br /&gt;User.&lt;br /&gt;В разделе Private Key импортируйте свой файл my_vpn_key.&lt;br /&gt;Нажмите Connect. Приложение создаст локальный VPN-слой, который перенаправит трафик всего телефона через ваш SSH-туннель.&lt;br /&gt;Способ 3: v2rayNG (Универсальный)&lt;br /&gt;Самый стабильный вариант, так как он создает полноценный VPN-интерфейс.&lt;br /&gt;Установите v2rayNG.&lt;br /&gt;Нажмите + -&amp;gt; Type: SSH.&lt;br /&gt;Заполните поля: адрес, порт 2222, логин.&lt;br /&gt;В поле Private Key вставьте содержимое вашего ключа.&lt;br /&gt;Выберите этот профиль и нажмите на иконку подключения (внизу справа).&lt;br /&gt;Почему на Android это может быть сложнее?&lt;br /&gt;Энергосбережение: Android может «убить» Termux или SSH-клиент в фоне. В настройках батареи нужно разрешить приложению работать без ограничений.&lt;br /&gt;Разрешения: Если используете Termux, не забудьте дать доступ к файлам командой termux-setup-storage, чтобы скопировать ключ из папки загрузок.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=xyz.easypro.httpcustom&amp;hl=ru&quot;&gt;https://play.google.com/store/apps/details?id=xyz.easypro.httpcustom&amp;hl=ru&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=dev.epro.ssc&quot;&gt;https://play.google.com/store/apps/details?id=dev.epro.ssc&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/2dust/v2rayNG/&quot;&gt;https://github.com/2dust/v2rayNG/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;GitHub Releases (Рекомендуется): Самый надежный способ — скачать APK напрямую из раздела Releases на странице проекта.&lt;br /&gt;Для большинства современных телефонов выбирайте файл с arm64-v8a или universal в названии.&lt;br /&gt;&lt;br /&gt;Как настроить ваш SSH-ключ в v2rayNG:&lt;br /&gt;Нажмите кнопку «+» в приложении.&lt;br /&gt;Выберите тип протокола SSH.&lt;br /&gt;Заполните данные: IP сервера, порт (2222), логин.&lt;br /&gt;В поле Private Key (Приватный ключ) вставьте содержимое вашего файла my_vpn_key (откройте его на телефоне как текст и скопируйте всё, включая строки BEGIN и END).&lt;br /&gt;Нажмите «Сохранить» и подключитесь. Приложение само создаст VPN-туннель для всей системы.&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;/portnum&gt;&lt;/remoteserver&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;tsocks&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://linux.die.net/man/5/tsocks.conf&quot;&gt;https://linux.die.net/man/5/tsocks.conf&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.systutorials.com/docs/linux/man/8-tsocks/&quot;&gt;https://www.systutorials.com/docs/linux/man/8-tsocks/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.usenix.org.uk/content/tsocks.html&quot;&gt;https://www.usenix.org.uk/content/tsocks.html&lt;/a&gt;&lt;br /&gt;apt install  tsocks&lt;br /&gt;/etc/tsocks.conf&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
# Сети, куда есть доступ напрямую, и прокси не нужен
local = 192.168.0.0/255.255.0.0
# socks сервер
server = 192.168.1.1 
# порт
server_port = 5555
# тип сервера
server_type = 5
default_user = login
default_pass = passwd
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;tsocks wget ftp://someplace.com/somefile&lt;br /&gt;&lt;br /&gt;связка с shadowsocks&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
server=127.0.0.1
server_port=1080
server_type=5
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;server_port должен соответствовать настройкам локального порта shadowsocks, server_type его следует установить на 5, поскольку shadowsocks использует socks5, а не socks4.&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;MTProto&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/1019350/&quot;&gt;Организация MTProto для телеграмма на одном порту&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/telemt/telemt&quot;&gt;https://github.com/telemt/telemt&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://gist.github.com/avbor/1f8a128e628f47249aae6e058a57610b&quot;&gt;Цепочка из VPS с помощью AmneziaWG для телемта&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/995102/&quot;&gt;Партизанский Telegram: как поднять прокси-невидимку, прикидываясь онлайн-магазином&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/1024164/&quot;&gt;Пошаговая инструкция установки MTProto прокси через Service Node + VLESS&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;hola-proxy opera-proxy windscribe-proxy&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/555368/&quot;&gt;Открытые клиенты Hola VPN и Opera VPN&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/Snawoot/hola-proxy&quot;&gt;https://github.com/Snawoot/hola-proxy&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/Snawoot/opera-proxy&quot;&gt;https://github.com/Snawoot/opera-proxy&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/Snawoot/windscribe-proxy&quot;&gt;https://github.com/Snawoot/windscribe-proxy&lt;/a&gt;&lt;br /&gt;Запустить. &lt;br /&gt;./hola-proxy.linux-amd64 -country de&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
docker run -d \
    --security-opt no-new-privileges \
    -p 127.0.0.1:8080:8080 \
    --restart unless-stopped \
    --name hola-proxy \
    yarmak/hola-proxy -country de
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;./opera-proxy.linux-amd64 -country EU&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
docker run -d \
    --security-opt no-new-privileges \
    -p 127.0.0.1:18080:18080 \
    --restart unless-stopped \
    --name opera-proxy \
    yarmak/opera-proxy
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;./windscribe-proxy.linux-amd64 -location Germany/Frankfurt&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
docker run -d \
    --security-opt no-new-privileges \
    -p 127.0.0.1:28080:28080 \
    --restart unless-stopped \
    --name windscribe-proxy \
    yarmak/windscribe-proxy
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;Станет доступен обычный HTTP-прокси на локальном порту &lt;b&gt;8080&lt;/b&gt; hola-proxy &lt;b&gt;18080&lt;/b&gt; opera-proxy &lt;b&gt;28080&lt;/b&gt; windscribe-proxy&lt;br /&gt;Настроить браузер и/или другое ПО на использование HTTP-прокси-сервера по адресу 127.0.0.1:8080 для hola-proxy,  127.0.0.1:18080 для opera-proxy, 127.0.0.1:28080 для windscribe-proxy&lt;br /&gt;&lt;/details&gt;&lt;br&gt;&lt;br /&gt;&lt;a href=&quot;https://ipspeed.info/free-proxy.php&quot;&gt;https://ipspeed.info/free-proxy.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/anderspitman/awesome-tunneling&quot;&gt;https://github.com/anderspitman/awesome-tunneling&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/fatedier/frp&quot;&gt;https://github.com/fatedier/frp&lt;/a&gt;&lt;br /&gt;FRP обратный прокси-сервер, позволяющий открыть доступ к локальному серверу, расположенному за NAT или брандмауэром, из Интернета.&lt;br /&gt;&lt;br /&gt;доступ к узлам за NAT или с динамическим IP&lt;br /&gt;&lt;a href=&quot;https://github.com/gjedeer/tuntox&quot;&gt;https://github.com/gjedeer/tuntox&lt;/a&gt;&lt;br /&gt;./tuntox -i &lt;toxid&gt; -L 2222:127.0.0.1:22&lt;br /&gt;ssh -p 2222 myuser@localhost&lt;br /&gt;ssh -o ProxyCommand=&apos;./tuntox -i &lt;toxid&gt; -W localhost:22&apos; gdr@localhost&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://sa.my/pwnat/&quot;&gt;https://sa.my/pwnat/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/samyk/pwnat&quot;&gt;https://github.com/samyk/pwnat&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;&lt;a href=&quot;https://github.com/cacggghp/vk-turn-proxy&quot;&gt;https://github.com/cacggghp/vk-turn-proxy&lt;/a&gt;&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;&lt;a href=&quot;https://docs.microsoft.com/ru-ru/windows-server/identity/ad-fs/deployment/deploying-federation-server-proxies&quot;&gt;Развертывание прокси-сервера федерации (Microsoft)&lt;/a&gt;&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/687512/&quot;&gt;Безопасный HTTPS-прокси менее чем за 10 минут&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/764812/&quot;&gt;Свободный* интернет без рекламы с минимальным энергопотреблением в режиме ожидания на смартфонах (в картинках)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://freemyip.com/&quot;&gt;https://freemyip.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/SagerNet/SagerNet&quot;&gt;https://github.com/SagerNet/SagerNet&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/728696/&quot;&gt;Программы-клиенты для протоколов недетектируемого обхода блокировок сайтов: V2Ray/XRay, Clash, Sing-Box, и другие&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://archive.fo/ICgxI&quot;&gt;https://archive.fo/ICgxI&lt;/a&gt;&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;SwitchyOmega (&lt;a href=&quot;https://chromewebstore.google.com/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif&quot;&gt;Chrome&lt;/a&gt;, &lt;a href=&quot;https://addons.mozilla.org/ru/firefox/addon/switchyomega/&quot;&gt;Firefox&lt;/a&gt;)&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;&lt;a href=&quot;https://zalinux.ru/?p=622&quot;&gt;Анонимизация трафика утилит командной строки с ProxyChains&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/5764661.html&quot;&gt;работа в консоли через прокси (wget и тд)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://ekhlakov.blogspot.com/2018/04/socks5-proxy-centos-7.html&quot;&gt;Socks5 proxy на CentOS 7&lt;/a&gt;&lt;br /&gt;&lt;/toxid&gt;&lt;/toxid&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=5876208&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/5876208.html</comments>
  <category>подборка</category>
  <category>browser</category>
  <category>config</category>
  <category>windows</category>
  <category>www</category>
  <category>сисадм</category>
  <category>безопасность</category>
  <category>linux</category>
  <category>proxy</category>
  <category>полезное</category>
  <category>ssh</category>
  <category>vpn</category>
  <category>разное</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/5875926.html</guid>
  <pubDate>Fri, 30 Jan 2026 20:29:16 GMT</pubDate>
  <title>Проверка состояния жесткого диска в linux</title>
  <link>https://uzverss.dreamwidth.org/5875926.html</link>
  <description>&lt;br&gt;&lt;details&gt;&lt;summary&gt;&lt;b&gt;Проверка состояния жесткого диска&lt;/b&gt;&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://redos.red-soft.ru/base/manual/redos-fix/checking-hard-drive-status/&quot;&gt;Проверка состояния жесткого диска&lt;/a&gt;&lt;br /&gt;проверить диск на бедблоки&lt;br /&gt;sudo partprobe&lt;br /&gt;sudo partprobe -s&lt;br /&gt;sudo lsblk -f&lt;br /&gt;sudo lshw -class disk&lt;br /&gt;sudo fdisk -l&lt;br /&gt;sudo umount /dev/sdb&lt;br /&gt;&lt;br /&gt;для NVMe disk&lt;br /&gt;sudo nvme list&lt;br /&gt;sudo nvme id-ctrl /dev/nvme0n1&lt;br /&gt;sudo nvme smart-log /dev/nvme0n1&lt;br /&gt;sudo smartctl -i /dev/nvme0n1&lt;br /&gt;sudo smartctl -x /dev/nvme0n1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://man7.org/linux/man-pages/man8/badblocks.8.html&quot;&gt;https://man7.org/linux/man-pages/man8/badblocks.8.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.opennet.ru/man.shtml?topic=badblocks&amp;category=8&amp;russian=0&quot;&gt;https://www.opennet.ru/man.shtml?topic=badblocks&amp;category=8&amp;russian=0&lt;/a&gt;&lt;br /&gt;sudo umount /dev/sda1&lt;br /&gt;sudo badblocks -vn /dev/sda -o ~/bad_sectors.txt&lt;br /&gt;sudo badblocks -sv /dev/sda&lt;br /&gt;&lt;br /&gt;sudo badblocks -w -svb4096 /dev/sda&lt;br /&gt;не применяйте параметр -w на устройстве, которое содержит используемую файловую систему. Этот параметр приводит к уничтожению информации на диске&lt;br /&gt;sudo badblocks -w -v /dev/sdb&lt;br /&gt;Флаг -w заставляет записывать тестовые данные на диск, что может спровоцировать переназначение секторов.&lt;br /&gt;Внимание: Это уничтожит все данные на диске, поэтому убедитесь, что резервная копия создана.&lt;br /&gt;&lt;br /&gt;sudo e2fsck -l badblocks.txt /dev/sda1&lt;br /&gt;-l — указывает файл со списком bad block&apos;ов.&lt;br /&gt;e2fsck добавит bad block&apos;и в список исключений файловой системы, чтобы они не использовались.&lt;br /&gt;&lt;br /&gt;sudo fsck -c /dev/sda1  # -c — проверяет и помечает bad block&apos;и.&lt;br /&gt;&lt;br /&gt;sudo dumpe2fs /dev/sda1 | grep -i bad&lt;br /&gt;Это покажет информацию о bad block&apos;ах, зарегистрированных в файловой системе.&lt;br /&gt;&lt;br /&gt;sudo btrfs scrub start /dev/sda1&lt;br /&gt;&lt;br /&gt;sudo fsck.vfat -r /dev/sda1&lt;br /&gt;Утилита может пометить bad block&apos;и как неиспользуемые кластеры.&lt;br /&gt;&lt;br /&gt;NTFS: Используйте ntfsfix или проверьте диск в Windows с помощью chkdsk:&lt;br /&gt;sudo ntfsfix /dev/sda1&lt;br /&gt;chkdsk /f /r X:&lt;br /&gt;&lt;br /&gt;sudo fsck -f -c /dev/sda&lt;br /&gt;sudo e2fsck -cfpv /dev/sda&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
sudo apt install smartmontools
sudo smartctl –info /dev/sde
sudo smartctl -s on -a /dev/sde
sudo smartctl -H /dev/sda
sudo smartctl -iHA /dev/sdb               # Посмотреть данные SMART
sudo smartctl -t long /dev/sdb            # запуск долгого теста
sudo smartctl -t short /dev/sdb           # запуск короткого теста
sudo smartctl -l selftest /dev/sda        # посмотреть как выполняется
sudo smartctl -X /dev/sdb                 # остановка теста
sudo smartctl -a /dev/sdb                 # вывод информации о диске
sudo smartctl -iA -d megaraid,2 /dev/sda  # вывод информации о диске при наличии RAID-контроллера
sudo smartctl -x  /dev/sda                # полный вывод информации о диске
&lt;/pre&gt;&lt;br /&gt;Наиболее важные атрибуты отмечены как pre_fail в колонке TYPE.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Базовые атрибуты для HDD-дисков&lt;/b&gt;&lt;br /&gt;1 Raw_Read_Error_Rate — количество ошибок чтения. На дисках Seagate и Samsung большие значения - норма.&lt;br /&gt;2 Spin_Up_Time — время раскрутки диска из состояния покоя до рабочей скорости. Растет при износе диска.&lt;br /&gt;5 Reallocated_Sector_C — количество переназначенных секторов. Если диск обнаружил ошибку чтения/записи он перенесет сектор в резерв. Чем меньше значение, тем лучше&lt;br /&gt;в случае если RAW_VALUE больше 0 желательно менять диск&lt;br /&gt;7 Seek_Error_Rate — частота ошибок при позиционировании блока магнитных головок. Чем их больше, тем хуже состояние механики или поверхности жёсткого диска.&lt;br /&gt;если VALUE менее 45 желательно менять диск&lt;br /&gt;9 Power_on_hours - Наработка часов RAW_VALUE превышает 43 800* надо менять диск&lt;br /&gt;10 Spin_Retry_Count - Количество повторов запуска шпинделя, если первая попытка оказалась неудачной, при RAW_VALUE более 10 желательно менять диск&lt;br /&gt;196 Rellocation Event Count - число операций переназначения. Raw Value хранит общее число попыток переноса информации с переназначенных секторов в резервную область как успешных так и провальных.&lt;br /&gt;197 Current_Pending_Sector Количество секторов в очереди на переназначение, RAW_VALUE отлично от 0 желательно менять диск&lt;br /&gt;198 Offline_Uncorrectable - Количество неисправимых секторов, при RAW_VALUE отлично от 0 надо менять диск&lt;br /&gt;При росте значений параметров 199 UDMA_CRC_Error_Count и 200 Multi_Zone_Error_Rate проявляются проблемы на уровне интерфейса. В данном случае проверяем корректность подключения дисков SATA.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Базовые атрибуты для SSD-дисков&lt;/b&gt;&lt;br /&gt;184 End-to-End Error Detection Count - Количество ошибок чтения из флэш-памяти, при RAW_VALUE более 9 надо менять диск&lt;br /&gt;231 Life Left (SSDs) or Temperature - Остаток жизненного цикла, при VALUE менее 11 надо менять диск&lt;br /&gt;232 Available Reserved Space - Количество оставшихся резервных служебных блоков, при VALUE менее 11 надо менять диск&lt;br /&gt;233 Media Wearout Indicator - Остаток жизненного цикла у дисков Intel, при VALUE менее 11 надо менять диск&lt;br /&gt;&lt;br /&gt;sudo apt install safecopy&lt;br /&gt;sudo safecopy /dev/sda /home/&lt;br /&gt;lsblk -Df&lt;br /&gt;sudo hdparm -i /dev/sdb1 | grep -i Fw&lt;br /&gt;systemctl status fstrim.timer&lt;br /&gt;&lt;br /&gt;&lt;b&gt;лечение&lt;/b&gt;&lt;br /&gt;sudo badblocks -v /dev/sdb &amp;gt; badsectors.txt         # найти битые сектора&lt;br /&gt;sudo hdparm --write-sector номер_сектора /dev/sdb   # переназначить битые сектора&lt;br /&gt;&lt;br /&gt;или лучше с помощью SMART&lt;br /&gt;&lt;br /&gt;sudo smartctl -t long /dev/sdb&lt;br /&gt;sudo smartctl -x  /dev/sdb&lt;br /&gt;получены&lt;br /&gt;&lt;pre&gt;
..............
197 Current_Pending_Sector  -O--C-   100   100   000    -    8
198 Offline_Uncorrectable   ----C-   100   100   000    -    8
..............
Pending Defects log (GP Log 0x0c)
Index                LBA    Hours
    0            9184008     8045
    1            9184009     8045
    2            9184010     8045
    3            9184011     8045
    4            9184012     8045
    5            9184013     8045
    6            9184014     8045
    7            9184015     8045
..............
&lt;/pre&gt;&lt;br /&gt;создать remap_bad.sh&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
cat &amp;lt;&amp;lt; EOF &amp;gt; remap_bad.sh
#!/bin/bash

# Список сбойных секторов
sectors=(9184008 9184009 9184010 9184011 9184012 9184013 9184014 9184015)

# Перебираем каждый сектор и выполняем hdparm
for sector in &quot;${sectors[@]}&quot;; do
    echo &quot;Попытка переназначения сектора $sector...&quot;
    sudo hdparm --write-sector &quot;$sector&quot; --yes-i-know-what-i-am-doing /dev/sdb
    if [ $? -eq 0 ]; then
        echo &quot;Сектор $sector успешно обработан.&quot;
    else
        echo &quot;Ошибка при обработке сектора $sector.&quot;
    fi
done

echo &quot;Операция завершена.&quot;
EOF
&lt;/textarea&gt;&lt;br&gt;&lt;br /&gt;chmod +x remap_bad.sh&lt;br /&gt;sudo ./remap_bad.sh&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;&lt;b&gt;рецепты&lt;/b&gt;&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://forum.free-adm.ru/viewtopic.php?f=16&amp;t=369&quot;&gt;https://forum.free-adm.ru/viewtopic.php?f=16&amp;t=369&lt;/a&gt;&lt;br /&gt;wipefs /dev/sdb* # Выводит информацию о sdb и всех разделах на sdb.&lt;br /&gt;wipefs --all --backup /dev/sdb # Стереть все сигнатуры с устройства sdb и создает файлы резервных копий сигнатур ~/wipefs-sdb-&lt;offset&gt;.bak для каждой сигнатуру&lt;br /&gt;wipefs --all --force /dev/sdb # удалить все сигнатуры с диска sdb&lt;br /&gt;&lt;br /&gt;Для удаления сигнатуры файловой системы с помощью команды dd нужно переписать первые байты раздела нулями. Это делается командой &lt;b&gt;dd if=/dev/zero of=/dev/sdXN bs=512 count=1&lt;/b&gt;, где /dev/sdXN - это путь к разделу, а bs=512 count=1 указывает на запись 512 байт (размер MBR) нулями&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;&lt;b&gt;ZFS&lt;/b&gt;&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://docs.oracle.com/cd/E19253-01/820-0836/zfsboot-1/index.html&quot;&gt;Глава 5 Установка и загрузка корневой файловой системы ZFS&lt;/a&gt;&lt;br /&gt;modprobe zfs&lt;br /&gt;apt install zfs-utils&lt;br /&gt;zpool list&lt;br /&gt;zpool status&lt;br /&gt;zpool iostat -v&lt;br /&gt;zfs get all имя_пула  # получить подробную информацию&lt;br /&gt;&lt;br /&gt;zpool offline tank устройство # перевод устройства в автономный режим &lt;br /&gt;или zfs offline имя_пула&lt;br /&gt;zpool online tank устройство  # перевод устройства в оперативный режим&lt;br /&gt;zpool create имя_пула имя_диска # создать пул&lt;br /&gt;zfs set mountpoint=/точка/монтирования имя_пула &lt;br /&gt;zpool import -f имя_пула&lt;br /&gt;zpool export -a &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://b.om.ua/filesystems/zfs/zfs-pool-management&quot;&gt;Управление пулами ZFS&lt;/a&gt;&lt;br /&gt;Создание пулов&lt;br /&gt;zpool create zroot da0            # Создание пула из одного диска&lt;br /&gt;zpool create zroot da0 da1        # Создание пула из двух дисков с увеличением дискового пространства (stripe)&lt;br /&gt;zpool create zroot mirror da0 da1 # Создание пула из двух дисков с дублированием данных (mirror)&lt;br /&gt;&lt;br /&gt;Изменение названия пула&lt;br /&gt;Если пул используется как загрузочный, то операции необходимо выполнять загрузившись с другого носителя. &lt;br /&gt;zpool export oldname         # Экспорт под старым названием&lt;br /&gt;zpool import oldpool newpool # Импортирование с переименованием&lt;br /&gt;&lt;br /&gt;Если точка монтирования пула указана как /, то можно воспользоваться флагом -R /path/to/altroot. Возможно также понадобится флаг -f, если пул использовался в другой операционной системе.&lt;br /&gt;zpool import -R /mnt -f oldpool newpool &lt;br /&gt;zpool export newpool # Экспорт переименованного пула&lt;br /&gt;zpool import newpool # импорт пула под новым именем&lt;br /&gt;&lt;br /&gt;Восстановление работоспособности пула&lt;br /&gt;zpool replace zroot da0 # Замена диска&lt;br /&gt;&lt;br /&gt;Дополнительным параметром можно указать какой диск использовать для замены&lt;br /&gt;zpool replace zroot da0 da2&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;создание пула zfs из нескольких дисков&lt;/summary&gt;&lt;br /&gt;zpool create имя_пула sda1 sdb1&lt;br /&gt;zpool list&lt;br /&gt;zfs set dedup=on имя_пула&lt;br /&gt;zfs get compression&lt;br /&gt;zfs set compression=on имя_пула&lt;br /&gt;zpool status&lt;br /&gt;zfs set mountpoint=/media/storage/ имя_пула&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/348354/&quot;&gt;Как ZFS хранит данные&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/companies/vk/articles/863904/&quot;&gt;Дедупликация в OpenZFS теперь хороша, но использовать её не стоит&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/companies/flant/articles/354802/&quot;&gt;Понимая, как используется дисковое пространство в Linux&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;забита ext4&lt;/summary&gt;&lt;br /&gt;sudo e4defrag -v /*&lt;br /&gt;sudo umount /dev/sdXN&lt;br /&gt;sudo fsck -p /dev/sdXN&lt;br /&gt;Пересоздайте журнал (не рекомендуется для новичков, т.к. нужно размонтировать ФС):&lt;br /&gt;tune2fs -O ^has_journal /dev/sdXN (отключить журнал)&lt;br /&gt;tune2fs -O has_journal /dev/sdXN (включить заново)&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;/offset&gt;&lt;/details&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=5875926&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/5875926.html</comments>
  <category>сисадм</category>
  <category>linux</category>
  <category>debian</category>
  <category>ноут</category>
  <category>ubuntu</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/5875605.html</guid>
  <pubDate>Fri, 30 Jan 2026 20:24:24 GMT</pubDate>
  <title>убрать snap из ubuntu-server и отключить лишние службы</title>
  <link>https://uzverss.dreamwidth.org/5875605.html</link>
  <description>&lt;br&gt;&lt;details&gt;&lt;summary&gt;&lt;b&gt;убрать snap из ubuntu-server и отключить лишние службы&lt;/b&gt;&lt;/summary&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Часть 1: Удаление Snap и его следов&lt;/h4&gt;&lt;br /&gt;&lt;b&gt;1. Удалите все Snap-пакеты&lt;/b&gt;&lt;br /&gt;Сначала удалите пакеты Snap, начиная с зависимых:&lt;br /&gt;sudo snap remove --purge lxd&lt;br /&gt;sudo snap remove --purge core20&lt;br /&gt;sudo snap remove --purge core22&lt;br /&gt;sudo snap remove --purge snapd&lt;br /&gt;&lt;br /&gt;Если какие-то пакеты не удаляются — посмотрите список всех установленных:&lt;br /&gt;snap list&lt;br /&gt;&lt;br /&gt;Удалите все по очереди:&lt;br /&gt;sudo snap remove --purge &amp;lt;имя&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Удалите сам snapd&lt;/b&gt;&lt;br /&gt;sudo apt purge snapd&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Удалите остатки&lt;/b&gt;&lt;br /&gt;sudo rm -rf ~/snap /snap /var/snap /var/lib/snapd&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Заблокируйте Snap (чтобы не ставился снова)&lt;/b&gt;&lt;br /&gt;Чтобы APT не устанавливал snapd как зависимость:&lt;br /&gt;echo -e &apos;Package: snapd\nPin: release a=*\nPin-Priority: -10&apos; | sudo tee /etc/apt/preferences.d/nosnap.pref&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Часть 2: Отключение лишних служб (systemd)&lt;/h4&gt;&lt;br /&gt;systemctl list-units --type=service --state=running&lt;br /&gt;&lt;pre&gt;
&lt;b&gt;Примеры служб, которые можно отключить:&lt;/b&gt;

| Служба                        | Назначение                             | Команда                                            |
| ----------------------------- | -------------------------------------- | -------------------------------------------------- |
| `snapd.service`               | Snap-демон                             | `sudo systemctl disable --now snapd`               |
| `motd-news.service`           | Новости Ubuntu                         | `sudo systemctl disable --now motd-news`           |
| `unattended-upgrades.service` | Автообновления                         | `sudo systemctl disable --now unattended-upgrades` |
| `fwupd.service`               | Обновление прошивок                    | `sudo systemctl disable --now fwupd`               |
| `cloud-init`                  | Облачная инициализация (если не нужно) | `sudo systemctl disable --now cloud-init`          |
| `lxd-agent.service`           | Агент LXD (если не используете LXD)    | `sudo systemctl disable --now lxd-agent`           |

Дополнительно (опционально)
systemctl list-unit-files --type=service | grep enabled

&lt;b&gt;Условно &quot;лишние&quot; службы (можно отключить без потери функциональности)&lt;/b&gt;

| Служба                         | Назначение                            | Отключение                                          |
| ------------------------------ | ------------------------------------- | --------------------------------------------------- |
| `snapd`                        | Snap-платформа                        | `sudo systemctl disable --now snapd`                |
| `motd-news`                    | Новости Ubuntu при входе              | `sudo systemctl disable --now motd-news`            |
| `unattended-upgrades`          | Автоматические обновления             | `sudo systemctl disable --now unattended-upgrades`  |
| `fwupd`                        | Обновления прошивок                   | `sudo systemctl disable --now fwupd`                |
| `cloud-init`                   | Инициализация облачных образов        | `sudo systemctl disable --now cloud-init` + удалить |
| `pollinate`                    | Сбор телеметрии Ubuntu                | `sudo systemctl disable --now pollinate`            |
| `apport`                       | Отчёты об ошибках                     | `sudo systemctl disable --now apport`               |
| `lxd-agent`                    | Агент LXD внутри контейнера           | `sudo systemctl disable --now lxd-agent`            |
| `systemd-timesyncd`            | Синхронизация времени (если не нужен) | `sudo systemctl disable --now systemd-timesyncd`    |
| `rsyslog`                      | Логгер, можно отключить если journald | `sudo systemctl disable --now rsyslog`              |
| `update-notifier` / `whoopsie` | Уведомления об обновлениях            | `sudo systemctl disable --now whoopsie`             |


&lt;b&gt;Дополнительно (если совсем минимизировать):&lt;/b&gt;

| Служба         |  Назначение                                                      | Как отключить / удалить                                                         |
|--------------- |------------------------------------------------------------------|---------------------------------------------------------------------------------|
|`cups`          |Система печати                                                    |`sudo apt purge cups*`                                                           |
|`avahi-daemon`  |Автообнаружение сетевых сервисов (Bonjour)                        |`sudo systemctl disable --now avahi-daemon`    `sudo apt purge avahi-daemon`     |
|`bluetooth`     |Поддержка Bluetooth                                               |`sudo systemctl disable --now bluetooth`    `sudo apt purge bluez`               |
|`ModemManager`  |Модемы и мобильные сети                                           |`sudo systemctl disable --now ModemManager`    `sudo apt purge modemmanager`     |
|`NetworkManager`|GUI-сетевой менеджер (не нужен на сервере)                        |`sudo systemctl disable --now NetworkManager`    `sudo apt purge network-manager`|
|`irqbalance`    |Балансировка IRQ на многоядерных CPU (можно отключить на малых VM)|`sudo systemctl disable --now irqbalance`    `sudo apt purge irqbalance`         |
|`atd`           |Планировщик одноразовых задач `at`                                |`sudo systemctl disable --now atd`    `sudo apt purge at`                        |
|`man-db.timer`  |Автообновление кэша man-страниц                                   |`sudo systemctl disable --now man-db.timer`                                      |
|`whoopsie`      |Отправка отчётов об ошибках Ubuntu                                |`sudo systemctl disable --now whoopsie`    `sudo apt purge whoopsie`             |
|`lvm2-monitor`  |Мониторинг LVM, если не используешь LVM                           |`sudo systemctl disable --now lvm2-monitor`    `sudo apt purge lvm2`             |

Как посмотреть, что активно
systemctl list-units --type=service --state=running

А чтобы посмотреть, какие службы включены на автозапуск:
systemctl list-unit-files --type=service | grep enabled

&lt;b&gt;Не отключай без причины:&lt;/b&gt;

| Служба                         | Назначение                                         |
| ------------------------------ | -------------------------------------------------- |
| `sshd`                         | SSH-доступ                                         |
| `systemd-journald`             | Логирование                                        |
| `systemd-networkd` / `netplan` | Сетевые интерфейсы                                 |
| `dbus`                         | IPC для некоторых служб                            |
| `cron`                         | Задания по расписанию                              |
| `getty@tty1`                   | Локальная консоль (можно отключить, если не нужна) |

&lt;b&gt;Не отключай критически важные службы:&lt;/b&gt;

| Служба                         | Нельзя отключать если…              |
| ------------------------------ | ----------------------------------- |
| `systemd-networkd` / `netplan` | используется для настройки сети     |
| `sshd`                         | нужен удалённый доступ              |
| `cron`                         | используются фоновые задания        |
| `systemd-resolved`             | используется DNS через systemd      |
| `dbus`                         | зависит много системных компонентов |

&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Кастомизация входа (опционально)&lt;/b&gt;&lt;br /&gt;Отключи новости Ubuntu при входе по SSH:&lt;br /&gt;sudo chmod -x /etc/update-motd.d/*&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Удалить cloud-init, если не нужен:&lt;/b&gt;&lt;br /&gt;sudo apt purge cloud-init&lt;br /&gt;sudo rm -rf /etc/cloud/ /var/lib/cloud/&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Проверка зависимостей&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;apt depends cloud-init&lt;br /&gt;apt-mark showauto | grep cloud-init&lt;br /&gt;&lt;br /&gt;grep cloud-init /var/log/dpkg.log&lt;br /&gt;zgrep cloud-init /var/log/dpkg.log.*&lt;br /&gt;&lt;br /&gt;Поскольку, после удаления cloud-init, при apt autoremove удаляются ethtool fdisk iproute2 netplan-generator netplan.io, то лучше его не удалять, а отключить все связанные с ним службы&lt;br /&gt;&lt;br /&gt;1. Отключить systemd-службы cloud-init&lt;br /&gt;&lt;br /&gt;sudo systemctl disable cloud-init.service&lt;br /&gt;sudo systemctl disable cloud-init-local.service&lt;br /&gt;sudo systemctl disable cloud-config.service&lt;br /&gt;sudo systemctl disable cloud-final.service&lt;br /&gt;&lt;br /&gt;Чтобы сразу остановить их, если они активны:&lt;br /&gt;&lt;br /&gt;sudo systemctl stop cloud-init.service&lt;br /&gt;sudo systemctl stop cloud-init-local.service&lt;br /&gt;sudo systemctl stop cloud-config.service&lt;br /&gt;sudo systemctl stop cloud-final.service&lt;br /&gt;&lt;br /&gt;2. Отключить cloud-init на уровне конфигурации&lt;br /&gt;Создайте файл, чтобы полностью отключить работу cloud-init (службы при этом всё равно будут установлены, но ничего не будут делать):&lt;br /&gt;&lt;br /&gt;sudo touch /etc/cloud/cloud-init.disabled&lt;br /&gt;&lt;br /&gt;3. (опционально) Проверить, что службы отключены&lt;br /&gt;&lt;br /&gt;systemctl list-unit-files | grep cloud-init&lt;br /&gt;&lt;br /&gt;4. Проверка на следующей перезагрузке, что cloud-init больше не запускается:&lt;br /&gt;&lt;br /&gt;sudo journalctl -b | grep cloud-init&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;minimalize-server.sh&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;textarea cols=&quot;55&quot; rows=&quot;1&quot; wrap=&quot;off&quot; style=&quot;background-color: black;color:white&quot;&gt;
#!/bin/bash

echo &quot; Минимизация Ubuntu Server...&quot;

# Обновление
apt update &amp;&amp; apt -y upgrade

echo &quot; Удаление Snap и связанных директорий...&quot;
snap list | awk &apos;NR&amp;gt;1 {print $1}&apos; | xargs -r -n1 snap remove --purge
systemctl stop snapd
apt purge -y snapd
rm -rf ~/snap /snap /var/snap /var/lib/snapd
echo -e &apos;Package: snapd\nPin: release *\nPin-Priority: -10&apos; &amp;gt; /etc/apt/preferences.d/nosnap.pref

echo &quot; Настройка локали на русский...&quot;
apt install -y language-pack-ru
update-locale LANG=ru.UTF-8 LANGUAGE=ru
locale-gen ru.UTF-8

echo &quot; Отключение и удаление служб:&quot;
for service in \
  motd-news \
  unattended-upgrades \
  fwupd \
  pollinate \
  whoopsie \
  ModemManager \
  bluetooth \
  avahi-daemon \
  irqbalance \
  lxd-agent \
  atd \
  man-db.timer \
  cups \
  network-manager
do
  echo &quot; - $service&quot;
  systemctl disable --now &quot;$service&quot; 2&amp;gt;/dev/null
  apt purge -y &quot;$service&quot; 2&amp;gt;/dev/null
done

echo &quot;🧼 Автоудаление зависимостей...&quot;
apt autoremove -y --purge
apt clean

echo &quot; Остаток активных служб:&quot;
systemctl list-units --type=service --state=running

echo &quot; Готово! Перезагрузите систему:&quot;
echo &quot;sudo reboot&quot;
&lt;/textarea&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=5875605&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/5875605.html</comments>
  <category>systemd</category>
  <category>ноут</category>
  <category>ubuntu</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/5875261.html</guid>
  <pubDate>Fri, 30 Jan 2026 20:08:21 GMT</pubDate>
  <title>полезное для серваков, часть 2</title>
  <link>https://uzverss.dreamwidth.org/5875261.html</link>
  <description>&lt;br&gt;&lt;img src=&quot;https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSdMcX2gKZxuiSrlItqZl6CBU96c10Yb3nP2sOa6LegVWpgMc4A&quot; width=&quot;350&quot;&gt;&lt;br /&gt;&lt;br&gt;&lt;a href=&quot;https://uzverss.livejournal.com/79797.html&quot;&gt;полезное для серваков, часть 1&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/109954.html&quot;&gt;полезное для серваков, установка&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;заглянуть под кат&lt;/summary&gt;&lt;br /&gt;&lt;details open=&quot;open&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;#development&quot;&gt;Разработка&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;#thin&quot;&gt;Тонкие клиенты&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;#mail&quot;&gt;Почта&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;#telephony&quot;&gt;Телефония&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;#billing&quot;&gt;Биллинг&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;#encryption&quot;&gt;Шифрование&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;#needed&quot;&gt;нужное&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;#other&quot;&gt;разное&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/details&gt;&lt;br /&gt;&lt;a name=&quot;development&quot;&gt;&lt;/a&gt;&lt;h3&gt;Разработка&lt;/h3&gt;&lt;br /&gt;&lt;details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;&lt;b&gt;Jenkins&lt;/b&gt;&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://community.vscale.io/hc/ru/community/posts/208799669-Как-установить-Jenkins-и-настроить-автоматическую-сборку-maven-проекта-на-Ubuntu-16-04&quot;&gt;Как установить Jenkins и настроить автоматическую сборку maven-проекта на Ubuntu 16.04&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://automated-testing.info/t/razbiraemsya-v-zapuske-testov-v-jenkins-maven-testng-webdriver-na-java-ili-tutorial-novichka/1901&quot;&gt;Разбираемся в запуске тестов в Jenkins (+Maven +TestNG +WebDriver на Java) или туториал новичка&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://automated-testing.info/t/upravlenie-zapuskom-avtomatizirovannyh-testov-iz-jenkins/15617&quot;&gt;Управление запуском автоматизированных тестов из Jenkins&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://rtfm.co.ua/jenkins-ustanovka-i-nastrojka-maven-bilda/&quot;&gt;Jenkins: установка и настройка Maven билда&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.pvsm.ru/plugins/36682&quot;&gt;Jenkins CI — вещи, которых мне не хватало&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/post/646269/&quot;&gt;Домашний билд-тест-сервер&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;&lt;b&gt;Jira&lt;/b&gt;&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://conf.inttrust.ru:8443/pages/viewpage.action?pageId=6523511&quot;&gt;Подробное руководство по работе в JIRA&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://geteasyqa.com/ru/blog/jira-инструмент-для-тестирования/&quot;&gt;JIRA — инструмент для тестирования и управления проектами&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://likeunix.ru/debian-jira-confluence/&quot;&gt;Debian + Nginx + JIRA + Confluence&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://valynkin.ru/ustanovka-atlassian-confluence-i-jira.html&quot;&gt;Установка Atlassian Confluence и Jira на postgres и CentOS7&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://confluence.itimizer.com/pages/viewpage.action?pageId=2687068&quot;&gt;Установка JIRA Software Server (CentOS7/PostgreSQL/Nginx/SSL)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://system-admins.ru/ustanovka-atlassian-confluence/&quot;&gt;Установка Atlassian Confluence&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://it.rdcm.com/archives/926&quot;&gt;Установка Jira и Confluence на Ubuntu 16.04 с MySQL&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://blog.asidorov.name/2016/02/jira-confluence-nginx-mysql-debian.html&quot;&gt;Установка JIRA и Confluence + nginx + MySQL на Debian&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;a href=&quot;https://www.manageengine.com/ru/desktop-central/&quot;&gt;https://www.manageengine.com/ru/desktop-central/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.dameware.com/&quot;&gt;https://www.dameware.com/&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;thin&quot;&gt;&lt;/a&gt;&lt;h3&gt;Тонкие клиенты&lt;/h3&gt;&lt;br /&gt;&lt;details&gt;&lt;br /&gt;&lt;a href=&quot;https://wtware.ru&quot;&gt;https://wtware.ru&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://winitpro.ru/index.php/2015/12/23/obzor-tonkogo-terminalnogo-klienta-wtware/&quot;&gt;Обзор тонкого терминального клиента WTware&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://winterminal.com/ru/&quot;&gt;WTware для Raspberry Pi Операционная система тонких клиентов&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://thinstation.github.io/thinstation/&quot;&gt;http://thinstation.github.io/thinstation/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://webthinstation.at.ua/&quot;&gt;https://webthinstation.at.ua/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://it-advisor.ru/&quot;&gt;Thinstation по русски&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://nixts.org/doku.php?id=start&quot;&gt;Thinstation Доработка тонкого клиента&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://blog.it-kb.ru/2017/02/15/build-an-isolated-network-of-thin-linux-clients-with-thinstation-and-freerdp-connecting-to-windows-server-2012-r2-remote-desktop-services-with-auto-logon-and-operating-during-working-hours/&quot;&gt;Разворачиваем сеть тонких клиентов Thinstation с подключением к серверу Windows Server 2012 R2 Remote Desktop Services&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habrahabr.ru/post/277783/&quot;&gt;LTSP: Терминальный сервер на Linux&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habrahabr.ru/post/281847/&quot;&gt;Как я мучился, поднимая LTSP со сторонним TFTP-сервером&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;mail&quot;&gt;&lt;/a&gt;&lt;h3&gt;Почта&lt;/h3&gt;&lt;br /&gt;&lt;details&gt;&lt;br /&gt;&lt;a href=&quot;http://help.ubuntu.ru/wiki/postfix&quot;&gt;http://help.ubuntu.ru/wiki/postfix&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://postfixadmin.sourceforge.net/&quot;&gt;http://postfixadmin.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://roundcube.net/&quot;&gt;https://roundcube.net/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.rainloop.net/&quot;&gt;https://www.rainloop.net/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habrahabr.ru/post/96314/&quot;&gt;Обзор и установка почтового сервера iRedMail&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.dmosk.ru/instruktions.php?object=iredmail-ubuntu&quot;&gt;Полноценный почтовый сервер с iRedMail на Ubuntu&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://sanotes.ru/ustanovka-servera-iredmail-mysql/&quot;&gt;Установка почтового сервера iRedMail. Внедрение и поддержка (MySQL back-end)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://sanotes.ru/iredmail-backup-restore/&quot;&gt;Почтовый сервер iRedMail, резервное копирование и восстановление&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://serveradmin.ru/ustanovka-i-nastroyka-iredmail/&quot;&gt;Настройка почтового сервера iRedMail на CentOS 7&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.dmosk.ru/instruktions.php?object=postfix-centos&quot;&gt;Почтовый сервер Postfix на CentOS 7 с виртуальными доменами, системой управления, веб-доступом и многим другим&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://1cloud.ru/help/linux/postfix-dovecot-na-ubuntu&quot;&gt;Пошаговая инструкция установки Postfix и Dovecot на Ubuntu&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://vladimir-stupin.blogspot.ru/2014/01/postfixadmin.html&quot;&gt;Установка и настройка Postfixadmin&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habrahabr.ru/post/258279/&quot;&gt;Минимальный почтовый сервер на основе Postfix и Dovecot. Часть 1: Dovecot &lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habrahabr.ru/post/258407/&quot;&gt;Минимальный почтовый сервер на основе Postfix и Dovecot. Часть 2: Postfix&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://serveradmin.ru/nastroyka-postfix-dovecot-centos-7/&quot;&gt;Настройка postfix + dovecot + mysql база + postfixadmin + roundcube + dkim на CentOS 7&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.qinet.ru/2011/04/384/&quot;&gt;Debian: Строим почтовый сервер: Postfix виртуальные пользователи, SSL&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://sergeysl.ru/freebsd-postfix-mail-system/&quot;&gt;FreeBSD: Почтовая система среднего офиса на базе Postfix&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://bsdadmin.ru/index.php/mail-server/347-konfiguratsionnyj-fajl-nastrojki-postfix/&quot;&gt;Конфигурационный файл настройки postfix&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://maddog.sitengine.ru/post/1138.html&quot;&gt;Устанавливаем почтовый сервер. Часть первая&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://maddog.sitengine.ru/post/1139.html&quot;&gt;Устанавливаем почтовый сервер. Часть вторая&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://maddog.sitengine.ru/post/1145.html&quot;&gt;Устанавливаем почтовый сервер. Часть третья&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://skeletor.org.ua/?p=637&quot;&gt;Почтовая связка vexim в сборе (vexim+exim+dovecot+mysql+sa+clamav+mailman) под Debian&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://bsdadmin.ru/index.php/mail-server/203-tools-exim/&quot;&gt;Утилиты для работы с почтовым сервером Exim.Часть1&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://bsdadmin.ru/index.php/mail-server/202-tool-exim/&quot;&gt;Утилиты для работы с почтовым сервером Exim.Часть2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Exchange&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://www.systoolsgroup.com/exchange-recovery.html&quot;&gt;https://www.systoolsgroup.com/exchange-recovery.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://unifiedpeople.ru/exchhelp.ru/html/b876109d-957d-4337-9e2a-e82dfd93bc30.htm&quot;&gt;Восстановление отдельного почтового ящика&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://unifiedpeople.ru/exchhelp.ru/html/32325871-2061-496a-9b4c-8bdcf2f59707.htm&quot;&gt;Указания по восстановлению удаленного почтового ящика&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://jakondo.ru/nastrojka-apache-reverse-proxy-dlya-ms-exchange-2010-2013-2016-debian-8-jessie-ubuntu-14-04-trusty-tahr/&quot;&gt;Настройка Apache Reverse Proxy для MS Exchange 2010, 2013, 2016 (Debian 8 Jessie/Ubuntu 14.04 Trusty Tahr)&lt;/a&gt;&lt;br /&gt;&lt;details&gt;&lt;summary&gt;Exchange PowerShell&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;http://get-powershell.ru/2015/bazy-dannyh-exchange/&quot;&gt;http://get-powershell.ru/2015/bazy-dannyh-exchange/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.dmosk.ru/miniinstruktions.php?mini=exchange-base&quot;&gt;https://www.dmosk.ru/miniinstruktions.php?mini=exchange-base&lt;/a&gt;&lt;br /&gt;Имя &quot;Get-MailboxDatabase&quot; не распознано как имя командлета,&lt;br /&gt;Если PowerShell запускается с сервера где стоит Exchange, то достаточно сперва запустить&lt;br /&gt;add-pssnapin Microsoft.Exchange.Management.PowerShell.Admin&lt;br /&gt;Get-Command *database*&lt;br /&gt;Get-MailboxDatabase&lt;br /&gt;Get-MailboxDatabase -status | Select Identity,DatabaseSize&lt;br /&gt;Get-MailboxDatabase База&lt;br /&gt;Для просмотра почтовых ящиков находящихся в базе данных Exchange используем следующую команду&lt;br /&gt;get-mailbox -Database База&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;/details&gt;&lt;/details&gt;&lt;br /&gt;&lt;a name=&quot;telephony&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://uzverss.livejournal.com/79523.html&quot;&gt;&lt;h3&gt;Телефония&lt;/h3&gt;&lt;/a&gt;&lt;br /&gt;&lt;a name=&quot;billing&quot;&gt;&lt;/a&gt;&lt;h3&gt;Биллинг&lt;/h3&gt;&lt;br /&gt;&lt;details&gt;&lt;br /&gt;&lt;a href=&quot;http://blog.dtulyakov.ru/2015/01/katalog-billingovykh-sistem.html&quot;&gt;Каталог биллинговых систем&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://docs.bitel.ru/pages/viewpage.action?pageId=73598727&quot;&gt;BGBilling 7.0&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://bgbilling.ru/v6.1/doc/index.html&quot;&gt;BGBilling 6.1&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://bgbilling.ru/v6.1/doc/ch18s12s05.html&quot;&gt;Выделение ресурса VLAN на шлюз&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://docs.carbonsoft.ru/display/CarbonBilling/Home&quot;&gt;http://docs.carbonsoft.ru/display/CarbonBilling/Home&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.netup.ru/UTM5/documentation.php&quot;&gt;http://www.netup.ru/UTM5/documentation.php&lt;/a&gt;&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;&lt;a href=&quot;http://asp24.com.ua/blog/pythonix-pervonachal-naja-nastrojka/&quot;&gt;Pythonix. Первоначальная настройка&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://bitbucket.org/tramX/pythonix4/downloads/&quot;&gt;https://bitbucket.org/tramX/pythonix4/downloads/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habrahabr.ru/company/bitcalm/blog/234861/&quot;&gt;Разработка своей системы биллинга на Django&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://pypi.python.org/pypi/django-customer-billing&quot;&gt;https://pypi.python.org/pypi/django-customer-billing&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;encryption&quot;&gt;&lt;/a&gt;&lt;h3&gt;Шифрование&lt;/h3&gt;&lt;br /&gt;&lt;details&gt;&lt;br /&gt;&lt;a href=&quot;https://www.gnu.org/server/standards/translations/ru/gnupg/manual/2.1/gnupg_html/Verkh.html&quot;&gt;Руководство по Охране приватности GNU GnuPG&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://wiki.archlinux.org/index.php/GnuPG_(Русский)&quot;&gt;https://wiki.archlinux.org/index.php/GnuPG_(Русский)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://wiki.archlinux.org/index.php/GNOME/Keyring&quot;&gt;https://wiki.archlinux.org/index.php/GNOME/Keyring&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://incenp.org/notes/2015/gnupg-for-ssh-authentication.html&quot;&gt;https://incenp.org/notes/2015/gnupg-for-ssh-authentication.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://eax.me/gpg/&quot;&gt;Использование PGP/GPG, руководство для нетерпеливых&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.gnu.org/server/standards/translations/ru/gnupg/manual/pinentry/pinentry.html&quot;&gt;Пользование программой ввода пароля pinentry&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;needed&quot;&gt;&lt;/a&gt;&lt;h3&gt;нужное&lt;/h3&gt;&lt;br /&gt;&lt;details&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/articles/950002/&quot;&gt;Цифровая энтропия: почему ваш сервер с аптаймом в 1000 дней — это ходячий мертвец, и как с этим жить&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/91672.html&quot;&gt;коротко об systemd&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://pyatilistnik.org/kak-posmotret-logi-windows/&quot;&gt;Как посмотреть логи windows&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://hetmanrecovery.com/ru/bsod-errors/&quot;&gt;Список кодов ошибок Windows BSoD&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://hackware.ru/?p=14371&quot;&gt;Анализ реестра Windows&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/73984.html&quot;&gt;powershell команды управления виртуальными машинами&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://uzverss.livejournal.com/71311.html&quot;&gt;Debian и Ubuntu, напильник, рецепты, часть 1&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://uzverss.livejournal.com/63477.html&quot;&gt;ubuntu 16.04 и напильник&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://uzverss.livejournal.com/78827.html&quot;&gt;подборка сисадмина&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://uzverss.livejournal.com/79523.html&quot;&gt;uzverss подборка по телефонии&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;софтинки&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/95250.html&quot;&gt;среда рабочего стола&lt;/a&gt; &lt;br /&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/winpe-intro&quot;&gt;https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/winpe-intro&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.microsoft.com/ru-ru/download/windows-usb-dvd-download-tool&quot;&gt;Windows USB/DVD Download Tool&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ab57.ru/erdc.html&quot;&gt;ERD Commander (Microsoft DaRT)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://remontcompa.ru/522-kak-polzovatsya-odnoy-iz-legendarnyh-programm-po-diagnostike-zhestkih-diskov-pod-nazvaniem-victoria.html&quot;&gt;Как пользоваться одной из легендарных программ по диагностике жёстких дисков под названием Victoria!&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://hdd.by/victoria.html&quot;&gt;https://hdd.by/victoria.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://crystalmark.info/en/download/#CrystalDiskInfo&quot;&gt;https://crystalmark.info/en/download/#CrystalDiskInfo&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.r-studio.com/ru/free-linux-recovery/&quot;&gt;https://www.r-studio.com/ru/free-linux-recovery/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.cgsecurity.org/wiki/TestDisk_Download&quot;&gt;https://www.cgsecurity.org/wiki/TestDisk_Download&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.hex-rays.com/products/ida/support/download_freeware.shtml&quot;&gt;https://www.hex-rays.com/products/ida/support/download_freeware.shtml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://tproger.ru/digest/sysadmin-compilation/&quot;&gt;Вместо бубна: огромная подборка инструментов сисадмина&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habr.com/company/ua-hosting/blog/281519/&quot;&gt;Более чем 80 средств мониторинга системы Linux&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://rover-seti.blogspot.com/2015/09/raid-adaptec.html&quot;&gt;Современные RAID контроллеры Adaptec от А до Я&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.adaptec.com/nr/pdfs/Adaptec-Controllers-AtoZ.pdf&quot;&gt;https://www.adaptec.com/nr/pdfs/Adaptec-Controllers-AtoZ.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/97811.html&quot;&gt;специализированные ремонтные и минимальные образы &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.webmin.com/&quot;&gt;https://www.webmin.com/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://cockpit-project.org/&quot;&gt;https://cockpit-project.org/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://vestacp.com/&quot;&gt;http://vestacp.com/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ajenti.org/&quot;&gt;https://ajenti.org/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.rundeck.com/open-source&quot;&gt;https://www.rundeck.com/open-source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://dban.org/&quot;&gt;https://dban.org/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://sourceforge.net/projects/dban/&quot;&gt;https://sourceforge.net/projects/dban/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;для винды&lt;br /&gt;&lt;a href=&quot;https://live.sysinternals.com/&quot;&gt;https://live.sysinternals.com/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://technet.microsoft.com/ru-ru/sysinternals/default.aspx&quot;&gt;https://technet.microsoft.com/ru-ru/sysinternals/default.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;при наличие быстрого инета под Windows можно написать:&lt;br /&gt;net use y: \\live.sysinternals.com\tools &lt;br /&gt;y: надо заменить на любую свободную от примапленных дисков букву&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://technet.microsoft.com/ru-ru/sysinternals/&quot;&gt;https://technet.microsoft.com/ru-ru/sysinternals/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.dell.com/support/driver/ru/ru/rsbsdt1/DriversDetails?driverId=R64398&quot;&gt;ExtPart.exe&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.nirsoft.net/utils/nircmd.html&quot;&gt;http://www.nirsoft.net/utils/nircmd.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://uzverss.livejournal.com/108045.html&quot;&gt;Узнать ключ активации Windows&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://pentestbox.org/&quot;&gt;https://pentestbox.org/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/stascorp/rdpwrap/&quot;&gt;https://github.com/stascorp/rdpwrap/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://bb4win.sourceforge.net/&quot;&gt;http://bb4win.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/details&gt;&lt;/details&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;other&quot;&gt;&lt;/a&gt;&lt;h3&gt;разное&lt;/h3&gt;&lt;br /&gt;&lt;details&gt;&lt;br /&gt;&lt;a href=&quot;https://prism-break.org/ru/categories/servers/&quot;&gt;https://prism-break.org/ru/categories/servers/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blog.victormendonca.com/2019/02/27/fzf-for-the-win/&quot;&gt;Fzf for the Win&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/junegunn/fzf/wiki/examples&quot;&gt;https://github.com/junegunn/fzf/wiki/examples&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://xakep.ru/2017/05/03/top5-devops-utils/&quot;&gt;Мастеру на все руки: 5 лучших инструментов для DevOps&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://serveradmin.ru/nastroyka-proksi-servera-na-centos-7-squid-ad-sams2/&quot;&gt;Настройка прокси сервера на CentOS 7 (squid+AD+sams2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://serveradmin.ru/ustanovka-i-nastroyka-proksi-servera-na-freebsd-10-squid-sams2/&quot;&gt;Установка и настройка прокси сервера на Freebsd 10 (squid+sams2)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://wiki.openwrt.org/ru/doc/uci&quot;&gt;OpenWrt Система UCI&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://eax.me/redis/&quot;&gt;Redis и области его применения&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://habrahabr.ru/post/178525/&quot;&gt;Redis — главное хранилище? Что за хрень?!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://debian.pro/1838&quot;&gt;Самый быстрый и надежный способ удалить все файлы в каталоге — rsync&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://rtfm.co.ua/mysql-commands/&quot;&gt;Наиболее используемые команды MySQL&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;details&gt;&lt;summary&gt;всякое полезное&lt;/summary&gt;&lt;br /&gt;&lt;a href=&quot;https://firstvds.ru/technology/how-to-check-and-clean-inode&quot;&gt;Что делать, когда на сервере кончаются файловые дескрипторы (inode)&lt;/a&gt;&lt;br /&gt;df -i&lt;br /&gt;find / -type d -size +4096 -exec sh -c &quot; ls -d {} &amp;&amp; ls {} | wc -l&quot; \;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.linux.org.ru/forum/admin/15061355&quot;&gt;Аналог victoria (тест поверхности HDD,SSD) под Linux, существует ли?&lt;/a&gt;&lt;br /&gt;Посмотреть данные SMART smartctl -iHA&lt;br /&gt;Прогнать самотестирование: smartctl -t long (результаты смотреть через ндцать часов smartctl -a)&lt;br /&gt;Проверить/исправить/очистить диск - badblocks -w -svb4096&lt;br /&gt;badblocks -n чтобы намагниченность обновлять&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://losst.pro/proverka-diska-na-bitye-sektory-v-linux&quot;&gt;Проверка диска на битые секторы Linux&lt;/a&gt;&lt;br /&gt;sudo fdisk -l&lt;br /&gt;&lt;br /&gt;если файловая система размонтирована, выполнить тест с записью&lt;br /&gt;sudo badblocks -vn /dev/sda2 -o ~/bad_sectors.txt&lt;br /&gt;&lt;br /&gt;если были обнаружены битые блоки, надо сообщить о них файловой системе, чтобы она не пыталась писать туда данные&lt;br /&gt;fsck -l ~/bad_sectors.txt /dev/sda1&lt;br /&gt;&lt;br /&gt;опции badblocks&lt;br /&gt;&lt;pre&gt;
    -e - позволяет указать количество битых блоков, после достижения которого дальше продолжать тест не надо;
    -f - по умолчанию утилита пропускает тест с помощью чтения/записи если файловая система смонтирована чтобы её не повредить, эта опция позволяет всё таки выполнять эти тесты даже для смонтированных систем;
    -i - позволяет передать список ранее найденных битых секторов, чтобы не проверять их снова;
    -n - использовать безопасный тест чтения и записи, во время этого теста данные не стираются;
    -o - записать обнаруженные битые блоки в указанный файл;
    -p - количество проверок, по умолчанию только одна;
    -s - показывать прогресс сканирования раздела;
    -v - максимально подробный режим;
    -w - позволяет выполнить тест с помощью записи, на каждый блок записывается определённая последовательность байт, что стирает данные, которые хранились там раньше.
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;если на разделе файловая система семейства Ext, то для поиска битых блоков и автоматической регистрации их в файловой системе можно использовать команду e2fsck&lt;br /&gt;sudo e2fsck -cfpv /dev/sda1&lt;br /&gt;&lt;br /&gt;Параметр -с позволяет искать битые блоки и добавлять их в список, -f - проверяет файловую систему, -p - восстанавливает повреждённые данные, а -v выводит всё максимально подробно.&lt;br /&gt;&lt;br /&gt;проще и нагляднее использовать WHDD&lt;br /&gt;&lt;a href=&quot;https://github.com/whdd/whdd&quot;&gt;https://github.com/whdd/whdd&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;проверка диска, разделы можно проверять примонтироваными, причем можно сразу весь диск.&lt;br /&gt;&lt;a href=&quot;https://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html&quot;&gt;https://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html&lt;/a&gt;&lt;br /&gt;ddrescue --force /dev/sda /dev/null &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://hdd.by/Victoria/vcr35cd.zip&quot;&gt;https://hdd.by/Victoria/vcr35cd.zip&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://hdd.by/Victoria/mhdd32ver4.6iso.zip&quot;&gt;https://hdd.by/Victoria/mhdd32ver4.6iso.zip&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://hdd.by/Victoria/Windows7-10PE.zip&quot;&gt;https://hdd.by/Victoria/Windows7-10PE.zip&lt;/a&gt;&lt;br /&gt;&lt;/details&gt;&lt;/details&gt;&lt;br /&gt;&lt;/details&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=5875261&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/5875261.html</comments>
  <category>debian</category>
  <category>backup</category>
  <category>iso</category>
  <category>centos</category>
  <category>виртуализация</category>
  <category>linux</category>
  <category>сисадм</category>
  <category>server</category>
  <category>windows</category>
  <category>unix</category>
  <category>работа</category>
  <category>подборка</category>
  <category>ubuntu</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/138637.html</guid>
  <pubDate>Sat, 25 Mar 2017 11:26:33 GMT</pubDate>
  <title>Создание deb-пакетов. Первые шаги в PPA</title>
  <link>https://uzverss.dreamwidth.org/138637.html</link>
  <description>&lt;a href=&quot;http://uzverss.livejournal.com/17628.html&quot;&gt;http://uzverss.livejournal.com/17628.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=138637&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/138637.html</comments>
  <category>linux</category>
  <category>консоль</category>
  <category>скрипты</category>
  <category>sources.list</category>
  <category>config</category>
  <category>dpkg</category>
  <category>команды</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/138297.html</guid>
  <pubDate>Sat, 25 Mar 2017 09:59:23 GMT</pubDate>
  <title>UEFI вместо BIOS</title>
  <link>https://uzverss.dreamwidth.org/138297.html</link>
  <description>&lt;a href=&quot;https://uzverss.livejournal.com/26209.html&quot;&gt;https://uzverss.livejournal.com/26209.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://web.archive.org/web/20170606183856/http://www.chip.ua/stati/haos-vmesto-bios/&quot;&gt;https://web.archive.org/web/20170606183856/http://www.chip.ua/stati/haos-vmesto-bios/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ichip.ru/sovety/perehodim-na-uefi-vmesto-bios-3818&quot;&gt;https://ichip.ru/sovety/perehodim-na-uefi-vmesto-bios-3818&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=138297&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/138297.html</comments>
  <category>windows</category>
  <category>hdd</category>
  <category>полезное</category>
  <category>bios</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://uzverss.dreamwidth.org/57873.html</guid>
  <pubDate>Tue, 27 Oct 2015 23:12:16 GMT</pubDate>
  <title>для дрима</title>
  <link>https://uzverss.dreamwidth.org/57873.html</link>
  <description>безвозвратно стереть весь импорт&lt;br /&gt;&lt;a href=&quot;http://www.dreamwidth.org/tools/importer/erase&quot;&gt;http://www.dreamwidth.org/tools/importer/erase&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;импорт из ЖЖ&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/tools/importer&quot;&gt;https://www.dreamwidth.org/tools/importer&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;кросспостинг в ЖЖ&lt;br /&gt;&lt;a href=&quot;http://www.dreamwidth.org/manage/settings/?cat=othersites&quot;&gt;http://www.dreamwidth.org/manage/settings/?cat=othersites&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;управление френдами&lt;br /&gt;&lt;a href=&quot;http://www.dreamwidth.org/manage/circle/edit&quot;&gt;http://www.dreamwidth.org/manage/circle/edit&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/manage/banusers&quot;&gt;https://www.dreamwidth.org/manage/banusers&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;настройки внешнего вида&lt;br /&gt;&lt;a href=&quot;http://www.dreamwidth.org/customize/&quot;&gt;http://www.dreamwidth.org/customize/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.dreamwidth.org/customize/options&quot;&gt;http://www.dreamwidth.org/customize/options&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/customize/advanced/styles&quot;&gt;https://www.dreamwidth.org/customize/advanced/styles&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/doc/s2/&quot;&gt;https://www.dreamwidth.org/doc/s2/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;поиск&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/tools/search&quot;&gt;https://www.dreamwidth.org/tools/search&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;тэги&lt;br /&gt;&lt;a href=&quot;https://uzverss.dreamwidth.org/tag/&quot;&gt;https://uzverss.dreamwidth.org/tag/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/manage/tags.bml&quot;&gt;https://www.dreamwidth.org/manage/tags.bml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;посты&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/editjournal&quot;&gt;https://www.dreamwidth.org/editjournal&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;лента &lt;br /&gt;&lt;a href=&quot;https://feef.dreamwidth.org/read&quot;&gt;https://feef.dreamwidth.org/read&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/latest&quot;&gt;https://www.dreamwidth.org/latest&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;статистика&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/stats&quot;&gt;https://www.dreamwidth.org/stats&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;сеансы&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/manage/logins&quot;&gt;https://www.dreamwidth.org/manage/logins&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;сменить пароль&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/changepassword&quot;&gt;https://www.dreamwidth.org/changepassword&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/lostinfo&quot;&gt;https://www.dreamwidth.org/lostinfo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;настройки&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/manage/settings/&quot;&gt;https://www.dreamwidth.org/manage/settings/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;изображения&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/file/new&quot;&gt;https://www.dreamwidth.org/file/new&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Заявить права на учетную запись OpenID&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/openid/claim&quot;&gt;https://www.dreamwidth.org/openid/claim&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/support/faqbrowse?faqid=84&quot;&gt;https://www.dreamwidth.org/support/faqbrowse?faqid=84&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Эта программа уничтожает ваши посты в ЖЖ&lt;br /&gt;&lt;a href=&quot;https://github.com/timmc/lj-expunge&quot;&gt;https://github.com/timmc/lj-expunge&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Утилита архивации ЖЖ&lt;br /&gt;&lt;a href=&quot;https://hewgill.com/ljdump/&quot;&gt;https://hewgill.com/ljdump/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/ghewgill/ljdump&quot;&gt;https://github.com/ghewgill/ljdump&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/timmc/ljdump&quot;&gt;https://github.com/timmc/ljdump&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/jwrdegoede/ljmigrate&quot;&gt;https://github.com/jwrdegoede/ljmigrate&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/ati/ljsm&quot;&gt;https://github.com/ati/ljsm&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://slackbuilds.org/repository/13.37/network/ljpms/&quot;&gt;https://slackbuilds.org/repository/13.37/network/ljpms/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://ljbook.com/&quot;&gt;http://ljbook.com/&lt;/a&gt; - сохранение блога в pdf&lt;br /&gt;&lt;a href=&quot;https://www.blogbooker.com/&quot;&gt;https://www.blogbooker.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Открытые запросы&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/support/help&quot;&gt;https://www.dreamwidth.org/support/help&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;История запросов&lt;br /&gt;&lt;a href=&quot;https://www.dreamwidth.org/support/history&quot;&gt;https://www.dreamwidth.org/support/history&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;разное&lt;br /&gt;&lt;a href=&quot;https://potofsoup.dreamwidth.org/5059.html&quot;&gt;https://potofsoup.dreamwidth.org/5059.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://fictional-fans.dreamwidth.org/40141.html&quot;&gt;https://fictional-fans.dreamwidth.org/40141.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://no-detective.dreamwidth.org/582739.html&quot;&gt;https://no-detective.dreamwidth.org/582739.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://siderea.dreamwidth.org/1754427.html&quot;&gt;https://siderea.dreamwidth.org/1754427.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://ironymaiden.dreamwidth.org/1072255.html&quot;&gt;https://ironymaiden.dreamwidth.org/1072255.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://judastruth.livejournal.com/159507.html&quot;&gt;http://judastruth.livejournal.com/159507.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://panzer038.livejournal.com/598575.html&quot;&gt;http://panzer038.livejournal.com/598575.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://levkonoe.dreamwidth.org/5617299.html&quot;&gt;http://levkonoe.dreamwidth.org/5617299.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://benegenetriivir.dreamwidth.org/387177.html&quot;&gt;http://benegenetriivir.dreamwidth.org/387177.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://k0m4atka.livejournal.com/281277.html&quot;&gt;http://k0m4atka.livejournal.com/281277.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;https://www.dreamwidth.org/tools/commentcount?user=uzverss&amp;ditemid=57873&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://uzverss.dreamwidth.org/57873.html</comments>
  <category>dreamwidth</category>
  <category>полезное</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
</channel>
</rss>
