Saya diminta untuk menulis artikel ini dengan pertanyaan tentang Toaster terkait dengan WSL. Saya, setelah beberapa tahun menggunakan sistem pada kernel Linux, sekitar enam bulan yang lalu, beralih menggunakan Windows 10 pada PC rumahan. Ketergantungan pada lingkungan terminal dan Linux dalam pekerjaan saya hampir segera membawa saya ke pertanyaan: apakah menginstal mesin virtual atau mencoba WSL. Saya memilih yang kedua, dan benar-benar puas.
Di bawah cat, saya akan memberi tahu Anda cara menginstal dan mengkonfigurasi WSL, masalah dan batasan apa yang saya temui, cara menjalankan aplikasi Linux dari Windows dan sebaliknya, serta bagaimana mengintegrasikan elemen lingkungan Xfce ke lingkungan desktop Windows.

Saya tidak pernah berpikir bahwa saya akan kembali ke Windows suatu hari, tetapi kombinasi keadaan memberi saya alasan untuk mencoba: istri saya, jauh dari IT, menarik hampir setiap kali dia perlu menggunakan komputer; bangun nostalgia untuk satu pertandingan, tetapi dia tidak ingin bekerja secara memadai di bawah anggur; dan kemudian mereka memberi saya kotak Windows 10 Pro. Saya menginstal WSL segera setelah menginstal sistem, bermain-main untuk beberapa malam, saya menyadari bahwa produk ini cocok untuk tugas-tugas saya, tetapi saya ingin terminal yang lebih akrab dan umumnya beberapa fasilitas.
Instal WSL dan distribusinya
Segera melakukan reservasi, di Internet Anda dapat menemukan deskripsi instalasi dengan menjalankan perintah lxrun /install
pada baris perintah atau konsol PowerShell. Metode ini tidak lagi berfungsi (setelah rilis WSL dalam rilis stabil). Sejauh yang saya tahu, sekarang WSL hanya dapat diinstal dari Microsoft Store bersama dengan distribusi pilihan Anda.
Saya juga mencatat bahwa ketika saya melakukan instalasi, distribusi OpenSUSE, SUSE Linux Enterprise, dan Ubuntu 16.04 tersedia untuk dipilih - yang terakhir saya instal. Ubuntu 18.04, Debian 9 dan Kali Linux juga tersedia sekarang, dan distribusi lainnya dapat muncul. Langkah-langkah instalasi dapat bervariasi. Selain itu, beberapa masalah yang dijelaskan dalam artikel ini mungkin sudah diperbaiki.
Kami menemukan distribusi yang diinginkan di toko dan menginstalnya. Instalasi akan cepat, karena itu hanya akan mengunduh emulator kernel Linux dan utilitas untuk meluncurkan subsistem, yang akan berada di folder sistem dalam tiga contoh: wsl.exe, bash.exe dan ubuntu.exe (bukan ubuntu akan ada nama kit distribusi Anda). Semuanya setara dan melakukan hal yang sama - mereka menjalankan emulator terminal sendiri, di dalamnya linux'ovy bash bekerja di bawah emulator kernel. Pada awal pertama, kita akan diminta untuk membuat nama pengguna dan kata sandi default untuk pengguna, dan setelah itu distribusi akan diinstal secara langsung. Sebagai pengguna default, tentukan root tanpa kata sandi - ini akan diperlukan untuk langkah selanjutnya. Keamanan tidak akan terpengaruh, di samping itu, ketika menyiapkan bahan untuk artikel, dalam tutorial berbahasa Inggris, saya menemukan informasi bahwa versi baru WSL sekarang membuat pengguna root default tanpa kata sandi tanpa pertanyaan yang tidak perlu.
Kami sedang menunggu instalasi. Selanjutnya, hal pertama adalah memperbarui mirror apt untuk selanjutnya. Untuk melakukan ini, Anda memerlukan editor teks CLI. Hanya vi yang disertakan, tapi saya lebih suka nano, jadi saya katakan:
apt install nano
sudo tidak diperlukan, karena kita sudah root. Edit file /etc/apt/sources.list:
nano /etc/apt/sources.list
Mirror Yandex paling cocok untuk saya, jadi file saya terlihat seperti ini:
deb http://mirror.yandex.ru/ubuntu/ xenial main universe restricted deb-src http://mirror.yandex.ru/ubuntu/ xenial main universe restricted deb http://mirror.yandex.ru/ubuntu/ xenial-security main universe restricted deb-src http://mirror.yandex.ru/ubuntu/ xenial-security main universe restricted deb http://mirror.yandex.ru/ubuntu/ xenial-updates main universe restricted deb-src http://mirror.yandex.ru/ubuntu/ xenial-updates main universe restricted
Tekan Ctrl + O untuk menyimpan dan Ctrl + X untuk keluar. Sekarang Anda dapat memperbarui sistem ke kondisi saat ini:
apt update && apt upgrade
Setelah pembaruan, Anda dapat membuat pengguna utama kami. Pada artikel ini saya akan menyebutnya user1, tetapi Anda dapat menentukan nama yang biasa:
addgroup --gid 1000 user1 adduser --home /home/user1 --shell /bin/bash --uid 1000 -G user1,sudo user1
Selanjutnya, buka folder pengguna, buka di bawahnya, setel kata sandi dan edit file ~ / .bashrc:
cd /home/user1 su user1 passwd nano .bashrc
Bashrc dasar saya terlihat seperti ini Semuanya, subsistem siap digunakan ... hampir ...
Menginstal X Server, Xfce, dan Aplikasi GUI Lainnya
Masalah pertama yang saya temui - bash-completion di emulator terminal yang diusulkan bekerja, untuk membuatnya lebih ringan, salah. Selain itu, emulator ini tidak tahu cara menggunakan tab, dan setiap instance memulai segala sesuatu dalam ruang proses baru, dengan init terpisah (yang, omong-omong, tidak dapat diganti). Saya ingin emulator terminal normal, beberapa aplikasi GUI lainnya, serta soket untuk memulai semuanya dengan cepat.
Ketika saya mencari pertanyaan ini di Google, saya menemukan banyak masalah, seperti kebutuhan untuk menerjemahkan dbus ke protokol tcp. Saat ini, tidak ada masalah seperti itu. Unix-domain-sockets bekerja secara normal di subsistem dan semuanya berkomunikasi dengan tenang melalui mereka.
Pertama-tama, kita perlu X-server, apalagi, diinstal di sistem utama (di Windows). Secara pribadi, saya menggunakan VcXsrv untuk tujuan ini - port X11 pada Windows. Situs resmi yang ditentukan dalam tentang utilitas itu sendiri tidak menyediakannya sekarang, oleh karena itu kami memasang google installer dan menginstal semuanya secara default.
Ketika instalasi sedang berlangsung, kami kembali ke terminal WSL, dengan perintah keluar kami keluar kembali ke root. Pertama, konfigurasikan lokal Rusia:
locale-gen ru_RU locale-gen ru_RU.UTF-8 update-locale
Selanjutnya, instal beberapa komponen Xfce. Tentu saja, Anda dapat menginstalnya sepenuhnya dari paket-meta, tetapi kita tidak akan memerlukan sebagian besar komponen, dan arsitektur modular Xfce memungkinkan kita untuk memasok hanya yang diperlukan:
apt install -y xfce4-session xfce4-notifyd xfce4-appfinder xfce4-panel xfce4-quicklauncher-plugin xfce4-whiskermenu-plugin xfce4-xkb-plugin xfce4-settings xfce4-terminal xfce4-taskmanager mousepad
Sangat tidak nyaman menjalankan lingkungan dengan tangan Anda setiap kali, jadi saya mengotomatiskan proses ini. Untuk melakukan ini, di sistem utama, buat folder di tempat yang nyaman bagi kami, dan di dalamnya 3 file untuk dijalankan:
- config.xlaunch - file pengaturan untuk VcXsrv
<?xml version="1.0" encoding="UTF-8"?> <XLaunch WindowMode="MultiWindow" ClientMode="NoClient" LocalClient="False" Display="0" LocalProgram="xcalc" RemoteProgram="xterm" RemotePassword="" PrivateKey="" RemoteHost="" RemoteUser="" XDMCPHost="" XDMCPBroadcast="False" XDMCPIndirect="False" Clipboard="True" ClipboardPrimary="True" ExtraParams="" Wgl="True" DisableAC="False" XDMCPTerminate="False" />
x-run.vbs - WSL selalu dimulai dengan emulator terminalnya, jika Anda menutupnya, semua proses turunannya akan berakhir. Agar jendela ini tidak berperasaan mata, ada baiknya menjalankannya tersembunyi. Untungnya, Windows memiliki interpreter VBScript bawaan yang memungkinkan Anda melakukan ini dalam satu baris:
WScript.CreateObject("Shell.Application").ShellExecute "wsl", "cd /home/user1; DISPLAY=:0 LANG=ru_RU.UTF-8 su user1 -c xfce4-session", "", "open", 0
Izinkan saya menjelaskan apa yang terjadi di sini. Kami memberi tahu VBscript untuk menjalankan aplikasi wsl dengan cd /home/user1; DISPLAY=:0 LANG=ru_RU.UTF-8 su user1 -c xfce4-session
cd /home/user1; DISPLAY=:0 LANG=ru_RU.UTF-8 su user1 -c xfce4-session
, folder awal tidak penting bagi kami, jadi baris kosong, tindakan terbuka - mulai, 0 - mode tersembunyi. Kami memberikan wsl sendiri perintah untuk dieksekusi: buka folder pengguna, kemudian dengan pengaturan variabel lingkungan DISPLAY (tampilan server X) dan LANG (digunakan lokal) kami menjalankan sesi xfce4 atas nama pengguna pengguna kami1 (berkat perintah su)
- start.bat - file batch untuk dijalankan, opsional Anda dapat memasukkannya ke startup
start config.xlaunch wscript x-run.vbs
Selanjutnya, kita dapat menjalankan start.bat dan mengkonfigurasi panel Xfce untuk diri kita sendiri. Saya perhatikan bahwa di sini saya menemukan satu masalah lagi - panel ditampilkan dengan sempurna di atas semua jendela, tetapi tidak dapat mengalokasikan tempat untuk dirinya sendiri seperti panel di desktop Windows. Jika ada yang tahu solusi untuk masalah ini, bagikan di komentar.
Nah, di akhir bagian ini, tangkapan layar desktop saya:

Interaksi lingkungan Windows dan lingkungan subsistem Linux
Anda dapat menjalankan aplikasi Linux langsung dari Windows melalui 3 perintah yang sama - bash, wsl atau ubuntu. Jangan lupa bahwa secara default peluncurannya adalah dari root, jadi Anda harus menurunkan privilege melalui su
, Anda juga harus ingat untuk melewati variabel lingkungan DISPLAY =: 0 jika aplikasi memerlukan server X. Anda juga perlu mengubah folder dari mana aplikasi harus bekerja melalui cd di dalam WSL. Contoh, mari kita hitung md5 untuk file.txt pada disk D menggunakan Linux md5sum:
wsl md5sum < d:\file.txt
Akses ke sistem file Linux juga tersedia, terletak di %localappdata%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs
. Anda dapat membaca file dengan cara ini, tetapi menulisnya tidak disarankan, Anda dapat merusak sistem file. Saya pikir masalahnya adalah bahwa Windows tidak dapat bekerja dengan hak dan pemilik sistem file Linux.
Dari Linux, Anda juga dapat menjalankan aplikasi Windows. Jalankan saja exe-shnik dan itu akan dieksekusi di sistem utama.
Drive Windows dipasang di /mnt
menurut huruf kecilnya. Misalnya, drive D akan dipasang di /mnt/d
. Dari Linux, Anda dapat dengan bebas membaca dan menulis file Windows. Anda dapat membuat symlink pada mereka. Hak file tersebut akan selalu 0777, dan pemiliknya akan root.
Tumpukan jaringan subsistem ini umum untuk Windows. Server yang dibangkitkan di Linux akan tersedia di localhost di Windows dan sebaliknya. Namun, unix-domain-socket untuk Windows hanya berupa file kosong, Anda hanya bisa menggunakannya di Linux. Linux juga memiliki akses ke jaringan eksternal, termasuk mendengarkan port, jika firewall tidak melarang ini.
ifconfig di Linux dan ipconfig di Windows memberikan informasi yang sama tentang antarmuka jaringan.
Dari task manager Windows, Anda dapat dengan aman mengalahkan proses di dalam subsistem Linux. Namun, Linux hanya akan melihat prosesnya.
Fitur, batasan, dan jebakan
Kernel Linux di WSL tidak nyata. Ini hanya lapisan emulator, yang bagian dari tugas spesifik Linux melakukan sendiri, dan bagian proksi langsung ke kernel winNT. Sebagian besar api diimplementasikan di dalamnya, tetapi tidak semua. Anda tidak akan dapat merakit kernel Anda, Anda juga tidak dapat menghubungkan modul kernel (.ko, Obyek Kernel).
Proses init WSL juga miliknya sendiri dan menggantinya, misalnya dengan system.d tidak akan berfungsi. Saya sudah lama memiliki keinginan untuk menulis daemon manager saat bepergian yang akan bekerja dengan file system.d unit dan menyediakan antarmuka yang sama, tetapi semua tangan tidak dapat menjangkau.
Tidak ada dukungan untuk openFUSE, karenanya, pemasangan sistem file virtual atau jarak jauh akan gagal. Tidak mungkin untuk membuat mount dari file, mount sepertinya tidak dapat melakukan apa pun kecuali mengikat di sini.
Juga tidak ada cara untuk mempartisi sistem file Linux menjadi beberapa partisi / disk.
Akses langsung ke zat besi praktis tidak ada. Semua sama, kita berada di kotak pasir Windows, dan tidak di Linux penuh. / dev dan / sys terasa kosong, mereka hanya berisi perangkat virtual. Akses ke GPU - hanya melalui X-server, secara langsung - dengan cara apa pun, sehingga Anda harus melatih jaringan saraf pada Windows.
Dalam pengembangan JS, saya menemukan fakta bahwa electron.js menolak untuk berjalan di WSL, saya harus menduplikasi lingkungan node.js pada Windows.
Ringkasan
Artikelnya ternyata cukup panjang, semoga bermanfaat juga.
WSL bagi saya pribadi ternyata menjadi alat yang sepenuhnya dapat digunakan yang memecahkan masalah saya fullstack pengembang backend. Selama enam bulan, mesin virtual dengan Linux tidak diperlukan. Perasaan umum adalah bahwa Windows + WSL jauh lebih fungsional daripada Linux + Wine.
Saat menulis artikel, saya menemukan bahwa perakitan WSL dengan Debian 9.3 muncul di Microsoft Store, distribusi ini lebih cantik bagi saya daripada Ubuntu, jadi saya akan mencoba menginstalnya.