يعد Arcan إطار عمل تطويريًا قويًا لإنشاء أي شيء تقريبًا بدءًا من واجهات المستخدم للتطبيقات المدمجة المتخصصة وصولاً إلى بيئات سطح المكتب المستقلة الكاملة.
يكمن في قلبه محرك وسائط متعددة قوي ومحمول، مع واجهة برمجة Lua النصية التي تم اختبارها جيدًا وموثقة جيدًا. يركز التطوير على الأمان وقابلية التصحيح والأداء - مسترشدًا بمبدأ الأقل مفاجأة فيما يتعلق بتصميم واجهة برمجة التطبيقات (API).
لمزيد من التفاصيل حول القدرات والتصميم والأهداف والتطوير الحالي وخريطة الطريق وسجلات التغيير والملاحظات حول المساهمة وما إلى ذلك، يرجى الرجوع إلى Arcan-wiki.
يوجد أيضًا موقع ويب يجمع الروابط والإعلانات والإصدارات ومقاطع الفيديو / العروض التقديمية الأخرى وما إلى ذلك.
للتواصل مع المجتمع، قم بزيارة قناة IRC #arcan على irc.libera.chat و/أو الديسكورد (invite-link)
للحصول على معلومات المطور، راجع HACKING.md
سوف يتوقف مستودع github عن العمل بفضل ممارسات Microsoft المسيئة بشكل متزايد، وبالتالي فإننا ننتقل إلى Fossil المستضاف ذاتيًا. ستتم مزامنة المستودع مع github في الوقت الحالي، ولكن لا توجد أنشطة تطوير نشطة هناك. انظر الأحفوري.arcan-fe.com.
تحتوي بعض التوزيعات، مثل voidlinux، على معظم أركان كجزء من حزمها، لذا يمكنك توفير بعض العمل على أحد هذه التوزيعات. أما الأشخاص الآخرين الذين لديهم مجتمع نشط فسيكونون من خلال Nix (على سبيل المثال: nix-shell -p arcan.all-wrapped).
يمكن العثور على قوالب حاوية Docker (المستخدمة بشكل أساسي للتطوير والاختبار بدون رأس) هنا، وتختلف الجودة بشكل كبير من سيئ إلى سيئ (تمامًا مثل Docker): ملفات dockerfiles.
هناك العديد من الطرق لضبط خطوات البناء لتقليل التبعيات. هناك المزيد من الطرق لتكوين المكونات ودمجها اعتمادًا على ما تسعى إليه؛ هل يعمل كسطح مكتب أصلي أم كتطبيق وقت التشغيل داخل سطح مكتب آخر؟
يتم عرض معظم الخيارات عبر مخرجات البناء من تشغيل cmake على دليل src.
من أجل البساطة فيما يتعلق بالحجم، هناك إعداد مسبق للإنشاء، "كل شيء" وهو ما سنستخدمه هنا.
تعتمد أسماء الحزم المحددة على توزيعتك، ولكن الأسماء الشائعة هي:
sqlite3, openal-soft, sdl2, opengl, luajit, gbm, kms, freetype, harfbuzz
libxkbcommon
لمزيد من خيارات التشفير وفك التشفير، قد تحتاج أيضًا إلى:
libvlc-core (videolan), the ffmpeg suite, leptonica + tesseract (ocr)
libvncserver libusb1, v4l2-loopback, mupdf
نحتاج أولاً إلى بعض التبعيات الموجودة في المصدر والتي يتم استنساخها يدويًا في الوقت الحالي:
git clone https://github.com/letoram/arcan.git
cd arcan/external/git
./clone.sh
cd ../../
لا تكون هناك حاجة إليها عادةً، والاستخدام الرئيسي هو ضمان خيارات بناء معينة قد تختلف بين التوزيعات (luajit) وللتأكد من إمكانية ربط سطح المكتب القابل للاسترداد بشكل ثابت وتنفيذه في مساحة مستخدم معطلة (لذلك إحضار مضمن). الاستثناء الوحيد هو OpenAL الذي تم تصحيحه ليتم استخدامه بواسطة بنية خاصة (arcan-lwa). ومن المقرر إعادة هيكلة هذا لإزالة تلك التبعية، ولكن هناك أولويات أخرى في الطريق.
الآن يمكننا تكوين وبناء المحرك الرئيسي:
mkdir build
cd build
cmake -DBUILD_PRESET="everything" ../src
كما هو الحال مع المشاريع الأخرى المعتمدة على CMake، يمكنك إضافة:
-DCMAKE_BUILD_TYPE=Debug
للتبديل من إصدار الإصدار إلى إصدار التصحيح.
عند الانتهاء من فحص التبعيات، سوف تحصل على تقرير عن التبعيات التي تم العثور عليها والميزات التي تم تشغيلها/إيقاف تشغيلها، أو تنبيهك إذا لم يتم العثور على بعض التبعيات المطلوبة.
قم بإجراء التثبيت وتثبيته كالمعتاد (على سبيل المثال، make، sudo make install). يتم إنتاج عدد من الثنائيات، ويُطلق على الثنائي "الرئيسي" اسم Arcan ببساطة. لاختبار "في المصدر" (بدون تثبيت)، يجب أن تكون قادرًا على تشغيل:
./arcan -T ../data/scripts -p ../data/resources ../data/appl/welcome
تقوم الوسيطة -T بتعيين مجموعة البرامج النصية المضمنة/المشتركة لدينا، والوسيطة -p حيث يمكن العثور على الموارد المشتركة مثل الخطوط وما إلى ذلك، والوسيطة الأخيرة هي "البرنامج النصي" الفعلي الذي سيتم تشغيله.
مع التثبيت، ينبغي أن يقلل هذا إلى:
arcan welcome
سيحاول تلقائيًا معرفة ما إذا كان ينبغي أن يكون خادم عرض أصليًا أو يتم تشغيله متداخلاً داخل خادم آخر أو حتى نفسه بناءً على وجود متغيرات البيئة المختلفة (DISPLAY، WAYLAND_DISPLAY، ARCAN_CONNPATH).
"الترحيب" هو اسم لشاشة ترحيب مدمجة بسيطة، والتي سيتم إيقاف تشغيلها تلقائيًا بعد بضع ثوانٍ .
للحصول على شيء أكثر فائدة بشكل مباشر، يمكنك تجربة "وحدة التحكم" المدمجة في التطبيق:
arcan console
والذي يجب أن يعمل تمامًا مثل سطر أوامر وحدة التحكم العادية، ولكن مع ميزة إضافية تتمثل في القدرة على تشغيل التطبيقات الرسومية (المتوافقة مع Arcan) أيضًا. بالنسبة للمشاريع الأخرى، راجع "المشاريع ذات الصلة" أدناه.
إذا كانت أجهزة الإدخال تعمل بشكل سيء، فسيتم "اختبار الحدث" السريع والقذر في:
arcan /path/to/arcan/tests/interactive/eventtest
قد يكون من المفيد معرفة من يقع عليه اللوم.
يتم التثبيت الثنائي لمنصة egl-dri المنتجة "arcan" بشكل افتراضي. وهذا ليس ضروريًا تمامًا ما لم تكن بعض الميزات المحددة مطلوبة، على سبيل المثال، عناصر التحكم في الإضاءة الخلفية للكمبيوتر المحمول على Linux حيث تتطلب تلك الميزات الوصول إلى sysfs والأصدقاء.
إذا لم يكن ذلك مناسبًا، فيمكنك تجريد خاصية suid من الملف الثنائي، لكن لاحظ أن المستخدم الحالي لا يزال يحتاج إلى الوصول إلى ملفات /dev/input/event و/dev/dri/cardN و/dev/dri/renderN ذات الصلة تعمل بشكل صحيح - وإلا فقد لا يتم اكتشاف أجهزة الإدخال و/أو الرسومات أو عدم صلاحيتها للاستخدام.
ينقسم الثنائي إلى جزء غير مدمج يعمل منه المحرك الرئيسي، راجع posix/psep_open.c لمراجعة ما يتم تشغيله بامتيازات أعلى بالإضافة إلى رمز إسقاط الامتيازات. تكون العملية المميزة مسؤولة عن التفاوض بشأن الوصول إلى الجهاز، وتنفيذ تبديل المحطة الافتراضية، وكجهة مراقبة لاستعادة العملية الرئيسية عند الأقفال المباشرة أو بعض حالات فشل وحدة معالجة الرسومات.
هناك طريقة أخرى لتوسيع سلوك المحرك بغض النظر عن التطبيق المستخدم تسمى البرامج النصية الخطافية. توجد هذه العناصر داخل "مسار البرنامج النصي للنظام" الذي تغطيه وسيطة سطر الأوامر -T، أو الإعداد الافتراضي للبرامج النصية/arcan/scripts.
والفكرة هي أن هذه يجب أن تكون قادرة على توفير ميزات "التبديل" التي قد تحتاج إلى تعاون من داخل المحرك، من أجل إجراء تعديلات مخصصة سريعة أو المساعدة في سد الأدوات الأخرى.
مثال جيد هو "external_input":
arcan -H hooks/external_input.lua -H hooks/external_input.lua myappl
سيؤدي هذا إلى فتح نقطتي اتصال، 'extio_1' و'extio_2' مما سيسمح لعميل واحد بالاتصال وتوفير الإدخال الذي سيظهر لتطبيق 'myappl' على أنه قادم من المحرك.
يتم تناول هذه بمزيد من التفاصيل في صفحة manpage.
Arcan-net هو برنامج ثنائي يسمح لك بإعادة توجيه عميل واحد أو أكثر من عملاء Arcan عبر الشبكة. تم إنشاؤه افتراضيًا، ويمكن تشغيله كأداة شبكة منفصلة بالإضافة إلى إطلاقه بشكل غير مباشر من shmif عن طريق تعيين ARCAN_CONNPATH=a12://id@host:port، أو عند إصدار طلب ترحيل بواسطة مدير النوافذ.
راجع أيضًا: src/a12/net/README.md وsrc/a12/net/HACKING.md.
"arcan-wayland" أو "waybridge"، كما يُشار إليه في بعض الأماكن، هو ثنائي يضيف دعمًا لعملاء wayland وX (عبر Xwayland). يمكن تشغيله إما كخدمة نظام عالمي، على سبيل المثال
arcan-wayland -xwl
أو على أساس كل حالة على حدة، مثل:
arcan-wayland -exec weston-terminal
بالنسبة لعميل Wayland المتوافق، و:
arcan-wayland -exec-x11 xterm
لعميل X. يوصى باستخدام أساس "لكل حالة" لأنه أكثر أمانًا وأمانًا من السماح لعدة عملاء بمشاركة نفس عملية الجسر، بتكلفة لا تذكر. الجانب السلبي هو أن بعض العملاء المعقدين الذين يعتمدون على إجراء اتصالات متعددة ومتميزة قد يفشلون في العمل بشكل صحيح. فايرفوكس هو مجرم معروف.
هناك عدد من خيارات الضبط واستكشاف الأخطاء وإصلاحها نظرًا لتعقيد استخدام wayland، راجع صفحة الدليل ومفتاح التبديل --help.
يتم دمج جميع تكوينات وقت التشغيل في قاعدة بيانات، إما قاعدة البيانات الافتراضية "arcan.sqlite" أو واحدة محددة بشكل صريح (arcan -d mydb.sqlite).
يُستخدم هذا للخيارات الخاصة بالنظام الأساسي، والخيارات الخاصة بالمحرك، وللعملاء الموثوقين الذين يُسمح للبرامج النصية قيد التشغيل ببدء تشغيلها. يتم استخدامه أيضًا كمخزن لقيمة مفتاح التكوين لأي تطبيقات Arcan قيد التشغيل.
كمثال سريع، هذه هي كيفية فحص وتعديل المفاتيح التي يستخدمها "Durden" حاليًا:
arcan_db show_appl durden
arcan_db add_appl_kv durden shadow_on true
يمكن ضبط التكوين المتقدم لبعض منصات الفيديو عبر اسم تطبيق arcan المحجوز. سيؤدي هذا، على سبيل المثال، إلى تعيين اسم جهاز بطاقة الرسومات الأساسي لإصدار النظام الأساسي "egl-dri":
arcan_db add_appl_kv arcan video_device=/dev/dri/card2
لإضافة "أهداف الإطلاق"، يمكنك استخدام شيء مثل:
arcan_db add_target net BIN /usr/bin/arcan-net -l netfwd
arcan_db add_config arcan-net default 10.0.0.10 6666
arcan_db add_target xterm BIN /usr/bin/arcan-wayland -exec-x11
يسمح هذا للتطبيقات ببدء تشغيل برنامج كطفل موثوق به (يرث أساسيات الاتصال الخاصة به بدلاً من محاولة العثور عليها باستخدام مساحة اسم تعتمد على نظام التشغيل). كان من الممكن أن يؤدي المثال أعلاه إلى إنشاء arcan-net في الوضع المحلي حيث سيتم إعادة توجيه العملاء المتصلين بـ "netfwd" connpath إلى الخادم الذي يستمع إلى 10.0.0.10:6666.
هناك العديد من عناصر التحكم والخيارات لهذه الأداة، لذا يُقترح إلقاء نظرة على صفحتها الرئيسية للحصول على مزيد من التفاصيل والتعليمات.
يجب أن يُنتج خيار البناء "كل شيء" أيضًا ملفًا ثنائيًا يُسمى "arcan_headless"، على الأقل في أنظمة BSD وLinux. يمكن استخدام هذا الثنائي لتشغيل Arcan دون التدخل في الرسومات الأخرى ونظام العرض. نظرًا للوصول إلى "عقدة العرض" (/dev/dri/renderD128 وما إلى ذلك) ويجب أيضًا أن تعمل بشكل جيد داخل الحاويات وغيرها من حلول وضع الحماية الصارمة.
لجعله مفيدًا، يمكنه التسجيل/البث على شاشة افتراضية. مثال على هذا الإعداد باتباع المثال أعلاه سيكون:
ARCAN_VIDEO_ENCODE=protocol=vnc arcan_headless console
بافتراض أن نظام البناء قد عثر على تبعية libvncserver، فإن هذا من شأنه أن يتركك مع خادم vnc مكشوف (غير آمن، وغير محمي، ...) على localhost+5900. راجع afsrv_encode للحصول على قائمة بالوسائط التي يمكن إضافتها إلى بيئة التشفير للتحكم في ما يحدث.
يتم تمويل هذا المشروع من خلال NGI0 Entrust، وهو صندوق أنشأته NLnet بدعم مالي من برنامج الجيل القادم للإنترنت التابع للمفوضية الأوروبية. تعرف على المزيد على صفحة مشروع NLnet.
إذا لم تكن مهتمًا بتطوير شيء خاص بك، فمن المحتمل أن تجد القليل من الفائدة مع أجزاء هذا المشروع وحده. فيما يلي بعض المشاريع التي قد ترغب في النظر فيها:
Durden هي بيئة سطح المكتب الرئيسية التي تستخدم هذا المشروع كخادم العرض الخاص به.
Safespaces هي بيئة سطح مكتب تجريبية VR/3D.
Pipeworld هي بيئة برمجة لتدفق البيانات (فكر في Excel).
تقوم Arcan-Devices بتجميع برامج تشغيل إضافية.
للحصول على الدعم لمزيد من أنواع العملاء وما إلى ذلك، هناك أيضًا:
دعم Wayland (راجع قسم Wayland أعلاه، وsrc/wayland/README.md).
QEmu إصدار QEmu مصحح يضيف خيار -ui arcan.
Xarcan عبارة عن Xorg مصحح يسمح لك بتشغيل جلسة X "كنافذة".
nvim-arcan هي واجهة أمامية جديدة تعمل كعميل Arcan أصلي.
هناك أيضًا عدد من الأدوات المساعدة التي يمكن استخدامها لإضافة ميزات معينة، مثل دعم أجهزة الواقع الافتراضي وأيقونات الدرج. تم تصميمها بشكل منفصل ويمكن العثور عليها في الدليل الفرعي للأدوات/. لديهم أنظمة بناء منفصلة خاصة بهم وملفات README.md المقابلة.
إنهم يعملون على افتراض أنه تم بناء وتثبيت أركان والمكتبات الخاصة بها. لقد تم تثبيتها وإصدارها للمحرك، لذا إذا قمت بترقيتها، فتأكد من إعادة بناء الأدوات أيضًا.
الأدوات الرئيسية المثيرة للاهتمام هي:
Acfgfs هي أداة تتيح لك تحميل بعض تطبيقات arcan كنظام ملفات FUSE. يجب أن يدعم التطبيق ذلك بشكل صريح. بالنسبة لبيئة سطح المكتب Durden، يمكنك استخدام global/settings/system/control=somename ثم:
arcan_cfgfs --control=/path/to/durden/ipc/somename /mnt/desktop
ويجب أن يتم عرض التحكم/التكوين لسطح المكتب في نقطة التثبيت المحددة.
Aclip هو مدير حافظة مشابه لـ Xclip. فهو يسمح بتوصيل الحافظة بين بيئة سطح المكتب مثل Durden وبيئة خادم X.
يتطلب هذا السماح بجسر الحافظة (يتم تعطيله افتراضيًا لأسباب أمنية). في Durden يتم تنشيط هذا عبر العالمية/الإعدادات/النظام/الحافظة حيث يمكنك التحكم في مقدار الوصول إلى الحافظة الذي تحصل عليه الأداة.
Aloadimage عبارة عن أداة تحميل صور بسيطة لوضع الحماية، تشبه xloadimage. إنه مفيد لاختبار سلوك العميل عند تطوير التطبيقات باستخدام Arcan، ولكنه مفيد أيضًا كعارض صور في حد ذاته، مع تحميل سريع للصور إلى حد معقول، وعناصر تحكم أساسية في قائمة التشغيل وما إلى ذلك.
جسر الواقع الافتراضي هو برنامج تشغيل اختياري للإدخال يوفر ثنائي arcan_vr الذي يضيف دعمًا لمختلف شاشات العرض المثبتة على الرأس. يمكن العثور على تعليمات أكثر تفصيلاً حول إعداده واستخدامه كجزء من مشروع Safespaces المذكور في قسم "المشاريع ذات الصلة".
Arcan-trayicon هي أداة تقوم بتحميل عميل Arcan آخر بشكل متسلسل، بالإضافة إلى صورتين مرجعيتين (نشطة وغير نشطة). يحاول تسجيل نفسه في علبة الأيقونات لتطبيق Arcan قيد التشغيل، على الرغم من أنه يجب عليه تمكين الدعم بشكل صريح. في دوردن يتم ذلك عبر المسار:
global/settings/statusbar/buttons/right/add_external=tray
ثم يمكنك استخدام:
ARCAN_CONNPATH=tray arcan-trayicon active.svg inactive.svg afsrv_terminal
أو بعض عملاء arcan الآخرين الذين سيتم تحميلهم بعد ذلك عند النقر فوق زر الدرج، وحصرهم في نافذة منبثقة ثم إيقافهم عند تدمير النافذة المنبثقة. هذه طريقة سريعة ومريحة لتغليف خدمات النظام المتنوعة ونصوص الأوامر الخارجية.