LibVNCServer: مكتبة لسهولة تنفيذ خادم VNC. حقوق الطبع والنشر (C) 2001-2003 ليوهانس إي. شيندلين
إذا كان لديك سؤال عام، فمن الأفضل أن تسأله في دردشة المجتمع. إذا كانت مخاوفك تتعلق بخلل أو طلب ميزة بدلاً من ذلك، فيرجى استخدام أداة تعقب المشكلات.
إذا كنت قد استخدمت LibVNCServer بالفعل، فربما تريد قراءة الأخبار.
VNC عبارة عن مجموعة من البرامج التي تستخدم بروتوكول RFB (Remote Frame Buffer). لقد تم تصميمها "لتصدير" مخزن مؤقت للإطار عبر الشبكة: يمكنك إعداد خادم ويمكنك الاتصال به عبر عارض VNC. إذا كان الخادم يدعم WebSockets (وهو ما يدعمه LibVNCServer)، فيمكنك أيضًا الاتصال باستخدام عارض VNC داخل المتصفح مثل noVNC.
إنه بالفعل مستخدم على نطاق واسع للإدارة، ولكن ليس من السهل برمجة الخادم بنفسك.
تم تغيير هذا بواسطة LibVNCServer.
تحتوي الصفحة الرئيسية على قائمة مؤقتة بجميع المشاريع التي تستخدم إما LibVNCServer أو LibVNCClient أو كليهما.
اسم | رقم | LibVNCServer | LibVNCClient |
---|---|---|---|
لا أحد | 1 | ✔ | ✔ |
مصادقة VNC | 2 | ✔ | ✔ |
SASL | 20 | ✔ | |
MSLogon | 0xfffffffa | ✔ | |
أبل آر دي | 30 | ✔ | |
TLS | 18 | ✔ | |
فينكريبت | 19 | ✔ | |
UltraVNC MSLogonII | 113 | ✔ |
اسم | رقم | LibVNCServer | LibVNCClient |
---|---|---|---|
خام | 1 | ✔ | ✔ |
CopyRect | 2 | ✔ | ✔ |
آر آر إي | 3 | ✔ | ✔ |
كوري | 4 | ✔ | ✔ |
هيكستيلي | 5 | ✔ | ✔ |
زليب | 6 | ✔ | ✔ |
ضيق | 7 | ✔ | ✔ |
الترا | 9 | ✔ | ✔ |
ترل | 15 | ✔ | |
ZRLE | 16 | ✔ | ✔ |
زيورل | 17 | ✔ | ✔ |
ضيق PNG | -260 | ✔ |
اسم | LibVNCServer | LibVNCClient |
---|---|---|
RFB | ✔ | ✔ |
RFB مشفر عبر VeNCrypt | ✔ | |
RFB المشفرة عبر AnonTLS | ✔ | |
مآخذ الويب | ✔ | |
مقابس الويب المشفرة | ✔ |
يستخدم LibVNCServer CMake، الذي يمكنك تنزيله هنا، أو الأفضل من ذلك، تثبيته باستخدام مدير الحزم الخاص بالنظام الأساسي الخاص بك (apt، yum، Brew، macports، Chocolatey، وما إلى ذلك).
يمكنك بعد ذلك البناء عبر:
mkdir build
cd build
cmake ..
cmake --build .
يمكن لدعم التشفير في LibVNCClient وLibVNCServer استخدام واجهات خلفية مختلفة:
-DWITH_OPENSSL=ON -DWITH_GCRYPT=OFF
)-DWITH_OPENSSL=OFF -DWITH_GCRYPT=ON
)-DWITH_OPENSSL=OFF -DWITH_GCRYPT=OFF
)يمكن لدعم أمان طبقة النقل في LibVNCClient وLibVNCServer استخدام:
-DWITH_OPENSSL=ON -DWITH_GNUTLS=OFF
)-DWITH_OPENSSL=OFF -DWITH_GNUTLS=ON
)للحصول على بعض الأمثلة الأكثر شمولاً والتي تتضمن تثبيت التبعيات، راجع إعدادات بناء Unix CI وWindows CI.
راجع https://developer.Android.com/ndk/guides/cmake.html كمرجع، ولكنه يتلخص في الأساس في:
mkdir build
cd build
cmake .. -DANDROID_NDK= -DCMAKE_TOOLCHAIN_FILE= -DANDROID_NATIVE_API_LEVEL=
cmake --build .
تم اختباره باستخدام MinGW-w64 على Debian، والذي يجب عليك تثبيته عبر sudo apt install mingw-w64
. يمكنك الاستفادة من ملف سلسلة الأدوات المقدم. يقوم بتعيين CMake ليتوقع تبعيات Win32 (اختيارية) مثل libjpeg والأصدقاء في دليل deps
. لاحظ أنك تحتاج إلى حزم تطوير (ربما ذاتية الصنع) لـ win32، ولن تعمل حزم -dev
المرفقة مع توزيعتك. لاحظ أيضًا أنك ستحتاج إلى وضع libwinpthread-1.dll
في دليل البناء لتشغيل الأمثلة. يمكنك العثور على ملف DLL هذا على جهاز Linux الخاص بك عبر locate libwinpthread-1.dll
.
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-cross-mingw32-linux.cmake ..
cmake --build .
راجع وثائق مقدمة LibVNCServer API لمعرفة كيفية إنشاء مثيل خادم، وتوصيل معالجات الإدخال والتعامل مع المؤشرات.
في حال كنت تفضل تعلم LibVNCServer بالقدوة، قم بإلقاء نظرة على الخوادم الموجودة في دليل الأمثلة/الخادم.
بالنسبة إلى LibVNCClient، يمكن العثور على أمثلة في الأمثلة/العميل.
تقوم عملية التثبيت بتثبيت ملفات pkg-config .pc لـ LibVNCServer بالإضافة إلى LibVNCClient والتي يمكنك استخدامها في نظام البناء الخاص بك عبر pkg-config --cflags libvncserver
et al.
إذا كنت تستخدم CMake، فإن إصدارات LibVNCServer > 0.9.13 توفر ملفات تكوين CMake، لذلك في CMakeLists.txt الخاص بمشروعك، يمكنك القول:
find_package (LibVNCServer)
if (LibVNCServer_FOUND)
# libs and headers location are now accessible via properties, but you only
# need to add the respective export target to your project's target_link_libraries,
# cmake will automatically add libs and headers
# eg: add client (YOUR_PROJECT_TARGET being a placeholder for your real target -
# it must be defined by add_executable or add_library):
target_link_libraries (YOUR_PROJECT_TARGET LibVNCServer::vncclient)
# add server:
target_link_libraries (YOUR_PROJECT_TARGET LibVNCServer::vncserver)
endif ()
يمكنك تجربة دعم websockets المدمج عن طريق بدء تشغيل خادم المثال من دليل webclients عبر ../examples/example
. من المهم عدم البدء من داخل دليل examples
وإلا فلن يتمكن برنامج الخادم من العثور على ملف فهرس HTTP الخاص به. سيخبرك برنامج الخادم بعنوان URL لتوجيه متصفح الويب الخاص بك إليه. هناك، يمكنك النقر على زر noVNC للاتصال باستخدام الوحدة الفرعية git لعارض noVNC (يمكن تثبيتها عبر git submodule update --init
).
إذا لم يكن لديك بالفعل شهادة SSL يثق بها متصفحك، فإن الطريقة الأكثر راحة لإنشاء واحدة هي استخدام minica. في التوزيعات المبنية على دبيان، يمكنك تثبيته عبر sudo apt install minica
، وعلى نظام MacOS عبر brew install minica
.
انتقل إلى دليل webclients وقم بإنشاء شهادات المضيف وCA عبر:
cd webclients
minica -org "LibVNC" $(hostname)
ثق في الشهادة في متصفحك عن طريق استيراد cacert.crt
الذي تم إنشاؤه، على سبيل المثال، بالنسبة لمتصفح Firefox، انتقل إلى Options->Privacy & Security->عرض الشهادات->Authorities وقم باستيراد cacert.crt
الذي تم إنشاؤه، ضع علامة في مربع الاختيار لاستخدامه للوثوق في مواقع الويب. بالنسبة للمتصفحات الأخرى، فإن العملية مماثلة.
بعد ذلك، يمكنك أخيرًا بدء تشغيل خادم المثال، وإعطائه مفتاح المضيف الذي تم إنشاؤه والشهادة:
../examples/example -sslkeyfile $(hostname).key -sslcertfile $(hostname).crt
سيخبرك برنامج الخادم بعنوان URL لتوجيه متصفح الويب الخاص بك إليه. هناك، يمكنك النقر فوق زر noVNC-encrypted-connection للاتصال باستخدام عارض noVNC المجمع باستخدام اتصال Websockets المشفر.
إذا كان اتصال خادم العميل الخاص بك بطيئًا لأن الارتباط "بطيء"، فهناك بعض الأشياء التي يجب وضعها في الاعتبار.
أولاً، عليك التحقق مما إذا كان الرابط الخاص بك يتمتع بإنتاجية منخفضة أو زمن استجابة مرتفع أو كليهما.
على الرابط ذي زمن الاستجابة العالي، حاول طلب تحديثات مخزن الإطارات المؤقت بشكل مستمر، حيث أن RFB هو عملية سحب للعميل بشكل افتراضي، وليس دفع الخادم. يمكن العثور على أحد الأمثلة على التنفيذ هنا وهو بالتأكيد يحسن الاستجابة.
يوجد أيضًا ملحق ContiniousUpdates RFB، لكن هذا الامتداد غير مدعوم بواسطة LibVNC (حتى الآن).
إذا كان الرابط الخاص بك منخفض الإنتاجية، فيجب عليك بشكل أساسي تقليل عدد البايتات التي يتم إرسالها لكل تحديث لمخزن الإطارات المؤقت:
في بداية هذا المشروع، كان Dscho، المؤلف الأصلي، يرغب في جعله ترخيص BSD. ومع ذلك، فهو يعتمد على الكثير من أكواد GPL'ed، لذا يجب أن يكون GPL.
لقد عمل العاملون في AT&T بشكل جيد لإنتاج شيء نظيف وبسيط مثل VNC. قرر المديرون أنه من أجل شهرتهم، سيطلقون البرنامج مجانًا. ولكن ليس هذا فقط! لقد أدركوا أنه من خلال إصدار الكود أيضًا مجانًا، سيصبح VNC طفلًا صغيرًا متطورًا، يغزو عوالم جديدة، مما يجعل والديه فخورين جدًا. كذلك يمكن أن يكونوا! ولحماية هذا الابتكار، قرروا جعله GPL، وليس BSD. الفرق الرئيسي هو: يمكنك إنشاء برامج مغلقة المصدر مستمدة من BSD، وليس من GPL. عليك أن تعطي الائتمان المناسب مع كليهما.
يريد منتجنا التجاري الاستفادة من LibVNCServer لإنشاء خادم VNC الخاص بنا وتوزيعه. هل سيتم اعتبار هذا عملاً مشتقًا في سياق GPLv2؟
نعم. يرجى ملاحظة أنه على الرغم من أنه سيتعين عليك الالتزام برخصة GPL الخاصة ببرنامجك إذا قمت بالارتباط بـ LibVNCServer/LibVNCClient، إلا أنه لا يتعين عليك جعل الكود الخاص بك عامًا في حالة استخدام العمل المشتق داخليًا في مؤسستك، راجع https://www .gnu.org/licenses/gpl-faq.html#GPLRequireSourcePostedPublic
هل يؤدي تعديل كود LibVNCServer أو عدمه إلى إحداث أي فرق في تحديد ما إذا كان خادم VNC الخاص بنا سيعتبر عملاً مشتقًا؟
لا. بمجرد الارتباط بـ LibVNCServer/LibVNCClient، يصبح برنامجك عملاً مشتقًا.
هذا البرنامج هو برنامج مجاني. يمكنك إعادة توزيعه و/أو تعديله بموجب شروط رخصة جنو العمومية كما نشرتها مؤسسة البرمجيات الحرة؛ إما الإصدار 2 من الترخيص، أو (حسب اختيارك) أي إصدار لاحق.
يتم توزيع هذا البرنامج على أمل أن يكون مفيدًا، ولكن دون أي ضمان؛ دون حتى الضمان الضمني لقابلية التسويق أو الملاءمة لغرض معين. راجع رخصة جنو العامة لمزيد من التفاصيل.
ينبغي أن تكون قد حصلت على نسخة من رخصة جنو العامة مع هذا البرنامج؛ إذا لم يكن الأمر كذلك، فاكتب إلى Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307، الولايات المتحدة الأمريكية.