FreeRDP: كيف يعمل عميل RDP المفتوح المصدر وما علاقته بـWindows Remote Desktop؟

مشاركة

FreeRDP هو تنفيذ مفتوح المصدر لبروتوكول Remote Desktop Protocol (RDP) الذي طورته Microsoft، وليس نسخة من تطبيق Windows Remote Desktop ولا خدمة منفصلة تستبدل خادم Remote Desktop في Windows. الفكرة الأساسية أبسط: إذا كان جهاز Windows أو خادم آخر يتحدث RDP، يستطيع عميل مبني على FreeRDP التفاوض معه وعرض سطح المكتب البعيد وإرسال لوحة المفاتيح والفأرة وتشغيل ميزات مثل الحافظة والصوت وإعادة توجيه الأقراص.

جهاز Linux يشغّل FreeRDP للاتصال بسطح مكتب Windows بعيد عبر RDP.

المشروع، المرخص بموجب Apache 2.0، لا يقتصر على برنامج xfreerdp الذي يستخدمه كثير من مستخدمي Linux؛ بل يتكون من مكتبة RDP أساسية، وواجهات عملاء لمنصات مختلفة، وطبقة WinPR المحمولة، ومجموعة كبيرة من Virtual Channels. ويمكن مراجعة مستودع FreeRDP الرسمي لمعرفة البنية الحالية للمشروع.

وحتى 26 أغسطس 2026، أحدث إصدار مستقر منشور من المشروع هو FreeRDP 3.30.0 الصادر في 16 يوليو 2026. وقد وصفه المشروع بأنه إصدار أمني وإصلاح أخطاء وأوصى بالتحديث، لذلك لا ينبغي الاعتماد على أرقام الإصدارات القديمة الموجودة في شروحات سابقة. يمكن التحقق من الحالة الحالية من صفحة إصدارات FreeRDP الرسمية.

ما هو RDP أصلًا؟

RDP هو بروتوكول اتصال يتيح التحكم في نظام بعيد عبر الشبكة. ووفق مواصفات Microsoft المفتوحة لـRDP، ينقل الخادم معلومات العرض والرسوميات إلى العميل، بينما يرسل العميل مدخلات المستخدم مثل لوحة المفاتيح والفأرة إلى الجهاز البعيد.

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

إذا كانت مفاهيم مثل عنوان IP والمنافذ وTCP والخادم والعميل جديدة عليك، فمن المفيد أولًا فهم أساسيات الشبكات وكيف تتواصل الأجهزة عبر الشبكة، لأن FreeRDP يعمل فوق اتصال شبكي عادي بين عميل RDP وخادم RDP.

ما علاقة FreeRDP بـWindows Remote Desktop؟

العلاقة هي البروتوكول، وليس البرنامج نفسه.

عند تشغيل Remote Desktop Connection المدمج في Windows عبر mstsc.exe، فأنت تستخدم عميل Microsoft لتنفيذ RDP. أما عند تشغيل xfreerdp على Linux فأنت تستخدم تنفيذًا مستقلاً مفتوح المصدر للبروتوكول نفسه.

العنصر Microsoft Remote Desktop FreeRDP
RDP البروتوكول الذي طورته Microsoft ينفذ البروتوكول للتوافق معه
العميل مثل Remote Desktop Connection ‏(mstsc.exe) وعملاء Microsoft الآخرين xfreerdp وواجهات FreeRDP الأخرى
الشفرة المصدرية عميل Microsoft مملوك للشركة مفتوح المصدر بترخيص Apache 2.0
المنصات تختلف حسب عميل Microsoft المستخدم قاعدة شفرة متعددة المنصات مع عملاء لـLinux وWindows وmacOS وغيرها

لهذا يستطيع جهاز Linux مثلًا الاتصال مباشرة بجهاز Windows يعمل عليه Remote Desktop. من وجهة نظر جهاز Windows، الطرف الآخر عميل RDP يتفاوض معه وفق البروتوكول؛ ولا يشترط أن يكون العميل هو mstsc.exe.

هذا لا يعني أن FreeRDP يحول أي نسخة Windows تلقائيًا إلى خادم RDP. توضح وثائق Microsoft الخاصة بتمكين Remote Desktop أن إصدارات Windows Professional وEnterprise وEducation وإصدارات Windows Server تستطيع العمل كمضيف لاتصالات Remote Desktop الواردة، بينما Windows Home لا يعمل كمضيف Remote Desktop بهذه الميزة. تثبيت FreeRDP على الجهاز الآخر لا يغير هذا القيد.

كيف تتكون بنية FreeRDP؟

أفضل طريقة لفهم المشروع هي عدم النظر إلى xfreerdp باعتباره FreeRDP كله. الواجهة التي تراها هي الطبقة الخارجية فقط، بينما يحدث تنفيذ RDP الحقيقي في مكتبات ومكونات أخرى.

يمكن تبسيط المسار إلى:

Client UI → libfreerdp → RDP + Security + Virtual Channels → Network → RDP Server

1. libfreerdp: قلب تنفيذ RDP

libfreerdp هي المكتبة الأساسية التي تحتوي على الأجزاء المشتركة لتنفيذ البروتوكول. ويقسم المصدر الحالي لـlibfreerdp العمل إلى مكونات تشمل Core وCrypto وCodec وGDI وCache وPrimitives وغيرها.

عمليًا، هذه الطبقة تتولى مهام مثل:

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

هذه البنية هي ما يسمح لتطبيق آخر باستخدام FreeRDP كمكتبة بدل إعادة تنفيذ RDP كاملًا من الصفر.

2. Clients: الواجهة الخاصة بكل منصة

بعد المكتبة الأساسية تأتي تطبيقات العميل. وتظهر شجرة العملاء الحالية في المستودع مجلدات خاصة بـX11 وWayland وSDL وWindows وMac وAndroid وiOS.

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

على Linux، أشهر مثال هو xfreerdp، وهو عميل X11. وقد تسمي بعض توزيعات Linux الثنائية الخاصة بالإصدار 3 باسم xfreerdp3 بدل xfreerdp، لذلك يجب استخدام الاسم الذي توفره حزمة التوزيعة لديك.

كما يضم المشروع عملاء أو واجهات تستهدف SDL وWayland وWindows وmacOS. وجود هذه المكونات في المصدر لا يعني بالضرورة أن كل توزيعة أو مدير حزم يوفر جميعها بالطريقة نفسها؛ فالميزات المبنية فعليًا تعتمد على طريقة تجميع الحزمة والتبعيات التي فعّلها موزع النظام.

3. WinPR: لماذا توجد طبقة Windows داخل مشروع متعدد المنصات؟

WinPR اختصار لـWindows Portable Runtime. وهي طبقة محمولة توفر مجموعة من أنواع البيانات والواجهات والمرافق الشبيهة بتلك المستخدمة في بيئة Windows، بحيث تستطيع أجزاء كبيرة من FreeRDP استخدام نمط برمجي موحد على أنظمة مختلفة.

يحتوي WinPR في المستودع الحالي على المكتبة والرؤوس البرمجية والأدوات المرتبطة بهذه الطبقة، وتشمل الشفرة مجالات مثل التزامن، والسلاسل، والتشفير، وSSPI، والسجلات، ومعالجة الأوامر وغيرها.

WinPR ليس Wine، وليس طبقة هدفها تشغيل تطبيقات Windows العادية على Linux. وظيفته هنا مساعدة FreeRDP نفسه على مشاركة شفرة محمولة بين الأنظمة وتقليل الاختلافات البرمجية بين Windows والمنصات الأخرى.

4. Virtual Channels: كيف تصل الحافظة والصوت والأقراص إلى جلسة RDP؟

سطح المكتب والصورة ليستا كل شيء في RDP. يستخدم البروتوكول ما يسمى Virtual Channels لنقل بيانات وظائف متخصصة داخل الجلسة.

توضح شجرة Channels الحالية في FreeRDP وحدات كثيرة، من بينها:

القناة أو الوحدة وظيفتها
cliprdr إعادة توجيه الحافظة بين النظامين
rdpdr البنية الأساسية لإعادة توجيه أجهزة وموارد مثل الأقراص
rdpsnd الصوت الخارج من الجلسة البعيدة
audin إدخال الصوت والميكروفون
drdynvc إدارة Dynamic Virtual Channels
rail RemoteApp أو Remote Programs
rdpgfx Graphics Pipeline الحديثة في RDP
smartcard إعادة توجيه البطاقات الذكية
printer إعادة توجيه الطابعات

وتوضح Microsoft في مواصفة Dynamic Virtual Channel Extension أن القنوات الديناميكية تُنشأ فوق آلية القنوات الافتراضية الموجودة في جلسة RDP، بحيث تستطيع مكونات العميل والخادم إنشاء قنوات منطقية لنقل أنواع متخصصة من البيانات.

الحافظة مثال واضح: تصف مواصفة Clipboard Virtual Channel من Microsoft آلية مزامنة البيانات بين حافظة الجهاز المحلي وحافظة النظام البعيد. FreeRDP ينفذ هذه الامتدادات بدل ابتكار طريقة خاصة غير متوافقة مع RDP.

مخطط يوضح Clients وlibfreerdp وWinPR وVirtual Channels واتصال FreeRDP بخادم RDP على Windows.

ماذا يحدث عند الاتصال بجهاز Windows عبر xfreerdp؟

لنفترض أن لديك جهاز Linux وتريد الاتصال بجهاز Windows يدعم Remote Desktop.

  1. يشغل المستخدم xfreerdp ويحدد اسم الخادم أو عنوانه واسم المستخدم وإعدادات الجلسة.
  2. ينشئ FreeRDP الاتصال الشبكي بالخادم. المنفذ الافتراضي لخدمة Remote Desktop في Windows هو TCP 3389 ما لم يغيره المسؤول.
  3. يتفاوض الطرفان على إصدار البروتوكول والقدرات وطرق الأمان والرسوميات المتاحة.
  4. تجري مرحلة المصادقة حسب إعداد الخادم، مع دعم سيناريوهات مثل Network Level Authentication.
  5. بعد إنشاء الجلسة، يبدأ الخادم بإرسال معلومات الرسوميات إلى العميل، بينما يعيد FreeRDP إرسال أحداث الإدخال إلى الخادم.
  6. تُنشأ القنوات المطلوبة للحافظة أو الصوت أو الأقراص أو الخدمات الإضافية وفق ما دعمه الطرفان وما سمحت به السياسة.

ولهذا فإن الأداء أو الميزة لا يعتمدان على FreeRDP وحده. يجب أن يدعم العميل والخادم معًا الامتداد المطلوب، وقد تمنع Group Policy أو إعدادات RDS بعض عمليات إعادة التوجيه حتى لو كان FreeRDP قادرًا عليها.

أمثلة عملية باستخدام xfreerdp

في توزيعات تستخدم الاسم xfreerdp3 يمكن إنشاء اتصال أساسي مثل:

xfreerdp3 /v:192.168.1.50 /u:USERNAME

وفي الأنظمة التي يكون اسم البرنامج فيها xfreerdp فقط:

xfreerdp /v:192.168.1.50 /u:USERNAME

عدم وضع كلمة المرور في الأمر يسمح بإدخالها عند الحاجة بدل كتابتها مباشرة في سطر الأوامر.

تغيير الدقة تلقائيًا مع حجم النافذة

xfreerdp3 /v:pc.example.local /u:USERNAME /dynamic-resolution

يسمح /dynamic-resolution بتحديث دقة الجلسة عند تغيير حجم نافذة العميل عندما يكون الخادم والمسار المستخدم قادرين على ذلك.

تشغيل ملء الشاشة

xfreerdp3 /v:pc.example.local /u:USERNAME /f

تفعيل الحافظة صراحة

xfreerdp3 /v:pc.example.local /u:USERNAME +clipboard

إتاحة مجلد محلي داخل الجلسة

يمكن استخدام إعادة توجيه الأقراص، على سبيل المثال:

xfreerdp3 /v:pc.example.local /u:USERNAME /drive:shared,/home/user/shared

سيظهر المورد المعاد توجيهه للجلسة البعيدة إذا سمحت إعدادات الخادم بذلك.

الاتصال بحساب Domain

xfreerdp3 /v:rdp.example.local /u:DOMAIN\username /dynamic-resolution

خيارات FreeRDP كثيرة وتتغير بعض التفاصيل بين الإصدارات والبنيات، لذلك يفضل فحص الخيارات التي يدعمها البرنامج المثبت لديك باستخدام:

xfreerdp3 /help

أو:

xfreerdp3 /buildconfig

فالأمر الثاني مفيد لمعرفة المكونات والميزات التي جرى تضمينها عند بناء الحزمة.

هل يعمل FreeRDP على Linux فقط؟

لا. ارتباط اسم FreeRDP بـLinux يرجع بدرجة كبيرة إلى شهرة xfreerdp هناك، لكن بنية المشروع متعددة المنصات.

  • Linux: تتوفر واجهات X11 وWayland وSDL، حسب الحزمة وطريقة البناء.
  • Windows: يحتوي المشروع على عميل Windows خاص به، وبالتالي يمكن استخدام تنفيذ FreeRDP حتى من داخل Windows بدل عميل Microsoft في بعض السيناريوهات.
  • macOS: يحتوي المشروع على مكونات Mac وSDL، كما يمكن أن توفر أنظمة الحزم Builds مناسبة للمنصة.
  • Android وiOS: توجد شفرات عملاء لهذه المنصات أيضًا ضمن المستودع.

الأهم هنا هو التفريق بين دعم المشروع للمنصة وبين أسماء الحزم والبرامج التنفيذية التي توفرها توزيعة أو مدير حزم معين.

FreeRDP ليس خادم Windows ولا VPN ولا خدمة تحكم سحابية

هناك ثلاثة التباسات شائعة يجب تجنبها.

أولًا، تشغيل FreeRDP على Linux لا يجعل Linux يتظاهر بأنه Windows. العميل يتحدث RDP فقط، بينما التطبيقات وسطح المكتب الحقيقيان يعملان على الجهاز البعيد.

ثانيًا، FreeRDP لا يقوم تلقائيًا بتفعيل Remote Desktop على Windows ولا يتجاوز صلاحيات المستخدم أو سياسات RDS أو متطلبات إصدار Windows.

ثالثًا، FreeRDP ليس شبكة VPN أو خدمة Relay مشابهة لأدوات الدعم عن بُعد السحابية. يجب أن توجد إمكانية اتصال شبكي فعلية بين العميل وخادم RDP، مباشرة أو عبر بنية مثل VPN أو RD Gateway.

أهم ملاحظات الأمان عند استخدام FreeRDP

حدّث FreeRDP باستمرار

FreeRDP يعالج بيانات بروتوكول معقدة تصل من الطرف البعيد، لذلك تظهر فيه ثغرات مثل أي Parser أو عميل شبكي كبير. وقد احتوى الإصداران 3.29.0 و3.30.0 في يوليو 2026 على مجموعة من الإصلاحات والتنبيهات الأمنية، مع توصية المشروع بالتحديث.

لهذا ينبغي الحصول على إصدار مدعوم ومحدث من مستودع التوزيعة أو من قنوات المشروع الموثوقة، خصوصًا للأجهزة التي تتصل بخوادم غير موثوقة أو تستخدم FreeRDP ضمن بنية خادم أو Proxy.

لا تجعل /cert:ignore إعدادًا دائمًا

يوفر FreeRDP خيارات متعددة للتعامل مع شهادات TLS، وتوضح خيارات سطر الأوامر الحالية في المشروع أوضاعًا مثل deny وtofu والتحقق بالبصمة، إضافة إلى ignore.

استخدام:

/cert:ignore

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

أبقِ NLA مفعّلًا متى كان ذلك ممكنًا

توصي Microsoft باستخدام Network Level Authentication لأنها تجبر المستخدم على المصادقة قبل إنشاء جلسة Remote Desktop الكاملة، ما يقلل مساحة التعرض مقارنة بإنشاء الجلسة أولًا ثم تسجيل الدخول.

تعطيل آليات الأمان لإجبار عميل قديم على الاتصال يجب ألا يكون أول حل لمشكلة توافق.

لا تضع كلمة المرور في الأمر بلا حاجة

يمكن لـFreeRDP قبول كلمة المرور من خلال خيار سطر الأوامر، لكن وضع سر حقيقي مباشرة في Command Line قد يجعله يظهر في Shell History أو في آليات مراقبة العمليات، حسب النظام والإعدادات.

لذلك من الأفضل ترك البرنامج يطلب بيانات الاعتماد أو استخدام آلية إدارة أسرار مناسبة للبيئة بدل نشر أو تخزين أوامر تحتوي على كلمة المرور نفسها.

لا تعرض RDP مباشرة للإنترنت إن كان بإمكانك تجنب ذلك

يستخدم Windows المنفذ 3389 افتراضيًا لـRemote Desktop. وجود FreeRDP كعميل لا يجعل فتح هذا المنفذ للعالم خيارًا آمنًا.

وتحذر Microsoft عند شرح الوصول إلى Remote Desktop من خارج الشبكة من أن Port Forwarding يفتح الجهاز أمام الإنترنت، وتشير إلى أن استخدام VPN هو الخيار المفضل عندما يكون مناسبًا.

في بيئات المؤسسات يمكن أن يكون RD Gateway أو VPN أو بنية وصول مقيدة أفضل من تعريض كل جهاز Windows مباشرة بعنوان عام.

فعّل عمليات إعادة التوجيه التي تحتاجها فقط

الحافظة والأقراص والطابعات والبطاقات الذكية تجعل تجربة Remote Desktop أكثر راحة، لكنها تنشئ أيضًا مسارات إضافية لتبادل البيانات بين الجهاز المحلي والبعيد.

إذا كنت تتصل بخادم لا تثق به بالكامل، فلا تعِد توجيه مجلدك الشخصي أو الأجهزة الحساسة لمجرد أن العميل يدعم ذلك. فعّل الموارد المطلوبة للجلسة فقط.

متى يكون xfreerdp مفيدًا أكثر من عميل رسومي؟

العملاء الرسوميون أسهل للاستخدام اليومي، لكن xfreerdp يصبح مفيدًا عندما تحتاج إلى التحكم الصريح في تفاصيل الاتصال.

  • اختبار إعدادات RDP أو استكشاف مشكلات المصادقة والرسوميات.
  • تحديد خيارات العرض والقنوات وإعادة التوجيه بدقة.
  • إنشاء أوامر قابلة للتكرار لمسؤولي الأنظمة.
  • اختبار خوادم Windows وRDS وxrdp أو أي خادم متوافق مع RDP.
  • معرفة ما إذا كانت المشكلة في البروتوكول نفسه أم في واجهة رسومية تستخدم FreeRDP في الخلفية.

وفي المقابل، إذا كنت تريد فقط حفظ عشرات الاتصالات وإدارتها من واجهة رسومية، فقد يكون تطبيق يستخدم FreeRDP كمحرك خلفي أكثر راحة من كتابة جميع الخيارات يدويًا.

الخلاصة

FreeRDP ليس مجرد أمر xfreerdp للاتصال بجهاز Windows، بل هو تنفيذ كامل ومفتوح المصدر لمنظومة RDP يمكن استخدامه كمكتبة أو من خلال عدة عملاء على منصات مختلفة.

libfreerdp ينفذ الأجزاء الأساسية للبروتوكول، وClients تربط هذا المحرك بواجهات Linux وWindows وmacOS والمنصات الأخرى، وWinPR يوفر طبقة Runtime محمولة يحتاجها المشروع، بينما تنفذ Virtual Channels ميزات مثل الحافظة والصوت والأقراص وRemoteApp والأجهزة المعاد توجيهها.

أما علاقته بـWindows Remote Desktop فهي علاقة توافق بروتوكولي: عميل Microsoft مثل mstsc.exe وعميل FreeRDP هما تنفيذان مختلفان يمكنهما التحدث مع خادم RDP متوافق. FreeRDP لا ينتمي إلى Microsoft ولا يلغي متطلبات خادم Windows أو سياساته؛ إنه يوفر ببساطة تنفيذًا مفتوحًا وقابلًا للدمج والتخصيص لبروتوكول RDP.

ومع وصول المشروع إلى الإصدار 3.30.0 في يوليو 2026 بعد سلسلة من الإصلاحات الأمنية، تبقى القاعدة العملية الأهم هي استخدام إصدار حديث، والإبقاء على NLA والتحقق من الشهادات، وعدم كشف RDP مباشرة للإنترنت دون حاجة، وتقليل عمليات إعادة توجيه الموارد إلى ما تحتاجه الجلسة فعلًا.

شارك برأيك

لديك إضافة، سؤال أو تجربة مرتبطة بالموضوع؟ اكتبها وشارك بها القراء.