В ناقشنا تشغيل خادم VNC على جهاز افتراضي من أي نوع. يحتوي هذا الخيار على الكثير من العيوب، وأهمها هو المتطلبات العالية لإنتاجية قنوات نقل البيانات. سنحاول اليوم الاتصال بسطح مكتب رسومي على Linux عبر RDP (بروتوكول سطح المكتب البعيد). يعتمد نظام VNC على نقل صفائف البكسل باستخدام بروتوكول RFB (Remote Framebuffer)، ويسمح لك RDP بإرسال أساسيات رسومات أكثر تعقيدًا وأوامر عالية المستوى. يتم استخدامه عادةً لاستضافة خدمات سطح المكتب البعيد على نظام التشغيل Windows، ولكن تتوفر أيضًا خوادم Linux.
главление:
تثبيت البيئة الرسومية
سنأخذ جهازًا افتراضيًا مزودًا بـ Ubuntu Server 18.04 LTS مع مركزين للحوسبة وأربعة غيغابايت من ذاكرة الوصول العشوائي ومحرك أقراص ثابت (HDD) يبلغ 10 غيغابايت. التكوين الأضعف غير مناسب لسطح المكتب الرسومي، على الرغم من أن هذا يعتمد على المهام التي يتم حلها. لا تنس استخدام الرمز الترويجي Habrahabr10 للحصول على خصم XNUMX% على طلبك.

يتم تثبيت بيئة سطح المكتب بكل التبعيات بالأمر التالي:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsكما في الحالة السابقة، اخترنا XFCE نظرًا لمتطلبات موارد الحوسبة المنخفضة نسبيًا.
الترويس للخادم وتثبيت البرامج
غالبًا ما يتم نشر الأجهزة الافتراضية مع الترجمة باللغة الإنجليزية فقط. على سطح المكتب، قد تحتاج إلى اللغة الروسية، وهي سهلة الإعداد. أولاً، لنقم بتثبيت الترجمات لبرامج النظام:
sudo apt-get install language-pack-ruلنقم بإعداد الترجمة:
sudo update-locale LANG=ru_RU.UTF-8يمكن تحقيق نفس التأثير عن طريق تحرير ملف /etc/default/locale.
لتوطين GNOME وKDE، يحتوي المستودع على حزم language-pack-gnome-ru وlanguage-pack-kde-ru - ستحتاج إليها إذا كنت تستخدم برامج من بيئات سطح المكتب هذه. في XFCE، يتم تثبيت الترجمات مع التطبيقات. بعد ذلك يمكنك تثبيت القواميس:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictبالإضافة إلى ذلك، قد يكون تثبيت الترجمات مطلوبًا لبعض البرامج التطبيقية:
# Браузер Firefox
sudo apt-get install firefox firefox-locale-ru
# Почтовый клиент Thunderbird
sudo apt-get install thunderbird thunderbird-locale-ru
# Офисный пакет LibreOffice
sudo apt-get install libreoffice libreoffice-l10n-ru libreoffice-help-ruهذا يكمل إعداد بيئة سطح المكتب، ويبقى فقط تكوين خادم RDP.
تثبيت وتكوين خادم RDP
تحتوي مستودعات Ubuntu على خادم Xrdp موزع مجانًا، والذي سنستخدمه:
sudo apt-get install xrdpإذا سارت الأمور على ما يرام، فيجب أن يبدأ الخادم تلقائيًا:
sudo systemctl status xrdp 
يعمل خادم Xrdp بحقوق مستخدم xrdp ويأخذ افتراضيًا الشهادة /etc/ssl/private/ssl-cert-snakeoil.key، والتي يمكن استبدالها بشهادتك الخاصة. لتتمكن من الوصول لقراءة الملف، تحتاج إلى إضافة المستخدم إلى مجموعة ssl-cert:
sudo adduser xrdp ssl-certيمكن العثور على الإعدادات الافتراضية في الملف /etc/default/xrdp، وجميع ملفات تكوين الخادم الأخرى موجودة في الدليل /etc/xrdp. المعلمات الرئيسية موجودة في ملف xrdp.ini، والتي لا تحتاج إلى تغيير. تم توثيق التكوين بشكل جيد، وتم تضمين صفحات الإدارة المقابلة:
man xrdp.ini
man xrdpكل ما تبقى هو تحرير البرنامج النصي /etc/xrdp/startwm.sh، والذي يتم تنفيذه عند تهيئة جلسة المستخدم. أولاً، لنقم بعمل نسخة احتياطية من البرنامج النصي من التوزيعة:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shلبدء تشغيل بيئة سطح المكتب XFCE، ستحتاج إلى برنامج نصي يشبه هذا:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4يرجى ملاحظة: من الأفضل كتابة المسار الكامل للملفات القابلة للتنفيذ في البرامج النصية - وهذه عادة جيدة. لنجعل البرنامج النصي قابلاً للتنفيذ وفي هذه المرحلة يمكن اعتبار إعداد خادم Xrdp مكتملًا:
sudo chmod 755 /etc/xrdp/startwm.shإعادة تشغيل الخادم:
sudo systemctl restart xrdp
إعداد جدار الحماية
افتراضيًا، يستمع Xrdp إلى منفذ TCP رقم 3389 على كافة الواجهات. اعتمادًا على تكوين الخادم الظاهري، قد تحتاج إلى تكوين جدار حماية Netfilter. في نظام التشغيل Linux، يتم ذلك عادةً باستخدام الأداة المساعدة iptables، ولكن في نظام Ubuntu، من الأفضل استخدام ufw. إذا كان عنوان IP الخاص بالعميل معروفًا، فسيتم تنفيذ التكوين باستخدام الأمر التالي:
sudo ufw allow from IP_Address to any port 3389يمكنك السماح بالاتصالات من أي IP مثل هذا:
sudo ufw allow 3389يدعم بروتوكول RDP التشفير، لكن تعريض خادم Xrdp للشبكات العامة يعد فكرة سيئة. إذا لم يكن لدى العميل عنوان IP ثابت، فيجب أن يستمع الخادم فقط إلى المضيف المحلي لزيادة الأمان. ومن الأفضل الوصول إليه عبر نفق SSH، والذي سيعيد توجيه حركة المرور بشكل آمن من جهاز الكمبيوتر العميل. لدينا نهج مماثل لخادم VNC.
الاتصال بخادم RDP
للعمل مع بيئة سطح المكتب، من الأفضل إنشاء مستخدم منفصل لا يتمتع بالامتيازات:
sudo adduser rdpuser 
دعنا نضيف المستخدم إلى مجموعة sudo حتى يتمكن من أداء المهام المتعلقة بالإدارة. إذا لم تكن هناك حاجة ، يمكن تخطي هذه الخطوة:
sudo gpasswd -a rdpuser sudoيمكنك الاتصال بالخادم باستخدام أي عميل RDP، بما في ذلك عميل Windows Remote Desktop Services المدمج. إذا كان Xrdp يستمع إلى الواجهة الخارجية، فلن تكون هناك حاجة إلى إجراءات إضافية. يكفي تحديد عنوان VPS IP واسم المستخدم وكلمة المرور في إعدادات الاتصال. بعد الاتصال سنرى شيئا مثل هذا:

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

إذا كان خادم Xrdp يستمع فقط إلى المضيف المحلي، فيجب تعبئة حركة المرور على جهاز الكمبيوتر العميل في نفق SSH (يجب تشغيل sshd على VPS). في نظام التشغيل Windows، يمكنك استخدام عميل SSH رسومي (على سبيل المثال، PuTTY)، وفي أنظمة UNIX تحتاج إلى الأداة المساعدة ssh:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipبعد تهيئة النفق، لن يتصل عميل RDP بالخادم البعيد، بل بالمضيف المحلي.
يكون الأمر أكثر صعوبة مع الأجهزة المحمولة: يجب شراء عملاء SSH القادرين على رفع النفق، وفي iOS وiPadOS، يكون التشغيل في الخلفية لتطبيقات الطرف الثالث أمرًا صعبًا بسبب التحسين الجيد جدًا لاستهلاك الطاقة. على iPhone وiPad، لن تتمكن من إنشاء نفق في تطبيق منفصل؛ ستحتاج إلى تطبيق حصاد يمكنه بنفسه إنشاء اتصال RDP عبر SSH. مثل، على سبيل المثال .
مدير الجلسة وجلسات المستخدم
يتم تنفيذ القدرة على العمل متعدد المستخدمين مباشرة في خادم Xrdp ولا تتطلب تكوينًا إضافيًا. بعد بدء الخدمة عبر systemd، يتم تشغيل عملية واحدة في الوضع الخفي، وتستمع على المنفذ 3389 وتتواصل عبر المضيف المحلي مع مدير الجلسة.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
عادةً ما يكون مدير الجلسة غير مرئي للمستخدمين، لأنه يتم نقل تسجيل الدخول وكلمة المرور المحددين في إعدادات العميل إليه تلقائيًا. إذا لم يحدث ذلك أو حدث خطأ أثناء المصادقة، فستظهر نافذة تسجيل دخول تفاعلية بدلاً من سطح المكتب.

يتم تحديد التشغيل التلقائي لمدير الجلسة في الملف /etc/default/xrdp، ويتم تخزين التكوين في /etc/xrdp/sesman.ini. افتراضيا يبدو شيء من هذا القبيل:
[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=true
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh
[Security]
AllowRootLogin=true
MaxLoginRetry=4
TerminalServerUsers=tsusers
TerminalServerAdmins=tsadmins
; When AlwaysGroupCheck=false access will be permitted
; if the group TerminalServerUsers is not defined.
AlwaysGroupCheck=false
[Sessions]ليس عليك تغيير أي شيء هنا، كل ما عليك فعله هو تعطيل تسجيل الدخول باستخدام حقوق الجذر (AllowRootLogin=false). لكل مستخدم مرخص له في النظام، يتم إطلاق عملية xrdp منفصلة: إذا قمت بقطع الاتصال دون إنهاء الجلسة، فستستمر عمليات المستخدم في العمل بشكل افتراضي، ويمكنك الاتصال بالجلسة مرة أخرى. يمكن تغيير الإعدادات في الملف /etc/xrdp/sesman.ini (قسم [الجلسات]).
تبديل تخطيطات لوحة المفاتيح
عادةً لا توجد مشكلات في الحافظة ذات الاتجاهين، ولكن مع تخطيط لوحة المفاتيح الروسية، سيتعين عليك التلاعب قليلاً (يجب أن تكون اللغة الروسية موجودة بالفعل ). لنقم بتعديل إعدادات لوحة المفاتيح لخادم Xrdp:
sudo nano /etc/xrdp/xrdp_keyboard.iniتحتاج إلى إضافة الأسطر التالية إلى نهاية ملف التكوين:
[rdp_keyboard_ru]
keyboard_type=4
keyboard_type=7
keyboard_subtype=1
model=pc105
options=grp:alt_shift_toggle
rdp_layouts=default_rdp_layouts
layouts_map=layouts_map_ru
[layouts_map_ru]
rdp_layout_us=us,ru
rdp_layout_ru=us,ruكل ما تبقى هو حفظ الملف وإعادة تشغيل Xrdp:
sudo systemctl restart xrdpكما ترون، ليس من الصعب إعداد خادم RDP على Linux VPS، ولكن لقد ناقشنا بالفعل إعداد VNC. بالإضافة إلى هذه التقنيات، هناك خيار آخر مثير للاهتمام: نظام X3Go الذي يستخدم بروتوكول NX 2 المعدل. سنتعامل معها في المنشور القادم.
المصدر: www.habr.com
