إعداد البيئة في CLI. WSL / ويندوز الطرفية

هناك أشخاص يقضون معظم وقت عملهم في وحدة التحكم ، وهناك أولئك الذين يستخدمون الجهاز إذا لزم الأمر ، ويقومون بتشغيل شيء وفقًا للتعليمات. ولكني أعتقد أن كل متخصص في تكنولوجيا المعلومات ، سواء كان مطورًا أو مسؤول نظام أو مهندس شبكة أو حتى مطورًا رئيسيًا في yaml ، يستخدم واجهة سطر الأوامر. لا يفكر الجميع في تحسين بيئة العمل في CLI وزيادة الإنتاجية في الجهاز. أرغب في مشاركة تجربتي في إعداد البيئة للعمل مع Linux من Windows.



سوف تتعلم من هذه المقالة الأدوات والأدوات المستخدمة حاليًا لتشغيل تطبيقات Linux على نظام التشغيل Windows 10. سنتحدث عن WSL 2 و Windows Terminal ، اللذين يكتسبان المزيد والمزيد من الشعبية بين المستخدمين الذين يحتاجون إلى Linux للعمل. نظرًا لأن معظم حالات الاستخدام الخاصة بي مرتبطة بالاتصال عن بُعد عبر SSH ، فإن معظم المعلومات ستكون ذات صلة بحالات الاتصالات عن بُعد ، مع جميع الميزات المرتبطة بهذا (إعادة توجيه مفاتيح ssh عبر وكيل ssh ، إعادة توجيه خادم X ، إدارة الاتصالات ، إلخ. ).

تحذير! تحت الكثير من الصور وتقليص حجمها ، لكن في بعض الأحيان ضخمة ، يوصى بفتح المقالة إذا كان لديك وصول مناسب إلى الإنترنت. تعال إلى أسفل القطة إذا كنت مهتمًا بتشغيل أدوات Linux المساعدة في نظام Windows ، أو تحسين عملك في بيئة CLI ، أو كنت تحب النصوص الفنية وأجهزة الألوان. حاولت تفتيح النص باستخدام لقطات الشاشة ولقطات الشاشة ، بحيث لا تكون مملة.

مقدمة


على نظامي التشغيل المنزلي والكمبيوتر المحمول ، فإن نظام التشغيل الوحيد الذي أستخدمه حاليًا هو Windows 10 ، وقد تحولت أخيرًا إلى استخدام WSL فقط بدلاً من VM / dualboot / Cygwin / MinGW. الآن المحطة الافتراضية الخاصة بي هي shell WSL المحلي ، حيث يمكنني تشغيل أي مهمة تقريبًا ، كما هو الحال في Linux الأصلي. بالإضافة إلى ذلك ، يعمل الخادم المصغر Intel NUC على الشبكة المنزلية ، حيث يتم نشر Proxmox مع حاويات LXC و KVM ، حيث يتم تدوير Docker. أذهب إلى جميع VMs عبر SSH ، مع مفاتيح من دليل Windows. يحدث الكثير من الوقت في النشاط المهني في CLI ، مع نفس الخادم والشبكة. لذلك ، هناك دائمًا رغبة في التعامل مع الأدوات لمزيد من العمل المريح في الجهاز ، وفي Windows كانت هناك دائمًا مشكلات في هذا الأمر. ولكن الآن كل شيء يتغير.



تركز هذه المقالات والمقالات اللاحقة بشكل أكبر على المتحمسين الذين يبحثون عن حلول جديدة ويريدون ضخ قشرتهم. لكن بالنسبة للمبتدئين ، يجب أن يكون هناك شيء مثير للاهتمام ، على الرغم من أن المقال قد غمر بعمق في الموضوع ويشير إلى أن للقارئ بعض المعرفة الأساسية في Linux. يتم جمع جميع المعلومات على أساس تجربة شخصية باستخدام WSL ، محطة ، وكذلك ترحيل لا نهاية لها من مشاكل Stack Overflow و Github في عملية تحسين التكوينات باستمرار وإيجاد أدوات ملائمة للعمل.

نظام Windows الفرعي لنظام Linux (WSL) 2


هناك العديد من المقالات العادية عن WSL على الإنترنت وعلى Habr ( بمجرد مقال حول تثبيت / تهيئة WSL مع خادم X ، ملاحظتان حول WSL 2 ، ثلاث مقالات حول تطوير Python في VSCode مع WSL) تصف تثبيت النظام وتكوينه. ومع ذلك ، ليست كل إجراءات التثبيت ذات صلة بالفعل ، وكذلك أصبحت القيود المفروضة على المزالق أقل. لن أتناول بالتفصيل التثبيت ، تعليمات حول تثبيت الإصدار الحالي (الثاني) من WSL على موقع Microsoft على الويب ، ويمكنك أيضًا العثور على برامج تعليمية قصيرة على الإنترنت.



الآن WSL ما زال قيد التطوير النشط ومؤخراً ( يونيو 2019 ) تم إصدار إصدار جديد من WSL 2 ، والذي يتوفر حاليًا فقط للإصدارات الجديدة من Windows لأعضاء Windows Insiders. إن أمكن ، أنصحك بترقية WSL على الفور إلى الإصدار 2 ، نظرًا لأنه حسّن عمل مكالمات النظام ، والعمل مع الشبكة ، و FS ، وعمومًا تم تصميمه على بنية مختلفة ، ووفقًا لبعض التقارير ، يوفر زيادة في السرعة تبلغ 20 ضعفًا مقارنة بالإصدار الأول.

يمكنك رؤية إصدار Windows 10 و OS build في Start -> Settings -> System -> About ، لتثبيت WSL 2 ، ستحتاج إلى Windows 1903 وعلى الأقل إصدار البناء 18917 . إذا لم تكن عضوًا في برنامج Windows Insider ، فمن المرجح ألا تصل التحديثات إلى إصدار مستقر. لذلك إذا كنت ترغب في الترقية إلى أحدث إصدار ، يمكنك تمكين الوصول المبكر ( سريع ) في البدء -> الإعدادات -> التحديث والأمان -> برنامج Windows Insider وتحديث وتعطيل المزيد من التحديثات. تجدر الإشارة إلى أنه سيتم تثبيت التحديثات التي لم يتم اختبارها بعد ، مما قد يؤثر على الاستقرار.

يجب أن يؤخذ في الاعتبار أنه قبل إنشاء الإصدار 18995 ، كان لدى WSL خلل عند العمل مع الملفات الموجودة على أقراص Windows المثبتة ، معبرًا عنها كخطأ في الإدخال / الإخراج ، فقط إعادة تشغيل WSL ( wsl --shutdown في PowerShell) يساعد. بشكل عام ، هناك العديد من الأخطاء الثابتة التي لا تزال موجودة في WSL الإصدار 1 (الذي هو افتراضي) وتوزيعات Windows غير المعاينة. إذا كانت تحديثات نظام التشغيل الخاصة بك تخضع لسياسات الشركة ، فمن المرجح ألا تصل آخر التحديثات وتحتاج إلى وضع ذلك في الاعتبار. على أحد أجهزة الكمبيوتر المحمولة ، قمت ببناء 18956 ولا توجد تحديثات ، على الرغم من حقيقة أن خيار Fast محدد في إعدادات برنامج Insider. تم تثبيت نظام نظيف على كمبيوتر محمول آخر قبل بضعة أشهر ، وتصل التحديثات بشكل دوري ويتم تثبيتها.

تثبيت WSL 2


تتطلب WSL تمكين Hyper-V لأن توزيعات Linux تعمل على VMs خفيفة الوزن باستخدام المحاكاة الافتراضية Hyper-V.



بعد ذلك ، سأقدم تعليمات تثبيت مختصرة من توزيع CLI PowerShell لـ WSL باستخدام Kali Linux كمثال). إذا كنت تفضل Ubuntu أو أي توزيع Linux آخر متاح ، فاستبدل الرابط والأسماء بالأسماء المناسبة.

التحقق من إصدار Windows Build:

Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | Select CurrentBuild

تنشيط مكونات VirtualMachinePlatform و Microsoft-Windows-Subsystem-Linux:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform


إعادة التشغيل.
بعد ذلك ، قم بتثبيت التوزيع من متجر Microsoft ( https://aka.ms/wslstore ) ، أو تابع التشغيل في PowerShell:

curl.exe -L -o kali.appx https://aka.ms/wsl-kali-linux-new
Add-AppxPackage .\kali.appx
rm .\kali.appx


قم بتشغيل وحدة التحكم في WSL (يجب أن يظهر التوزيع في قائمة "ابدأ" ، وابحث باسم وحدة التوزيع) ، وانتظر الدعوة لتثبيت مستخدم جديد ، وأغلق وحدة التحكم.

الآن يجب أن يظهر التوزيع في القائمة إذا تم تنفيذه في PowerShell:

wsl -l -v

إذا لزم الأمر ، قم بتحويل التوزيع إلى تنسيق الإصدار 2 من WSL:

wsl --set-version kali-linux 2
wsl --set-default-version 2


اجعل الجذر هو المستخدم الافتراضي (اختياري):

kali config --default-user root

إذا تلقيت الخطأ "فشلت محاولة اتصال لأن الطرف المتصل لم يستجب بشكل صحيح بعد فترة من الوقت ، أو فشل الاتصال الذي تم إنشاؤه لأن المضيف المتصل فشل في الاستجابة." ، ثم يكون لديك بنية يكون فيها التالي (ثابت بالفعل في الإصدارات الأخيرة) علة. كالمعتاد ، يوجد حل بديل ، أو استخدم توزيع Ubuntu ، لم أواجه أية مشاكل معه على الإصدار نفسه وليس الإصدار الأخير من البنية.

إذا لزم الأمر ، يمكنك نقل القرص الظاهري لـ WSL إلى قسم آخر (يختلف عن C :) وفقًا للتعليمات . من الأفضل القيام بذلك على الفور ، لأنه لا يمكن أن يسير كل شيء بسلاسة.

إخلاء مسؤولية الأمن . في WSL وعلى خوادم Linux الأخرى في الشبكة المنزلية ، لا أدير أي أنظمة حرجة ، ولا يوجد أي مستخدمين آخرين (باستثناءي) على الشبكة ، لذلك أذهب إلى الجذر في كل مكان تقريبًا ، مع مصادقة ssh عبر المفاتيح. أعلم أن هذه ليست أفضل الممارسات ، لكنني أتحدث عن بيئة تطوير شخصية ولا أرى نقطة إنشاء مستخدم غير جذر. لن يتم النظر في مشكلات الأمان في هذه المقالة ، وسأكتب عنها يومًا ما (حول كيفية تنظيم تفاعل الخدمات عبر TLS مع تجديد الشهادة المركزي في شبكة منزلية ؛ حول المزامنة ~ / .ssh / config بين الخوادم وإعادة التوجيه المنافذ والمفاتيح ، وما إلى ذلك).

تكوين WSL


بدءًا من الإصدار 17093 ، يوجد ملف تهيئة WSL الرئيسي على نظام التوزيع FS على /etc/wsl.conf ، وهو يصف الإعدادات التي سيتم تطبيقها في كل مرة يتم فيها تشغيل التوزيع:

  • Automount - automount محركات ويندوز
  • شبكة - إنشاء ملفات solutionv.conf والمضيفين
  • Interop - بدء عمليات Windows وإضافة Windows PATH إلى Linux $ PATH

مبدئيًا ، تم إلغاء WSL بدون هذا التكوين ، يجب تسجيله يدويًا:

[automount]
enabled = true
root = /mnt
options = "metadata,umask=22,fmask=11"
mountFsTab = true

[network]
generateHosts = true
generateResolvConf = true

[interop]
enabled = true
appendWindowsPath = true


يتم استخدام بعض الإعدادات بالقيمة الافتراضية ومع /etc/wsl.conf فارغة ، ولكن للتشغيل الصحيح مع الملفات ، يجب عليك تسجيل معلمة الخيارات على الأقل ، وإلا ستكون ملفات Windows بأذونات 777 ولا يمكن تغيير ذلك من Linux.



يمكنك إعادة تشغيل التوزيع من PowerShell باستخدام الأمر:

wsl -t kali-linux

بعد ذلك ، يمكنك تحديث الحزم وضبط نظام التشغيل بنفسك. لن أتطرق إلى إعدادات shell والبيئة في Linux ، سأترك هذا للمقال التالي.

apt -y update && apt -y upgrade

WSL 2 نظام الملفات والأداء


يتم تخزين الملفات داخل WSL الإصدار 2 على القرص الظاهري VHDX ، ويستخدم ext4 كنظام الملفات. يمكنك الوصول إلى rootfs WSL من خلال مسار بهذا التنسيق:

\\wsl$\{DistroName}\

أو يمكنك كتابة "explorer.exe". في CLI سيفتح متصفح Windows في الدليل الحالي.

لم تستخدم وسل النسخة 1 VHDX، وكان من السهل الوصول إلى الدليل حيث كانت الملفات لينكس، ومايكروسوفت بشكل صارم لا ينصح لتغيير ملفات لينكس من ويندوز. في الإصدار الجديد من WSL ، يتم توفير الوصول إلى FS على قرص افتراضي باستخدام خادم ملفات Plan 9 Filesystem Protocol .



في الإصدارات السابقة من WSL ، كانت هناك مشكلات في أداء نظام الملفات لأن مكالمات النظام تمت محاكاتها من خلال واجهة برمجة تطبيقات Windows ، كان الوصول إلى الملفات بطيئًا وغير مستقر. في نهاية عام 2019 ، غير WSL 2 بنيته المعمارية واستخدم نواة Linux الأصلية. انطلاقا من الشريحة من عرض يوتيوب لنظام ويندوز الفرعي الجديد لهندسة لينكس: الغوص العميق ، زاد أداء عمليات القرص بنسبة 2-5 مرات.

الحد الأقصى لسعة القرص يقتصر على 256 جيجابايت ، إذا تم تجاوز هذا الحجم ، سوف تحتاج إلى تغيير حجم ، التعليمات في الوثائق .

واجه WSL في البداية مشاكل في تحرير الموارد بعد استخدام ذاكرة الوصول العشوائي. بناء 19013 حل هذه المشكلة. إذا قمت بتشغيل مهام متطلبة (على سبيل المثال ، تجميع تطبيق الصدأ) ، ستلاحظ أن عملية Vmmem ستكون في قمة "إدارة المهام" ، ولكن انخفض استهلاك الذاكرة بشكل كبير في الإصدارات الأخيرة من WSL.



شبكة


يتم أخذ اسم المضيف (اسم المضيف) في Linux من اسم الكمبيوتر الشخصي في Windows ، بغض النظر عن ما هو مكتوب في / etc / hostname أو باستخدام الأمر hostnamectl set-hostname .

على عكس الإصدار الأول ، تعمل الشبكة في WSL 2 من خلال مفتاح Hyper-V افتراضي:

❯❯ ipconfig.exe | grep IPv4
IPv4 Address. . . . . . . . . . . : 192.168.88.200
IPv4 Address. . . . . . . . . . . : 172.31.160.1
IPv4 Address. . . . . . . . . . . : 172.27.144.1

❯❯ ip -br -4 ad show dev eth0
eth0 UP 172.27.150.196/20
❯❯ ip ro list default
default via 172.27.144.1 dev eth0




في هذه الحالة ، يتم استخدام الشبكة 172.27.144.0/20 تحت WSL ، وعنوانه الأول ( 172.27.144.1 ) هو نظام مضيف Windows.

من Linux ، يمكنك الوصول إلى خدمات المضيف (التي تعمل على Windows) عبر الشبكة ، على سبيل المثال ، مثل هذا:

❯❯ nmap -p 3389 $(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')

عنوان IP الخاص بـ Windows مأخوذ من /etc/resolv.conf ، حيث يتم إنشاؤه تلقائيًا وفقًا لإعدادات wsl.conf .

على العكس ، إذا كنت بحاجة إلى اتصال بمقبس Linux من أحد تطبيقات Windows ، فيجب عليك الوصول إلى عنوان IP الخاص بـ WSL. يوجد تحذير - في نظام Linux ، يجب عدم تشغيل الخدمة على المضيف المحلي (127.0.0.1) ، ولكن على العنوان 0.0.0.0 . على سبيل المثال ، لرفع وكيل SOCKS5 بسرعة إلى VPS ، يجب أن تبدأ SSH مع معلمة إعادة توجيه المنفذ الديناميكي :

❯❯ ssh -D 0.0.0.0:2299 -N -f proxy.example.com

بعد ذلك ، في تطبيق Windows ، على سبيل المثال Chrome ، كعنوان SOCKS5 ، لا تسجل المضيف المحلي ، ولكن عنوان WSL ، في هذه الحالة 172.27.150.196 . بالمناسبة ، بهذه الطريقة البسيطة لنفق حركة المرور عبر VPS في Chrome ، يصبح من الممكن استخدام الوصول إلى المواقع عبر IPv6.



سيغير Linux عنوان IP الخاص به بعد إعادة التشغيل في كل مرة ، لذا في السيناريوهات التي تحتاج فيها إلى إعادة توجيه منفذ يعمل باستمرار وبدء التشغيل تلقائيًا ، تحتاج إلى البحث عن حل بديل. هناك العديد من الطرق لحل هذه المشكلة ، بدرجات متفاوتة من العكازات ، يمكنك قراءة المزيد في هذه المشكلة على جيثب. أنا استخدم الأداة المساعدة ! العودة-wsl2 المضيفة ، التي تطبق خدمة Windows، يتم إضافتها تلقائيا إلى عنوان IP للوسل في تستضيف ملف ويندوز، لذلك على النظام المضيف يمكن تعيين نوع المضيف ubuntu.wsl وتطبيقه على لينكس. ومع ذلك ، كل هذه العكازات ولا تعمل بشكل جيد ، يبقى الانتظار حتى تقوم Microsoft بإصلاح هذه المشكلات.



UPD. أثناء كتابة هذا المقال ، اكتشفت أن هناك تحديثات ( الإنشاء 18945 ) ، حيث أصبح من الممكن الوصول عبر الخدمات من خلال المضيف المحلي إلى الخدمات التي تعمل في WSL. صحيح ، اتضح أنه كان هناك خطأ بسبب أنه لا يزال لا يعمل من أجل الجميع ، والإصلاح في بناء أغسطس هو 18970 . نظرًا لعدم تلقي الجميع التحديثات ، حتى لو كنت عضوًا في برنامج Windows Insiders ، لم أقم بضبط المعلومات ، وربما يساعد ذلك شخص ما في إعداد تفاعل الشبكة.

OpenSSH على ويندوز وخدمات التشغيل التلقائي


يأتي Windows 10 ، مثل Windows Server 2019 ، مزودًا بشوكة OpenSSH ، والتي تشمل جميع أدوات ssh-keygen المألوفة ، و ssh-add ، و scp ، وغيرها من الأدوات المساعدة ، بما في ذلك ssh-agent وخادم sshd نفسه. يمكن تثبيت كل من العميل والخادم من خلال التطبيقات> التطبيقات والميزات> إدارة الميزات الاختيارية ، ولكن إصدار العميل ssh لن يكون هو الأحدث. لقد واجهت خللًا لم يسمح لي بالاتصال بالمضيف من خلال مضيف الانتقال باستخدام خيار ProxyJump واتضح أنه تم إصلاح هذه المشكلة ، لكن كان عليّ تحديث SSH العميل يدويًا. يمكنك تثبيت الإصدار الحالي من Win32 OpenSSH عن طريق تنزيل الرمز البريدي من قسم الإصدارات على github وتفريغه ، على سبيل المثال ، في C: \ Program Files \ OpenSSH . ويسمى برنامج طرف ثالث ssh.exe (على سبيل المثال، وذلك باستخدام البعيد وضع VSCode التنمية) من $ PATH (٪ SYSTEMROOT٪ \ SYSTEM32 \ المفتوح \)، كنت بحاجة إلى تغيير متغير البيئة. يتم تغيير متغيرات البيئة من خلال واجهة المستخدم الرسومية في ابدأ> تحرير متغيرات بيئة النظام ( ابدأ> تغيير متغيرات بيئة النظام ) ، هناك تحتاج إلى وضع طريقة جديدة أعلى من الإصدار القديم.

نظرًا لأن Systemd لا يعمل في WSL ، فهناك مشكلة في بدء تشغيل الخدمات مع بدء تشغيل النظام. هناك عدة طرق لتكوين بدء تشغيل ssh server تلقائيًا في WSL ، أسهل طريقة هي إنشاء مهمة في Task Scheduler ، حيث يمكنك تحديد أمر start server. على الإنترنت ، يمكنك العثور على تعليمات بدء تشغيل مختلفة من خلال البرامج النصية vbs أو ps1 أو bat . المشكلة في كل الطرق تقريبًا هي أن المشغل هو بدء تشغيل نظام التشغيل الرئيسي لنظام التشغيل Windows ، أي إذا تعطل WSL وكان عليك إعادة تشغيل النظام ( wsl -t ) ، فسيبدأ نظام Linux بدون تشغيل خدمة. عند بدء تشغيل Windows ، يبدأ توزيع WSL فقط عند الوصول إليه لأول مرة.

يمكنني استخدام خادم SSH على كمبيوتر محمول داخل WSL حتى أتمكن من الانتقال من جهاز لآخر. ونظرًا لحقيقة أنني أستخدم تقنيات إعادة توجيه منفذ ssh وتكوين مركزي مدروس جيدًا لعملاء SSH ، يمكنني الانتقال بشفافية إلى جميع الخوادم الخاصة بي ، بإدخال اسم مضيف بدلاً من العناوين. أي أنه حتى لو قمت بتوصيل أحد أجهزة الكمبيوتر المحمولة بشبكة الهاتف المحمول ، فسيقوم البرنامج الخفي autossh بالاتصال بمضيف القفز ولا يزال بإمكاني الانتقال إلى جهاز الكمبيوتر ، لن يكون هناك أي عائق أمام NAT. لذلك ، من المهم بالنسبة لي أن sshd هو دائما ما يصل.



طريقة العمل الوحيدة للوصول إلى SSH في WSL هي إعادة توجيه منفذ SSH. يمكن القيام بذلك من WSL نفسه باستخدام RemoteForward ، أو من خادم آخر على الشبكة المنزلية. قلة من الناس في حاجة إليها ، وهذا بالفعل مستوى متقدم ، لذلك سأقدم فقط أمرًا عمليًا:

❯❯ ssh -R '*:2363:*:22' -N -f mt.example.com

الآن ، عند الاتصال بالعنوان mt.example.com:2263 ، يمكنك الوصول مباشرة إلى WSL.

إذا كنت تخطط لرفع خادم SSH في WSL ، يجب أن تتذكر تكوين معلمات بدء تشغيل الخادم الضرورية في / etc / ssh / sshd_config . لتجنب التعارض مع ربط الخدمة على المنفذ 22 ، يجب تعطيل خادم OpenSSH في Windows أو إزالته تمامًا إذا كان مثبتًا ( التطبيقات> التطبيقات والميزات> إدارة الميزات الاختيارية ).

X الشحن


لقد اتضح أن هذه لحظة ممتعة حيث يوجد في Windows 10 أداة مساعدة clip.exe تتيح لك إعادة توجيه stdout مباشرة إلى حافظة Windows. هذا مناسب للاستخدام في برامج مثل tmux ، وبفضل إعادة توجيه خادم X ، يمكن أيضًا نسخ النص من مضيفات بعيدة. لكي يعمل كل شيء ، يجب أن يكون لديك دائمًا خادم X يعمل على Windows وتعيين المتغير $ DISPLAY بشكل صحيح.

نظرية مملة قليلا. على أنظمة لا شىء * تشغيل X، وهناك أنواع مختلفة من لوحات الاعلانات (الابتدائية والثانوية، الحافظة)، فإنه ليس من المهم جدا في سياق هذه المقالة، ولكن من المهم لفهم شامل لآلية. هناك نوعان من الأدوات المساعدة (xclip و xsel) للعمل مع الحافظة على Linux. كلتا الأدوات المساعدة لها وظائف مماثلة ، في xsel أكبر قليلاً ، لكن الوظيفة الأساسية اللازمة لإعادة توجيه محتويات المخزن المؤقت هي نفسها. في تطبيقات X ، يقع النص المحدد في التحديد الأساسي ، ويتم إدراجه بواسطة زر الماوس الأوسط ، في xclip و xsel يتم استخدام التحديد الأساسي افتراضيًا.

على سبيل المثال ، لنسخ محتويات متغير إلى المخزن المؤقت الافتراضي ، تحتاج إلى تمرير stdout إلى stdin من الأداة المساعدة xclip ، دون معلمات إضافية:

❯❯ echo -n $DISPLAY | xclip

ولعرض محتويات المخزن المؤقت الافتراضي ، قم بتشغيل xclip باستخدام مفتاح التبديل -o :

❯❯ xclip -o
172.20.160.1:0


من أجل إعادة توجيه الحافظة من خلال خادم X وتشغيل التطبيقات الرسومية على خادم X المحلي ، تحتاج إلى تعيين عنوان IP ، وهو العبارة الافتراضية لـ WSL ، في المتغير $ DISPLAY . حتى الآن ، لم يتم اختراع أي شيء أفضل من أخذه من solutionv.conf (والذي يتم إنشاؤه تلقائيًا بواسطة Windows). لذلك ، فإن أسهل طريقة هي تسجيل تصدير متغير DISPLAY $ في ملف تعريف shell (على سبيل المثال ، ~ / .zshrc لـ zsh).

❯❯ echo "export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0" >> ~/.zshrc



كخادم X ، اخترت VcXsrv المجانية ، ويمكن أن تعمل مع المخزن المؤقت ، ولها أوضاع عرض نافذة مختلفة ويتم إطلاقها من سطر الأوامر مع الخيارات المحددة. باستخدام الرابط إلى gist ، يمكنك رؤية جميع الخيارات.

يمكنك إنشاء مهمة التشغيل التلقائي لخادم X في "برنامج جدولة المهام" مثل هذا:

Triggers: At startup
Actions: Start a program
____Program: "%ProgramFiles%\VcXsrv\vcxsrv.exe"
____Arguments: -wgl -dpi auto -ac -multiwindow


مفاتيح سه


بحيث يمكن للبرامج من Windows استخدام مفاتيح SSH (على سبيل المثال ، محرر عند العمل مع مستودع GitHub عن بعد) ، وفي الوقت نفسه لا توجد نسخة ثانية من المفاتيح في WSL ، فمن الأفضل إنشاء مفاتيح في Windows ٪ HOMEPATH٪ /. Ssh وإنشاء روابط في المنزل الدلائل WSL.

ssh-keygen -f /mnt/c/Users/${WIN_USER}/.ssh/id_rsa -b 4096
ln -sf /mnt/c/Users/${WIN_USER}/.ssh/id_rsa ${HOME}/.ssh/id_rsa
ln -sf /mnt/c/Users/${WIN_USER}/.ssh/id_rsa.pub ${HOME}/.ssh/id_rsa.pub


أو ، في ~ / .ssh / config ، يمكنك تحديد المعلمة IdentityFile عن طريق تحديد المسار إلى المفاتيح على قرص Windows:

Host *
IdentityFile /mnt/c/Users/${WIN_USER}/.ssh/id_rsa


إذا تم نسخ المفاتيح من مكان ما ولم يتم تعيين أذونات الملف بشكل صحيح ، فقم بتصحيح الأذونات:

chmod 600 /mnt/c/Users/${WIN_USER}/.ssh/id_rsa
chmod 644 /mnt/c/Users/${WIN_USER}/.ssh/id_rsa.pub
chmod 700 /mnt/c/Users/${WIN_USER}/.ssh




وبالتالي ، عند الوصول إلى إعدادات مفاتيح SSH ، يتم تعريف المستخدم بشكل فريد من خلال مجموعة واحدة من المفاتيح في مكان واحد ، عند استخدام تطبيقات Windows و Linux. يمكنك الآن إضافة المفتاح العمومي إلى الخادم / الخدمات ، حيث ستحتاج إلى الانتقال من هذا الكمبيوتر. إذا كانت الشبكة المنزلية الخاصة بك لديه الأجهزة الأخرى التي يلزم وصول SSH، والحق في نسخ المفتاح العمومي الخاص بك على الخادم (سه-نسخة-ID)، ولكن لا نسخ مفاتيح ملقم واحد إلى آخر. نظرًا لأنه من الممكن (والضروري) استخدام ssh-agent عند العمل من خلال SSH ، عند الاتصال من خادم إلى آخر ، يأخذ الوكيل في الحسبان حدوث التفويض على المفتاح المعاد توجيهه. لكي يعمل كل شيء بشكل صحيح وكما هو متوقع ، تحتاج إلى العناية بملف ~ / .ssh / config ، حيث تحتاج إلى تسجيل جميع الخيارات الضرورية.

Host *
TCPKeepAlive yes
ServerAliveInterval 30
ServerAliveCountMax 3
ForwardAgent yes
AddKeysToAgent yes
ForwardX11 yes
ForwardX11Trusted yes


أي محطة لاختيار العمل في لينكس على ويندوز


أولاً ، أريد إجراء مراجعة صغيرة لأصداف الأجهزة الطرفية الموجودة لنظام Windows والتي يمكنها تشغيل WSL. من بين المستخدمين ، يحظى معالج MobaXterm الوظيفي بشعبية ، حيث يمكنه إنشاء جلسات مختلفة ، بما في ذلك الجلسات الرسومية (WSL ، bash / zsh ، Mosh ، RDP ، VNC ، وما إلى ذلك) ، مما يتيح لك إنشاء وحدات ماكرو وتشغيل البرامج النصية ، وله العديد من الإعدادات والميزات ، وكيل ssh ، و autorun ssh port forwarding ، وحتى لديه خادم ftp / tftp / http مدمج ، لكن المنتج مغلق المصدر ومدفوع. Hyper هو محاكي آخر أكثر حداثة يسمح لك بتشغيل WSL shell ، تم بناء المحطة على HTML / JS / CSS ويتم توسيعها باستخدام المكونات الإضافية في شكل وحدات node.js ( قائمة رائعة ). هناك محطات أخرى تسمح لك بتشغيل WSL بدرجات متفاوتة من العكازات ( ConEmu ، شوكة Cmder ، WSLtty ، وما إلى ذلك) ، لكنني سأتركها دون مراقبة.



علاوة على ذلك ، سنتحدث في هذه المقالة عن Windows Terminal ، التي انتقلت إليها مؤخرًا ، وحتى الآن لا أشعر بمشاعر إيجابية. المحطة لا تزال في مرحلة تجريبية ، لكنها تعمل بشكل مستقر للغاية. من بين الميزات التي يتم تنفيذها حاليًا multitab ، وفصل اللوحات (تقسيم) ، وملفات تخصيص مخصصة لتوصيلات الأجهزة الطرفية ، وأنظمة الألوان ، جيدًا ، لا يوجد شيء أكثر من القائمة. لكن هذه الوظيفة كافية تمامًا ، حتى أنني أحب أن البرنامج لا يتم تحميله بشكل مفرط - كما لو أن المطورين يلتزمون بمبدأ KISS .

تطورت المحطة الطرفية من مشروع Windows Console (ConPTY) ، وتعلم كيفية دعم تسلسل ANSI / VT ، واللون الحقيقي RGB 24 بت ، و UTF-8. باتباع الروابط ( البداية ، والاستمرار ) على Habré ، ترجمة رائعة لسلسلة من منشورات مدونة Windows Command-Line: داخل وحدة التحكم في Windows ، والتي تحكي عن تاريخ إنشاء المحطات الطرفية ، والمعايير ذات الصلة بنقل تسلسلات الهروب ، وصفحات الرموز ، يونيكود ، وظهور المحاكيات الطرفية وفي المستقبل بالفعل تطور سطر الأوامر ويندوز. التكنولوجيون قد تكون مهتمة. يحافظ الفريق الهندسي الذي يعمل على مشروع مفتوح المصدر على نظام تشغيل Windows Command Line ، وهو أكثر من مخصص بالكامل لخدمة WSL و Windows Terminal. لم أكن أصدق قبل تلك اللحظة أنني سأراقب باهتمام تطوير منتجات MS ، لكن ما يفعلونه كجزء من تطوير WSL و Terminal و VSCode يستحق الاحترام حقًا. كيف بدأ تطوير WSL ، تم وصفه في قصص المصادر المفتوحة لـ Microsoft (توجد ترجمة على Habré). بالمناسبة ، كانت Microsoft عضوًا بلاتينيًا في Linux Foundation منذ عام 2016.

تثبيت وتكوين ويندوز الطرفية


يمكنك تثبيت Windows Terminal من متجر Windows ، أو عن طريق تنزيل الملف الثنائي من قسم الإصدارات في جيثب المشروع ، كما تتوفر جميع المعلومات والتعليمات والأسئلة الشائعة ذات الصلة. يتطلب الجهاز إصدار Windows 1903 على الأقل وإنشاء 18362 . يُفضل التثبيت من خلال متجر Windows ، لأنه من الأسهل التحديث في هذه الحالة ، مباشرة من المتجر. يتم إصدار التحديثات بانتظام ؛ تم وضع خريطة طريق للنسخة الأولى من المحطة على جيثب. في الوقت الحالي ، تم بالفعل تطبيق جميع ميزات الإصدار 1 (وفقًا للخطة ، لتنفيذ جميع التحسينات بحلول نهاية عام 2019) ، ثم بعد بضعة أشهر من العمل على إصلاح الخلل ، وفي أبريل 2020 ، تم التخطيط لإصدار الإصدار 1.0 من الإصدار 1.0 من Terminal الرسمي. من الجيد أن مرض التصلب العصبي المتعدد هو الآن على جيثب ، وقد تعلمت البرمجيات الخاصة بهم لإظهار سجلات والأخطاء واضحة وأي مشاكل googled بسهولة.



لا توجد العديد من الإعدادات في الجهاز بعد ، لكنها كافية للعمل المريح ، والمنتج قيد التطوير بنشاط ، وهناك على github حيث يمكن للمستخدمين إنشاء طلب ميزة أو تقرير الشوائب. يشارك المطورون في مناقشة المشكلات مع المستخدمين ، وغالبًا ما يقدمون حلولاً عند اكتشاف الأخطاء.



يتم تخزين التكوين بتنسيق json ، بعد حفظه يتم تطبيقه على الفور. يعد هذا الأمر مناسبًا فقط لأنه يمكنك تطبيق الممارسات الجيدة لإدارة تكوين بيئة العمل - أقوم بتخزين جميع تكوينات Linux في مستودع git ، على Windows I فقط استخدم VSCode من أداة العمل ، والتي يمكنها مزامنة التكوين عبر github gist ، وحفظ تهيئة مساحة العمل المحلية بشكل منفصل في dotfiles . يتحرك Terminal في نفس الاتجاه ، باستخدام نفس مفاتيح الاختصار وتنسيق التكوين مثل VSCode. بالمناسبة ، يعد تحرير التكوين مناسبًا عبر VSCode ، خاصة إذا كنت تستخدم بالفعل هذا المحرر الممتاز من MS. يحتوي ملف التكوين الطرفي بالفعل على العديد من الإعدادات الافتراضية ، ويسمح لك المحرر الصحيح بمشاهدة جميع الخيارات مع وصف لخيارات المفتاح والقيمة من المخطط (يكون هذا مناسبًا بشكل خاص عندما لا يحتوي المشروع على وثائق كاملة). بالإضافة إلى ذلك ، تتوفر جميع شرائح IDE في شكل الإكمال التلقائي ، والتحسس intellisense ، والتحقق من بناء الجملة ، والتنسيق ، إلخ.



وثائق المطورين متاحة هنا ، ولكن هنا صفحة صغيرة من الوثائق للمستخدمين في الوقت الحالي. يتم تخصيص صفحة منفصلة للإعدادات المكتوبة في ملف تكوين json. من هناك يمكنك معرفة أن الإعدادات مقسمة هيكلياً إلى:

  • عام (ملف التعريف الافتراضي ، الحجم الأولي لنافذة المحطة الطرفية ، السمة ، إلخ.)
  • الارتباطات الرئيسية
  • ملفات التعريف (الإعدادات الخاصة بكل محطة)
  • مخططات (مخططات الألوان)

هناك شيء مثل ملفات التعريف الديناميكية ، تظهر في التكوين تلقائيًا ولها خاصية المصدر . WSL Azure Cloud Shell. WSL (, Ubuntu), GUID , source , commandline wsl -d {DistroName} .


- , . :


Fira Code , . , CLI , , .



Windows . github releases .

( fontFace ) Character Map ( ). , Start -> Settings -> Personalization -> Fonts , , , .



استنتاج


, , Windows Terminal WSL. ZSH tmux, VM dotfiles . , / / . Docker WSL 2 , , .

, , - . - , , . - , , .

References


Source: https://habr.com/ru/post/ar481746/


All Articles