Arcan ist ein leistungsstarkes Entwicklungsframework zum Erstellen praktisch aller Dinge, von Benutzeroberflächen für spezielle eingebettete Anwendungen bis hin zu vollständigen eigenständigen Desktop-Umgebungen.
Das Herzstück ist eine robuste und tragbare Multimedia-Engine mit einer gut getesteten und gut dokumentierten Lua-Skriptschnittstelle. Bei der Entwicklung liegt der Schwerpunkt auf Sicherheit, Debugbarkeit und Leistung – geleitet vom Grundsatz der geringsten Überraschung im Hinblick auf das API-Design.
Weitere Details zu Fähigkeiten, Design, Zielen, aktueller Entwicklung, Roadmap, Änderungsprotokollen, Hinweisen zum Mitwirken usw. finden Sie im Arcan-Wiki.
Es gibt auch eine Website, die andere Links, Ankündigungen, Veröffentlichungen, Videos/Präsentationen usw. sammelt.
Für Community-Kontakte besuchen Sie den IRC-Kanal #arcan auf irc.libera.chat und/oder den Discord (Einladungslink).
Informationen für Entwickler finden Sie in HACKING.md
Das Github-Repository wird aufgrund der zunehmend missbräuchlichen Praktiken von Microsoft eingestellt und wir wechseln daher zum selbstgehosteten Fossil. Das Repository wird vorerst mit Github synchronisiert, es finden dort jedoch keine aktiven Entwicklungsaktivitäten statt. Siehe fossil.arcan-fe.com.
Einige Distributionen, z. B. voidlinux, enthalten den Großteil von Arcan als Teil ihrer Pakete, so dass Sie sich einige Arbeit sparen können, wenn Sie sich für eine davon entscheiden. Andere mit einer aktiven Community würden über Nix erfolgen (zum Beispiel: nix-shell -p arcan.all-wrapped).
Docker-Container-Vorlagen (die hauptsächlich für Headless-Entwicklung und Tests verwendet werden) finden Sie hier. Die Qualität variiert stark von schlecht bis schlecht (genau wie bei Docker): Dockerfiles.
Es gibt viele Möglichkeiten, die Build-Schritte zu optimieren, um Abhängigkeiten zu reduzieren. Es gibt noch mehr Möglichkeiten, die Komponenten zu konfigurieren und zu integrieren, je nachdem, was Sie möchten. Läuft es als nativer Desktop oder als Anwendungslaufzeit innerhalb eines anderen Desktops?
Die meisten Optionen werden über die Build-Ausgabe beim Ausführen von cmake im src-Verzeichnis verfügbar gemacht.
Der Einfachheit halber gibt es eine Build-Voreinstellung, „alles“, die wir hier verwenden werden.
Spezifische Paketnamen hängen von Ihrer Distribution ab, gängige sind jedoch:
sqlite3, openal-soft, sdl2, opengl, luajit, gbm, kms, freetype, harfbuzz
libxkbcommon
Für weitere Codierungs- und Decodierungsoptionen möchten Sie möglicherweise auch:
libvlc-core (videolan), the ffmpeg suite, leptonica + tesseract (ocr)
libvncserver libusb1, v4l2-loopback, mupdf
Zuerst benötigen wir einige In-Source-Abhängigkeiten, die vorerst manuell geklont werden:
git clone https://github.com/letoram/arcan.git
cd arcan/external/git
./clone.sh
cd ../../
Diese werden normalerweise nicht benötigt. Der Hauptzweck besteht darin, bestimmte Build-Optionen sicherzustellen, die zwischen den Distributionen variieren können (Luajit), und sicherzustellen, dass ein wiederherstellbarer Desktop statisch verknüpft und in einem ansonsten fehlerhaften Benutzerbereich ausgeführt werden kann (also eingebettetes Bringup). Die einzige Ausnahme ist OpenAL, das für die Verwendung durch einen speziellen Build (arcan-lwa) gepatcht ist. Es ist eine Umgestaltung geplant, um diese Abhängigkeit zu beseitigen, aber es gibt noch andere Prioritäten.
Jetzt können wir die Haupt-Engine konfigurieren und erstellen:
mkdir build
cd build
cmake -DBUILD_PRESET="everything" ../src
Wie bei anderen CMake-basierten Projekten können Sie Folgendes hinzufügen:
-DCMAKE_BUILD_TYPE=Debug
Um von einem Release-Build zu einem Debug-Build zu wechseln.
Wenn die Prüfung der Abhängigkeiten abgeschlossen ist, erhalten Sie einen Bericht darüber, welche Abhängigkeiten gefunden wurden und welche Funktionen aktiviert/deaktiviert wurden, oder Sie werden benachrichtigt, wenn einige der erforderlichen Abhängigkeiten nicht gefunden werden konnten.
Erstellen und installieren Sie wie gewohnt (dh make, sudo make install). Es werden eine Reihe von Binärdateien erstellt, wobei die „Hauptversion“ einfach Arcan genannt wird. Um „im Quellcode“ (ohne Installation) zu testen, sollten Sie Folgendes ausführen können:
./arcan -T ../data/scripts -p ../data/resources ../data/appl/welcome
Das Argument -T legt unseren integrierten/gemeinsam genutzten Satz von Skripten fest, das Argument -p gibt an, wo gemeinsam genutzte Ressourcen wie Schriftarten usw. gefunden werden können, und das letzte Argument ist das tatsächlich auszuführende „Skript“.
Mit der Installation sollte sich dies auf Folgendes reduzieren:
arcan welcome
Basierend auf dem Vorhandensein verschiedener Umgebungsvariablen (DISPLAY, WAYLAND_DISPLAY, ARCAN_CONNPATH) versucht es automatisch herauszufinden, ob es sich um einen nativen Anzeigeserver handeln oder verschachtelt in einem anderen Server oder sogar in sich selbst laufen soll.
„Willkommen“ ist der Name eines einfachen integrierten Begrüßungsbildschirms, der nach einigen Sekunden automatisch geschlossen wird .
Für etwas direkter Nützliches können Sie die integrierte Appl-Konsole ausprobieren:
arcan console
Dies sollte genau wie Ihre normale Konsolenbefehlszeile funktionieren, jedoch mit dem zusätzlichen Vorteil, dass auch (Arcan-kompatible) grafische Anwendungen ausgeführt werden können. Weitere Projekte finden Sie weiter unten unter „Verwandte Projekte“.
Wenn sich Eingabegeräte nicht richtig verhalten, erfolgt der schnelle und schmutzige „Ereignistest“ in:
arcan /path/to/arcan/tests/interactive/eventtest
Könnte hilfreich sein, um herauszufinden, wer die Schuld trägt.
Die erzeugte Binärdatei „arcan“ der Egl-Dri-Plattform installiert standardmäßig suid. Dies ist nicht unbedingt erforderlich, es sei denn, es werden bestimmte Funktionen gewünscht, z. B. die Steuerung der Laptop-Hintergrundbeleuchtung unter Linux, da diese Zugriff auf SYSFS und Co. erfordern.
Wenn das nicht relevant ist, können Sie die suid-Eigenschaft aus der Binärdatei entfernen. Beachten Sie jedoch, dass Ihr aktueller Benutzer weiterhin Zugriff auf die relevanten Dateien /dev/input/event und /dev/dri/cardN und /dev/dri/renderN benötigt ordnungsgemäß funktionieren – andernfalls werden Eingabe- und/oder Grafikgeräte möglicherweise nicht erkannt oder sind nicht verwendbar.
Die Binärdatei spaltet sich in einen nicht-suid-Teil auf, von dem aus die Haupt-Engine läuft. Sehen Sie sich posix/psep_open.c an, um zu prüfen, was mit höheren Privilegien ausgeführt wird, sowie den Code zum Löschen von Privilegien. Der privilegierte Prozess ist für die Aushandlung des Gerätezugriffs, die Implementierung des virtuellen Terminal-Switchings und als Watchdog für die Wiederherstellung des Hauptprozesses bei Live-Sperren oder einigen GPU-Ausfällen verantwortlich.
Eine weitere Möglichkeit, das Engine-Verhalten unabhängig von der verwendeten App zu erweitern, sind sogenannte Hook-Skripte. Diese befinden sich im „Systemskriptpfad“, der durch das Befehlszeilenargument -T abgedeckt wird, oder in der Standardeinstellung „shared/arcan/scripts“.
Die Idee ist, dass diese in der Lage sein sollten, „einschaltbare“ Funktionen bereitzustellen, die eine Zusammenarbeit innerhalb der Engine erfordern, um schnelle benutzerdefinierte Änderungen vorzunehmen oder eine Brücke zu anderen Tools zu schlagen.
Ein gutes Beispiel ist „external_input“:
arcan -H hooks/external_input.lua -H hooks/external_input.lua myappl
Dadurch würden zwei Verbindungspunkte geöffnet, „extio_1“, „extio_2“, die es einem Client ermöglichen, eine Verbindung herzustellen und Eingaben bereitzustellen, die für die „myappl“-Anwendung so aussehen, als kämen sie von der Engine.
Diese werden in der Manpage ausführlicher behandelt.
Arcan-net ist eine Binärdatei, die es Ihnen ermöglicht, einen oder mehrere Arcan-Clients über ein Netzwerk weiterzuleiten. Es wird standardmäßig erstellt und kann sowohl als separates Netzwerktool als auch indirekt über shmif durch Festlegen von ARCAN_CONNPATH=a12://id@host:port oder durch Ausgabe einer Migrationsanforderung durch den Fenstermanager ausgelöst werden.
Siehe auch: src/a12/net/README.md und src/a12/net/HACKING.md.
Das „arcan-wayland“ oder „waybridge“, wie es an manchen Stellen genannt wird, ist binär und bietet Unterstützung für Wayland- und X-Clients (über Xwayland). Es kann entweder als globaler Systemdienst ausgeführt werden, z
arcan-wayland -xwl
Oder von Fall zu Fall, wie zum Beispiel:
arcan-wayland -exec weston-terminal
Für einen konformen Wayland-Kunden und:
arcan-wayland -exec-x11 xterm
Für einen X-Client. Die „pro Fall“-Basis wird empfohlen, da sie sicherer und sicherer ist, als mehrere Clients zu vernachlässigbaren Kosten den gleichen Bridge-Prozess gemeinsam nutzen zu lassen. Der Nachteil besteht darin, dass einige komplexe Clients, die auf die Herstellung mehrerer unterschiedlicher Wayland-Verbindungen angewiesen sind, möglicherweise nicht ordnungsgemäß funktionieren. Firefox ist ein bekannter Täter.
Aufgrund der Komplexität der Verwendung von Wayland gibt es eine Reihe von Optimierungs- und Fehlerbehebungsoptionen. Konsultieren Sie die Manpage und den Schalter „--help“.
Die gesamte Laufzeitkonfiguration wird in einer Datenbank konsolidiert, entweder der Standarddatenbank „arcan.sqlite“ oder einer explizit festgelegten Datenbank (arcan -d mydb.sqlite).
Dies wird für plattformspezifische Optionen, Engine-spezifische Optionen und für vertrauenswürdige Clients verwendet, die die laufenden Skripte starten dürfen. Es wird auch als Konfigurations-Schlüsselwertspeicher für alle laufenden Arcan-Anwendungen verwendet.
Als kurzes Beispiel sehen Sie hier, wie Sie Schlüssel überprüfen und ändern, die „Durden“ derzeit verwendet:
arcan_db show_appl durden
arcan_db add_appl_kv durden shadow_on true
Die erweiterte Konfiguration für einige Videoplattformen kann über den reservierten Arcan-Appl-Namen eingestellt werden. Dies würde beispielsweise den Namen des primären Grafikkartengeräts für die Plattformversion „egl-dri“ festlegen:
arcan_db add_appl_kv arcan video_device=/dev/dri/card2
Um „Startziele“ hinzuzufügen, können Sie Folgendes verwenden:
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
Dadurch können Anwendungen ein Programm als vertrauenswürdiges untergeordnetes Programm starten (das seine Verbindungsprimitive erbt, anstatt zu versuchen, sie über einen vom Betriebssystem abhängigen Namespace zu finden). Das obige Beispiel hätte arcan-net im lokalen Modus erzeugt, in dem Clients, die eine Verbindung zum Verbindungspfad „netfwd“ herstellen, zum Server umgeleitet würden, der bei 10.0.0.10:6666 lauscht.
Es gibt viele Steuerelemente und Optionen für dieses Tool. Wir empfehlen Ihnen daher, die Manpage für weitere Details und Anweisungen zu lesen.
Die Build-Option „everything“ sollte zumindest auf BSDs und Linux auch eine Binärdatei namens „arcan_headless“ erzeugen. Mit dieser Binärdatei können Sie Arcan ausführen, ohne Ihr anderes Grafik- und Anzeigesystem zu beeinträchtigen. Wenn Sie Zugriff auf einen „Render-Knoten“ (/dev/dri/renderD128 usw.) haben, sollte es auch in Containern und anderen strengen Sandbox-Lösungen einwandfrei funktionieren.
Um es nützlich zu machen, kann es auf einem virtuellen Bildschirm aufzeichnen/streamen. Ein Beispiel für einen solchen Aufbau, der dem obigen Beispiel folgt, wäre:
ARCAN_VIDEO_ENCODE=protocol=vnc arcan_headless console
Angenommen, das Build-System hat die libvncserver-Abhängigkeit gefunden, sollte dies zu einem exponierten (unsicheren, ungeschützten, ...) VNC-Server bei localhost+5900 führen. Unter afsrv_encode finden Sie eine Liste von Argumenten, die der Encode-Umgebung hinzugefügt werden können, um zu steuern, was passiert.
Dieses Projekt wird durch NGI0 Entrust finanziert, einen von NLnet mit finanzieller Unterstützung des Next Generation Internet-Programms der Europäischen Kommission eingerichteten Fonds. Erfahren Sie mehr auf der NLnet-Projektseite.
Wenn Sie nicht daran interessiert sind, etwas Eigenes zu entwickeln, werden Sie mit den Teilen dieses Projekts allein wahrscheinlich wenig Sinn machen. Hier sind einige Projekte, die Sie sich vielleicht ansehen möchten:
Durden ist die Hauptdesktopumgebung, die dieses Projekt als Anzeigeserver verwendet.
Safespaces ist eine experimentelle VR/3D-Desktop-Umgebung.
Pipeworld ist eine Datenfluss-Programmierumgebung (denken Sie an Excel).
Arcan-Devices sammelt zusätzliche Treiber.
Um Unterstützung für weitere Arten von Clients usw. zu erhalten, gibt es außerdem:
Wayland-Unterstützung (siehe Abschnitt „Wayland“ oben und src/wayland/README.md).
QEmu ist eine gepatchte QEmu-Version, die eine Option -ui arcan hinzufügt.
Xarcan ist ein gepatchtes Xorg, mit dem Sie eine X-Sitzung „als Fenster“ ausführen können.
nvim-arcan ist ein Neovim-Frontend, das als nativer Arcan-Client fungiert.
Es gibt auch eine Reihe von Hilfstools, mit denen bestimmte Funktionen hinzugefügt werden können, beispielsweise die Unterstützung für VR-Geräte und Taskleistensymbole. Diese werden separat erstellt und sind im Unterverzeichnis tools/ zu finden. Sie verfügen über ihre eigenen separaten Build-Systeme und entsprechenden README.md-Dateien.
Sie gehen davon aus, dass Arcan und die entsprechenden Bibliotheken erstellt und installiert wurden. Sie sind mit der Engine synchronisiert und versioniert. Wenn Sie sie also aktualisieren, stellen Sie sicher, dass Sie auch die Tools neu erstellen.
Die wichtigsten Werkzeuge von Interesse sind:
Acfgfs ist ein Tool, mit dem Sie bestimmte Arcan-Anwendungen als FUSE-Dateisystem bereitstellen können. Die Anwendung muss dies explizit unterstützen. Für die Durden-Desktop-Umgebung können Sie global/settings/system/control=somename verwenden und dann:
arcan_cfgfs --control=/path/to/durden/ipc/somename /mnt/desktop
Und die Desktop-Steuerung/Konfiguration sollte am angegebenen Mountpunkt verfügbar sein.
Aclip ist ein Zwischenablage-Manager ähnlich wie Xclip. Es ermöglicht die Überbrückung der Zwischenablage zwischen einer Desktop-Umgebung wie Durden und der eines X-Servers.
Dies setzt voraus, dass die Überbrückung der Zwischenablage zugelassen wurde (aus Sicherheitsgründen standardmäßig deaktiviert). In Durden wird dies über global/settings/system/clipboard aktiviert, wo Sie steuern können, wie viel Zugriff auf die Zwischenablage das Tool erhält.
Aloadimage ist ein einfacher Sandbox-Image-Loader, ähnlich wie xloadimage. Es eignet sich sowohl zum Testen des Client-Verhaltens bei der Entwicklung von Anwendungen mit Arcan als auch als eigenständiger Bildbetrachter mit einigermaßen schnellem Laden von Bildern, grundlegenden Steuerelementen für Wiedergabelisten usw.
VR Bridge ist ein optionaler Eingabetreiber, der die Binärdatei arcan_vr bereitstellt, die Unterstützung für verschiedene am Kopf montierte Displays bietet. Ausführlichere Anweisungen zur Einrichtung und Verwendung finden Sie im Rahmen des Safespaces-Projekts, das im Abschnitt „Verwandte Projekte“ erwähnt wird.
Arcan-trayicon ist ein Tool, das einen weiteren Arcan-Client zusammen mit zwei Referenzbildern (aktiv und inaktiv) in der Kette lädt. Es versucht, sich in der Symbolleiste einer laufenden Arcan-Anwendung zu registrieren, muss die Unterstützung jedoch explizit aktivieren. In Durden erfolgt dies über den Pfad:
global/settings/statusbar/buttons/right/add_external=tray
Dann können Sie Folgendes verwenden:
ARCAN_CONNPATH=tray arcan-trayicon active.svg inactive.svg afsrv_terminal
Oder ein anderer Arcan-Client, der dann geladen wird, wenn auf die Taskleistenschaltfläche geklickt wird, in einem Popup eingeschlossen wird und dann beendet wird, wenn das Popup zerstört wird. Dies ist eine schnelle und bequeme Möglichkeit, verschiedene Systemdienste und externe Befehlsskripte zu umschließen.