WSL2 Ubuntu: Професионални трикове за ежедневна работа

WSL2 Ubuntu: Професионални трикове за ежедневна работа

Windows Subsystem for Linux 2 (WSL2) е мощен инструмент, който превръща Windows в хибридна среда, комбинираща най-доброто от двата свята. След като съм работил с WSL2 повече от три години, събрах колекция от практични настройки и трикове, които ежедневно ми спестяват време и правят работата значително по-приятна. Тази статия не е за базова инсталация, а за реални оптимизации, които веднага ще усетите.

Оптимизация на производителността с .wslconfig

Първото нещо, което трябва да направите след инсталация на WSL2, е да създадете конфигурационен файл .wslconfig. Той контролира глобалните настройки на WSL2 и може драстично да подобри производителността.

Създаване и конфигуриране на .wslconfig

Отворете PowerShell или CMD и въведете:

notepad %USERPROFILE%\.wslconfig

Ето моята препоръчителна конфигурация, която балансира производителност и потребление на ресурси:

[wsl2]
# Ограничете паметта до 50% от RAM (например 16GB при 32GB система)
memory=16GB

# Ограничете процесорите до 75% от наличните
processors=4

# Активирайте swap само при необходимост
swap=2GB

# Деактивирайте swap файла в Windows (по-бързо)
swapFile=%USERPROFILE%\\AppData\\Local\\Temp\\swap.vhdx

# Намалете неактивната памет след 5 минути
# idleThreshold=300000

# Освобождавайте паметта след затваряне на WSL
guiApplications=true

# Локализирайте всички WSL дистрибуции към loopback адрес
localhostForwarding=true

# Включете вложена виртуализация (за Docker, VMs)
nestedVirtualization=true

# По-добра мрежова производителност
networkingMode=mirrored
firewall=true
dnsTunneling=true

Важни пояснения:

  • memory: Не задавайте повече от 75% от физическата RAM, за да не "задушите" Windows
  • processors: Оставете поне 2 ядра за Windows
  • networkingMode=mirrored: Това е новата функция от 2023, която значително подобрява мрежовата свързаност
  • nestedVirtualization: Задължително, ако използвате Docker или виртуални машини във WSL2

След промени рестартирайте WSL2:

wsl --shutdown

При следващо стартиране новите настройки ще влязат в сила.

Windows Terminal: Професионална настройка

Windows Terminal е задължителен инструмент за работа с WSL2. Настройките му се правят чрез JSON файл, който предлага безкрайни възможности за персонализация.

Базова конфигурация на профила

Отворете настройките на Windows Terminal (Ctrl+,) и добавете/редактирайте профила за Ubuntu:

{
    "guid": "{ВАШИЯТ-GUID}",
    "name": "Ubuntu 24.04",
    "source": "Windows.Terminal.Wsl",
    "hidden": false,
    "colorScheme": "One Half Dark",
    "font": {
        "face": "MesloLGS NF",
        "size": 11
    },
    "startingDirectory": "//wsl.localhost/Ubuntu/home/ПОТРЕБИТЕЛ",
    "opacity": 95,
    "useAcrylic": false,
    "bellStyle": "none",
    "cursorShape": "bar",
    "cursorColor": "#FFFFFF",
    "padding": "8, 8, 8, 8",
    "scrollbarState": "hidden"
}

Препоръчителни шрифтове с Nerd Font икони

За да виждате красиви икони в терминала (особено при използване на Oh My Posh или Starship), инсталирайте Nerd Font:

Популярни избори:

  • MesloLGS NF – отличен за Powerlevel10k
  • FiraCode Nerd Font – с ligatures
  • JetBrains Mono NF – модерен и четим
  • Cascadia Code NF – официалният шрифт на Microsoft

Свалете от nerdfonts.com и инсталирайте чрез Extract → Десен бутон → Install for all users.

Клавишни комбинации за продуктивност

Добавете тези shortcuts в settings.json (секция actions):

{
    "command": {
        "action": "splitPane",
        "split": "vertical"
    },
    "keys": "ctrl+shift+v"
},
{
    "command": {
        "action": "splitPane",
        "split": "horizontal"
    },
    "keys": "ctrl+shift+h"
},
{
    "command": "find",
    "keys": "ctrl+shift+f"
},
{
    "command": {
        "action": "moveFocus",
        "direction": "left"
    },
    "keys": "alt+left"
},
{
    "command": {
        "action": "moveFocus",
        "direction": "right"
    },
    "keys": "alt+right"
}

Копиране и поставяне: Linux-style с среден бутон

Една от най-липсващите функции от Linux е копирането със селекция и поставянето със среден бутон на мишката. Можем да постигнем подобно поведение във WSL2.

Активиране на copy-on-select

В настройките на Windows Terminal (settings.json):

"copyOnSelect": true,
"copyFormatting": "none"

Сега всичко, което маркирате, автоматично се копира в clipboard.

Симулиране на paste с десен/среден бутон

За истински Linux усещане има два подхода:

Вариант 1: Windows Terminal default поведение

Десният бутон на мишката автоматично поставя при клик, ако няма селекция. Това е близко до Linux поведението.

Вариант 2: X410 или VcXsrv + X11 clipboard

Ако използвате GUI приложения през X server, инсталирайте xclip:

sudo apt install xclip xsel

Добавете в .bashrc или .zshrc:

# Синхронизиране на X11 clipboard с Windows
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0

# Алиаси за clipboard
alias pbcopy='clip.exe'
alias pbpaste='powershell.exe Get-Clipboard | tr -d "\r"'

Сега можете да копирате от Linux към Windows:

echo "Тестов текст" | pbcopy

И да поставяте обратно:

pbpaste > файл.txt

Създаване на красив и функционален Bash/Zsh Prompt

Скучният default prompt може да бъде заменен с модерна, информативна и красива алтернатива.

Вариант 1: Starship (Препоръчителен)

Starship е минималистичен, бърз и лесен за конфигуриране prompt на Rust.

# Инсталация
curl -sS https://starship.rs/install.sh | sh

# Добавете в края на .bashrc или .zshrc
eval "$(starship init bash)"
# или
eval "$(starship init zsh)"

Създайте директорията и конфигурационен файл:

mkdir -p ~/.config
nano ~/.config/starship.toml

Създайте конфигурация ~/.config/starship.toml:

format = """
[╭─](bold green)$username$hostname$directory$git_branch$git_status
[╰─](bold green)$character"""

[character]
success_symbol = "[➜](bold green)"
error_symbol = "[➜](bold red)"

[directory]
truncation_length = 3
truncate_to_repo = true
format = "[$path]($style)[$read_only]($read_only_style) "

[git_branch]
symbol = " "
format = "[$symbol$branch]($style) "

[git_status]
format = '([\[$all_status$ahead_behind\]]($style) )'

[username]
format = "[$user]($style)@"
show_always = true

[hostname]
format = "[$hostname]($style):"
ssh_only = false

Ако желаете да е малко по така, използвайте:

# ============================================
# ЗВЕЗДЕН КОРАБ (STARSHIP) КОНФИГУРАЦИЯ
# Файл: ~/.config/starship.toml
# От Федя Серафиев
# ============================================

# Основен формат на промпта
format = """
[╭─](bold green)$username$hostname$directory$git_branch$git_status$python$nodejs$memory_usage$time
[╰─](bold green)$cmd_duration$character"""

# ========= СИМВОЛИ =========
[character]
success_symbol = "[➜](bold green)"
error_symbol = "[✗](bold red)"
vicmd_symbol = "[V](bold purple)"

# ========= ДИРЕКТОРИЯ =========
[directory]
truncation_length = 3
truncate_to_repo = true
home_symbol = "🏠 "
format = "[$path]($style)"
style = "bold blue"
read_only = " סּ"
read_only_style = "red"

# ========= GIT КЛОН =========
[git_branch]
symbol = " "
format = "[$symbol$branch]($style)"
style = "bold yellow"

# ========= GIT СТАТУС =========
[git_status]
format = '([\[$all_status$ahead_behind\]](red))'
disabled = false

# ========= ПОТРЕБИТЕЛ =========
[username]
format = "[$user]($style)@"
style_user = "bold cyan"
style_root = "bold red"
show_always = true

# ========= ХОСТ =========
[hostname]
format = "[$hostname]($style):"
ssh_symbol = "🌐 "
ssh_only = false
style = "bold purple"

# ========= ПАМЕТ =========
[memory_usage]
disabled = false
threshold = 50
format = "[🖥 $percentage%]($style) "
style = "bold dimmed white"

# ========= PYTHON =========
[python]
format = "[🐍 $version](bold yellow) "
pyenv_version_name = true
pyenv_prefix = "venv "

# ========= NODE.JS =========
[nodejs]
format = "[⬢ $version](bold green) "

Вариант 2: Oh My Posh (Windows-friendly)

# Инсталация през wget
sudo wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/posh-linux-amd64 -O /usr/local/bin/oh-my-posh
sudo chmod +x /usr/local/bin/oh-my-posh

# Добавете в .bashrc
eval "$(oh-my-posh init bash --config ~/.poshthemes/atomic.omp.json)"

Свалете теми:

mkdir ~/.poshthemes
wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/themes.zip -O ~/.poshthemes/themes.zip
unzip ~/.poshthemes/themes.zip -d ~/.poshthemes
rm ~/.poshthemes/themes.zip

Тествайте различни теми:

# Atomic - минималистична
eval "$(oh-my-posh init bash --config ~/.poshthemes/atomic.omp.json)"

# M365Princess - информативна
eval "$(oh-my-posh init bash --config ~/.poshthemes/m365princess.omp.json)"

# Night Owl - dark theme
eval "$(oh-my-posh init bash --config ~/.poshthemes/night-owl.omp.json)"

Вариант 3: Powerlevel10k (Най-мощен, за Zsh)

Първо инсталирайте Zsh:

sudo apt install zsh
chsh -s $(which zsh)

После инсталирайте Powerlevel10k:

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/.powerlevel10k
echo 'source ~/.powerlevel10k/powerlevel10k.zsh-theme' >> ~/.zshrc

При първо стартиране ще започне интерактивен wizard за конфигурация.

Оптимизация на файловата система

Достъп до Windows файлове

Windows дисковете се монтират в /mnt/c, /mnt/d и т.н. Създайте symlinks за бърз достъп:

ln -s /mnt/c/Users/ВашетоИме/Documents ~/windocs
ln -s /mnt/c/Users/ВашетоИме/Downloads ~/windownloads
ln -s /mnt/c/Projects ~/projects

Важно: Работете колкото се може повече във файловата система на WSL (/home/) за максимална производителност. Достъпът до /mnt/c е 2-10 пъти по-бавен.

Windows Explorer интеграция

Отворете текущата WSL директория във Windows Explorer:

# Добавете в .bashrc
alias explore='explorer.exe .'

Сега просто:

cd ~/projects/myapp
explore

Бърз достъп до WSL от Windows

В Windows Explorer в address bar напишете:

\\wsl$\Ubuntu\home\потребител

Или създайте Network Drive към WSL:

net use Z: \\wsl$\Ubuntu

Работа с Docker във WSL2

Docker Desktop е удобен, но тежък. Можете да използвате чист Docker в WSL2.

Инсталация на Docker (без Docker Desktop)

# Премахнете стари версии
sudo apt remove docker docker-engine docker.io containerd runc

# Инсталирайте зависимости
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release

# Добавете GPG ключ
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Добавете repository
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Инсталирайте Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# Добавете потребителя към docker група
sudo usermod -aG docker $USER

Auto-start на Docker

Docker няма да стартира автоматично. Добавете в края на .bashrc:

# Auto-start Docker daemon
if ! pgrep -x dockerd > /dev/null; then
    sudo dockerd > /dev/null 2>&1 &
fi

Или използвайте systemd (ако е активиран):

# В /etc/wsl.conf
[boot]
systemd=true

После:

sudo systemctl enable docker
sudo systemctl start docker

Полезни алиаси за ежедневието

Създайте файл ~/.bash_aliases (или добавете в .bashrc):

# Системна информация
alias sysinfo='inxi -Fxz'
alias ports='netstat -tulanp'
alias meminfo='free -m -l -t'

# Подобрени базови команди
alias ll='ls -alFh'
alias la='ls -A'
alias l='ls -CF'
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'

# Git съкращения
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git push'
alias gl='git log --oneline --graph --decorate'
alias gd='git diff'

# Docker съкращения
alias dps='docker ps'
alias dpa='docker ps -a'
alias di='docker images'
alias dex='docker exec -it'
alias drm='docker rm'
alias drmi='docker rmi'
alias dprune='docker system prune -a'

# Бързо редактиране на конфигурации
alias bashrc='nano ~/.bashrc && source ~/.bashrc'
alias zshrc='nano ~/.zshrc && source ~/.zshrc'
alias wslconf='notepad.exe /mnt/c/Users/$USER/.wslconfig'

# Clipboard
alias pbcopy='clip.exe'
alias pbpaste='powershell.exe Get-Clipboard | tr -d "\r"'

# Networking
alias myip='curl ifconfig.me'
alias ports='netstat -tulanp'

# Package management
alias update='sudo apt update && sudo apt upgrade -y'
alias install='sudo apt install'
alias search='apt search'

# Бързи действия
alias cls='clear'
alias h='history'
alias j='jobs -l'
alias path='echo -e ${PATH//:/\\n}'
alias now='date +"%T"'
alias week='date +"%V"'

# Safety aliases
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Бърз рестарт на WSL
alias wslrestart='wsl.exe --shutdown'

Мрежови настройки и порт форуърдинг

Достъп до WSL2 от локалната мрежа

По подразбиране WSL2 работи в NAT мрежа. За външен достъп:

# В Windows PowerShell (като Administrator)
netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=172.X.X.X

Вземете IP на WSL2 с:

ip addr show eth0 | grep "inet " | awk '{print $2}' | cut -d/ -f1

Автоматизиран port forwarding скрипт

Създайте wsl-portforward.ps1 в Windows:

$wsl_ip = (wsl hostname -I).trim()
$ports = @(3000, 8080, 8000, 5000)

foreach ($port in $ports) {
    netsh interface portproxy delete v4tov4 listenport=$port listenaddress=0.0.0.0
    netsh interface portproxy add v4tov4 listenport=$port listenaddress=0.0.0.0 connectport=$port connectaddress=$wsl_ip
    Write-Host "Port $port forwarded to $wsl_ip"
}

Добавете в Task Scheduler да се изпълнява при влизане.

Systemd активиране (Ubuntu 22.04+)

Създайте или редактирайте /etc/wsl.conf:

sudo nano /etc/wsl.conf

Добавете:

[boot]
systemd=true

[network]
generateResolvConf=true

[interop]
enabled=true
appendWindowsPath=true

Рестартирайте WSL:

wsl --shutdown

Сега systemd е активен и можете да използвате systemctl.

Бонус: Backup и restore на WSL2

Backup

wsl --export Ubuntu C:\WSL-Backups\ubuntu-backup.tar

Restore

wsl --import Ubuntu-Restored C:\WSL\Ubuntu-Restored C:\WSL-Backups\ubuntu-backup.tar

Автоматизиран backup скрипт

Създайте backup-wsl.ps1:

$date = Get-Date -Format "yyyy-MM-dd"
$distro = "Ubuntu"
$backupPath = "C:\WSL-Backups\$distro-$date.tar"

wsl --export $distro $backupPath
Write-Host "Backup completed: $backupPath"

# Изтрийте backups по-стари от 30 дни
Get-ChildItem "C:\WSL-Backups" -Filter "*.tar" | 
    Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | 
    Remove-Item

Добавете в Task Scheduler за седмичен backup.

⚠️ Какво може да се обърка и как да го избегнеш

1. ВИНАГИ правете backup ПРЕДИ промени

КРИТИЧНО:

wsl --export Ubuntu C:\WSL-Backups\ubuntu-safe-backup.tar

Ако нещо се обърка:

wsl --unregister Ubuntu
wsl --import Ubuntu C:\WSL\Ubuntu C:\WSL-Backups\ubuntu-safe-backup.tar

2. .wslconfig рискове

Какво може да се обърка:

  • Прекалено много RAM → Windows забавя
  • Прекалено малко RAM → WSL крашва
  • Грешен синтаксис → WSL не стартира

Тестване:

wsl --shutdown
wsl
free -h  # Провери RAM
nproc    # Провери CPU

Ако WSL не стартира:

ren %USERPROFILE%\.wslconfig .wslconfig.backup
wsl --shutdown
wsl

Безопасни лимити:

  • RAM: 50-60% от физическата памет
  • CPU: Остави 2 ядра за Windows
  • Swap: Максимум 4GB

3. Docker daemon проблеми

Опасност: Auto-start може да:

  • Забави терминала
  • Причини permission errors
  • Конфликтира с Docker Desktop

Безопасна алтернатива:

# Алиаси вместо auto-start
alias docker-start='sudo service docker start'
alias docker-stop='sudo service docker stop'
alias docker-status='sudo service docker status'

⚠️ Ако имате Docker Desktop: НЕ инсталирайте Docker отделно във WSL!

4. Systemd активиране

Рискове:

  • Не работи на стари Windows (< 22H2)
  • Може да причини boot loops

Проверка:

wsl.exe --version
# Трябва WSL 0.67.6+

Ако WSL не стартира:

powershell

wsl --distribution Ubuntu --user root --exec bash -c "rm /etc/wsl.conf"
wsl --shutdown

5. Port Forwarding

Тестване:

# Провери дали порт е зает
netstat -ano | findstr :3000

# Провери WSL IP
wsl hostname -I

# Тествай с 1 порт
netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=172.X.X.X

# Провери
netsh interface portproxy show all

# Изтрий при проблем
netsh interface portproxy delete v4tov4 listenport=3000 listenaddress=0.0.0.0

6. Clipboard конфликти

Тестване:

# Basic test
echo "test" | clip.exe
powershell.exe Get-Clipboard

# Добави алиаси ако работи
alias pbcopy='clip.exe'
alias pbpaste='powershell.exe Get-Clipboard | tr -d "\r"'

7. Shell Prompt забавяне

Симптоми:

  • Терминал отваря бавно (2-5 сек)
  • Лагове при писане

Тест:

time bash -i -c exit
# Трябва < 0.5 секунди

Оптимизация Starship:

# ~/.config/starship.toml
command_timeout = 500

8. Файлова система – Performance

ГРЕШКА №1:

# ЛОШО - 10x по-бавно
cd /mnt/c/Projects/myapp
npm install

# ДОБРЕ - нормална скорост
cd ~/projects/myapp
npm install

Решение:

# Копирай във WSL, направи symlink
ln -s ~/projects /mnt/c/Users/ИМЕ/WSL-Projects

9. Mirrored Networking – Експериментално

⚠️ ВНИМАНИЕ: networkingMode=mirrored е ново (2023)

Симптоми:

  • Няма интернет
  • DNS не работи
  • VPN конфликти

При проблем:

# .wslconfig
[wsl2]
networkingMode=nat
# Премахни: dnsTunneling=true

Тест:

wsl --shutdown
wsl
ping google.com
curl ifconfig.me

10. Safety aliases досада

# Може да изнерви
alias rm='rm -i'  # Пита ВИНАГИ

# По-умно
alias rm='rm -I'  # Пита само при 3+ файла

Checklist преди тестване

Backup:

wsl --export Ubuntu C:\WSL-Backups\pre-test-backup.tar

Тествай стъпка по стъпка:

  1. Една промяна
  2. wsl --shutdown
  3. Проверка
  4. Работи? → Продължи

Запази работещ config:

cp ~/.bashrc ~/.bashrc.working

Следи логове:

dmesg | tail -20
dmesg | grep 9p

План за спасяване

1. Рестарт:

wsl --shutdown
wsl

2. Рестарт на service:

net stop LxssManager
net start LxssManager

3. Премахни .wslconfig:

ren %USERPROFILE%\.wslconfig .wslconfig.old
wsl --shutdown

4. Restore backup:

wsl --unregister Ubuntu
wsl --import Ubuntu C:\WSL\Ubuntu C:\WSL-Backups\pre-test-backup.tar

5. Преинсталация:

wsl --unregister Ubuntu
wsl --install -d Ubuntu

Диагностични команди

# WSL info
wsl --version
wsl --list --verbose
wsl --status

# Системни
free -h
nproc
dmesg | head -50

# Мрежа
ip addr show eth0
cat /etc/resolv.conf
ping -c 3 google.com

# Docker
sudo systemctl status docker
docker ps
docker version

Заключение

WSL2 е мощен инструмент, но изисква внимателно тестване. Златно правило: Винаги прави backup и тествай стъпка по стъпка.

Започнете с безопасните настройки – .wslconfig с умерени лимити, Windows Terminal персонализация и прост prompt. След стабилност, добавяйте по-сложни конфигурации постепенно.

WSL2 е в активна разработка – следете GitHub releases за новости.

Експериментирайте, но винаги имайте план Б (и backup)! 🛡️


Свързани статии на UrociBg.eu:

Федя Серафиев

Федя Серафиев

Федя Серафиев e собственик на уебсайта urocibg.eu. Той намира удовлетворение в това да помага на хората да решават и най-сложните технически проблеми. Сегашната му цел е да пише лесни за следване статии, така че подобни проблеми изобщо да не възникват.

💝 Благодарим ви, че прочетохте тази статия! Ако сте намерили информацията за полезна, можете да подкрепите нашия труд със символична сума:
💝 Благодарим ви за подкрепата!

Последвайте ни във Facebook за още IT съвети и новини

Последвайте ни

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *


Колко е 10 - 2 ? (въведете числото)