Arcan est un cadre de développement puissant permettant de créer pratiquement tout, depuis les interfaces utilisateur pour les applications embarquées spécialisées jusqu'aux environnements de bureau autonomes à part entière.
En son cœur se trouve un moteur multimédia robuste et portable, avec une interface de script Lua bien testée et bien documentée. Le développement met l'accent sur la sécurité, la débogage et les performances, guidés par le principe de la moindre surprise en termes de conception d'API.
Pour plus de détails sur les capacités, la conception, les objectifs, le développement actuel, la feuille de route, les journaux de modifications, les notes sur la contribution, etc., veuillez vous référer au arcan-wiki.
Il existe également un site Web qui collecte d'autres liens, annonces, communiqués, vidéos/présentations, etc.
Pour contacter la communauté, consultez le canal IRC #arcan sur irc.libera.chat et/ou le discord (invite-link)
Pour plus d'informations sur les développeurs, consultez le HACKING.md
Le dépôt github disparaît à cause des pratiques de plus en plus abusives de Microsoft, et nous passons ainsi à Fossil auto-hébergé. Le référentiel sera synchronisé avec github pour le moment, mais aucune activité de développement active n'y est active. Voir fossil.arcan-fe.com.
Certaines distributions, par exemple voidlinux, contiennent la plupart d'arcan dans leurs packages, vous pouvez donc vous épargner du travail pour l'une d'entre elles. D'autres avec une communauté active passeraient par Nix (par exemple : nix-shell -p arcan.all-wrapped).
Des modèles de conteneurs Docker (principalement utilisés pour le développement et les tests sans tête) peuvent être trouvés ici, la qualité varie énormément de mauvaise à médiocre (tout comme Docker) : les fichiers docker.
Il existe de nombreuses façons d'ajuster les étapes de construction afin de réduire les dépendances. Il existe encore d'autres façons de configurer et d'intégrer les composants en fonction de ce que vous recherchez ; exécuté en tant que bureau natif ou en tant qu'environnement d'exécution d'application sur un autre bureau ?
La plupart des options sont exposées via la sortie de construction de l'exécution de cmake sur le répertoire src.
Par souci de simplicité en termes de taille, il existe un préréglage de construction, « tout », qui est celui que nous utiliserons ici.
Les noms de packages spécifiques dépendent de votre distribution, mais les plus courants sont :
sqlite3, openal-soft, sdl2, opengl, luajit, gbm, kms, freetype, harfbuzz
libxkbcommon
Pour plus d’options d’encodage et de décodage, vous souhaiterez peut-être également :
libvlc-core (videolan), the ffmpeg suite, leptonica + tesseract (ocr)
libvncserver libusb1, v4l2-loopback, mupdf
Nous avons d’abord besoin de certaines dépendances sources qui sont clonées manuellement pour l’instant :
git clone https://github.com/letoram/arcan.git
cd arcan/external/git
./clone.sh
cd ../../
Ceux-ci ne sont généralement pas nécessaires, l'utilisation principale est de garantir certaines options de construction qui peuvent varier entre les distributions (luajit) et de garantir qu'un bureau récupérable peut être lié statiquement et exécuté dans un espace utilisateur autrement cassé (donc mise en place intégrée). La seule exception est OpenAL qui est corrigé pour être utilisé par une version spéciale (arcan-lwa). Il est prévu de le refactoriser pour supprimer cette dépendance, mais il y a d'autres priorités sur le chemin.
Nous pouvons maintenant configurer et construire le moteur principal :
mkdir build
cd build
cmake -DBUILD_PRESET="everything" ../src
Comme avec d'autres projets basés sur CMake, vous pouvez ajouter :
-DCMAKE_BUILD_TYPE=Debug
Pour passer d'une version de version à une version de débogage.
Lorsqu'il aura fini de sonder les dépendances, vous obtiendrez un rapport indiquant les dépendances trouvées et les fonctionnalités activées/désactivées, ou vous avertirez si certaines des dépendances requises ne peuvent pas être trouvées.
Créez et installez comme d'habitude (c'est-à-dire make, sudo make install). Un certain nombre de binaires sont produits, le « principal » étant simplement appelé arcan. Pour tester « dans les sources » (sans installer), vous devriez pouvoir exécuter :
./arcan -T ../data/scripts -p ../data/resources ../data/appl/welcome
L'argument -T définit notre ensemble de scripts intégrés/partagés, le -p où les ressources partagées telles que les polices, etc. peuvent être trouvées, et le dernier argument étant le "script" réel à exécuter.
Avec l'installation, cela devrait se réduire à :
arcan welcome
Il essaiera automatiquement de déterminer s'il doit s'agir d'un serveur d'affichage natif ou s'exécuter imbriqué dans un autre ou même lui-même en fonction de la présence de diverses variables d'environnement (DISPLAY, WAYLAND_DISPLAY, ARCAN_CONNPATH).
« bienvenue » est le nom d'un simple écran de bienvenue intégré, qui s'éteindra automatiquement après quelques secondes .
Pour quelque chose de plus directement utile, vous pouvez essayer la « console » de l'application intégrée :
arcan console
Ce qui devrait fonctionner exactement comme la ligne de commande de votre console normale, mais avec l'avantage supplémentaire de pouvoir également exécuter des applications graphiques (compatibles Arcan). Pour d'autres projets, voir les « Projets associés » ci-dessous.
Si les périphériques d'entrée se comportent mal, le « test d'événement » rapide et sale dans :
arcan /path/to/arcan/tests/interactive/eventtest
Cela pourrait être utile pour déterminer qui blâmer.
Le binaire 'arcan' de la plateforme egl-dri produit installe suid par défaut. Ceci n'est pas strictement nécessaire, sauf si certaines fonctionnalités spécifiques sont souhaitées, par exemple les commandes de rétroéclairage des ordinateurs portables sous Linux, car celles-ci nécessitent un accès aux systèmes et amis.
Si cela n'est pas pertinent, vous pouvez supprimer la propriété suid sur le binaire, mais notez que votre utilisateur actuel a toujours besoin d'accéder aux fichiers /dev/input/event et /dev/dri/cardN et /dev/dri/renderN pertinents pour fonctionner correctement -- sinon les périphériques d'entrée et/ou graphiques pourraient ne pas être détectés ou utilisables.
Le binaire est divisé en une partie non-suid sur laquelle s'exécute le moteur principal, voir posix/psep_open.c pour auditer ce qui est exécuté avec des privilèges plus élevés ainsi que le code pour supprimer les privilèges. Le processus privilégié est chargé de négocier l'accès aux appareils, de mettre en œuvre la commutation de terminal virtuel et de surveiller la récupération du processus principal sur les verrous en direct ou certaines pannes de GPU.
Une autre façon d'étendre le comportement du moteur, quelle que soit l'application utilisée, consiste à utiliser les scripts hook. Ceux-ci résident à l'intérieur du « chemin du script système » couvert par l'argument de ligne de commande -T, ou par défaut shared/arcan/scripts.
L'idée est que ceux-ci devraient être capables de fournir des fonctionnalités « activables » qui nécessiteraient une coopération depuis le moteur, afin d'effectuer des modifications personnalisées rapides ou d'aider à relier d'autres outils.
Un bon exemple est « external_input » :
arcan -H hooks/external_input.lua -H hooks/external_input.lua myappl
Cela ouvrirait deux points de connexion, « extio_1 », « extio_2 », qui permettront à un client de se connecter et de fournir une entrée qui apparaîtra à l'application « myappl » comme provenant du moteur.
Ceux-ci sont traités plus en détail dans la page de manuel.
Arcan-net est un binaire qui vous permet de transférer un ou plusieurs clients arcan sur un réseau. Il est construit par défaut et peut être déclenché à la fois en tant qu'outil réseau distinct ou lancé indirectement à partir de shmif en définissant ARCAN_CONNPATH=a12://id@host:port, ou lors de l'émission d'une demande de migration par le gestionnaire de fenêtres.
Voir aussi : src/a12/net/README.md et src/a12/net/HACKING.md.
Le « arcan-wayland » ou « waybridge », comme on l'appelle à certains endroits, est binaire, ajoute la prise en charge des clients wayland et X (via Xwayland). Il peut être exécuté comme un service système global, par exemple
arcan-wayland -xwl
Ou au cas par cas, comme :
arcan-wayland -exec weston-terminal
Pour un client Wayland conforme, et :
arcan-wayland -exec-x11 xterm
Pour un client X. La base « par cas » est recommandée car elle est plus sûre que de laisser plusieurs clients partager le même processus de pont, à un coût négligeable. L'inconvénient est que certains clients complexes qui dépendent de l'établissement de plusieurs connexions Wayland distinctes peuvent ne pas fonctionner correctement. Firefox est un délinquant connu.
Il existe un certain nombre d'options de réglage et de dépannage en raison de la complexité de l'utilisation de Wayland, consultez la page de manuel et la bascule --help.
Toute la configuration d'exécution est consolidée dans une base de données, soit celle par défaut 'arcan.sqlite', soit celle définie explicitement (arcan -d mydb.sqlite).
Ceci est utilisé pour les options spécifiques à la plate-forme, les options spécifiques au moteur et pour les clients de confiance que les scripts en cours d'exécution sont autorisés à démarrer. Il est également utilisé comme magasin de valeurs-clés de configuration pour toutes les applications Arcan en cours d'exécution.
À titre d'exemple rapide, voici comment inspecter et modifier les clés que « Durden » utilise actuellement :
arcan_db show_appl durden
arcan_db add_appl_kv durden shadow_on true
La configuration avancée de certaines plates-formes vidéo peut être définie via le nom d'application arcan réservé. Cela définirait, par exemple, le nom principal du périphérique de carte graphique pour la version de la plateforme 'egl-dri' :
arcan_db add_appl_kv arcan video_device=/dev/dri/card2
Pour ajouter des « cibles de lancement », vous pouvez utiliser quelque chose comme :
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
Cela permet aux applications de démarrer un programme en tant qu'enfant de confiance (qui hérite de ses primitives de connexion plutôt que d'essayer de les trouver à l'aide d'un espace de noms dépendant du système d'exploitation). L'exemple ci-dessus aurait généré arcan-net en mode local où les clients se connectant au chemin de connexion 'netfwd' seraient redirigés vers le serveur écoutant à 10.0.0.10:6666.
Il existe de nombreux contrôles et options pour cet outil, il est donc suggéré de consulter sa page de manuel pour plus de détails et d'instructions.
L'option de construction 'Everything' devrait également produire un binaire appelé 'arcan_headless', au moins sur BSD et Linux. Ce binaire peut être utilisé pour exécuter arcan sans interférer avec vos autres systèmes graphiques et d'affichage. Étant donné l'accès à un « nœud de rendu » (/dev/dri/renderD128 et ainsi de suite), cela devrait également fonctionner correctement dans les conteneurs et autres solutions de sandboxing strictes.
Pour le rendre utile, il peut enregistrer/diffuser sur un écran virtuel. Un exemple d'une telle configuration suivant l'exemple ci-dessus serait :
ARCAN_VIDEO_ENCODE=protocol=vnc arcan_headless console
En supposant que le système de construction ait trouvé la dépendance libvncserver, cela devrait vous laisser avec un serveur vnc exposé (non sécurisé, non protégé, ...) sur localhost+5900. Voir afsrv_encode pour une liste d'arguments qui peuvent être ajoutés à l'environnement d'encodage afin de contrôler ce qui se passe.
Ce projet est financé par NGI0 Entrust, un fonds créé par NLnet avec le soutien financier du programme Internet Next Generation de la Commission européenne. Apprenez-en davantage sur la page du projet NLnet.
Si vous n'êtes pas intéressé à développer quelque chose qui vous est propre, les parties de ce projet ne vous serviront probablement pas à elles seules. Voici quelques projets sur lesquels vous pourriez vous pencher :
Durden est le principal environnement de bureau qui utilise ce projet comme serveur d'affichage.
Safespaces est un environnement de bureau expérimental VR/3D.
Pipeworld est un environnement de programmation de flux de données (pensez Excel)
Arcan-Devices accumule des pilotes supplémentaires.
Pour obtenir une assistance pour davantage de types de clients, etc., il existe également :
Prise en charge de Wayland (voir la section Wayland ci-dessus et src/wayland/README.md).
QEmu une version corrigée de QEmu qui ajoute une option -ui arcan.
Xarcan est un Xorg corrigé qui vous permet d'exécuter une session X « sous forme de fenêtre ».
nvim-arcan est une interface neovim qui agit comme un client arcan natif.
Il existe également un certain nombre d'outils d'aide qui peuvent être utilisés pour ajouter certaines fonctionnalités, telles que la prise en charge des appareils VR et des icônes de la barre d'état. Ceux-ci sont construits séparément et peuvent être trouvés dans le sous-répertoire tools/. Ils ont leurs propres systèmes de construction distincts et les fichiers README.md correspondants.
Ils partent du principe qu'arcan et ses bibliothèques respectives ont été construits et installés. Ils sont verrouillés et versionnés sur le moteur, donc si vous le mettez à niveau, assurez-vous de reconstruire également les outils.
Les principaux outils d’intérêt sont :
Acfgfs est un outil qui vous permet de monter certaines applications Arcan en tant que système de fichiers FUSE. L'application doit le prendre explicitement en charge. Pour l'environnement de bureau Durden, vous pouvez utiliser global/settings/system/control=somename puis :
arcan_cfgfs --control=/path/to/durden/ipc/somename /mnt/desktop
Et le contrôle/configuration du bureau doit être exposé dans le point de montage spécifié.
Aclip est un gestionnaire de presse-papiers similaire à Xclip. Il permet de relier le presse-papiers entre un environnement de bureau comme Durden et celui d'un serveur X.
Cela nécessite que le pontage du presse-papiers ait été autorisé (désactivé par défaut pour des raisons de sécurité). Dans Durden, cela est activé via global/settings/system/clipboard où vous pouvez contrôler le nombre d'accès au presse-papiers obtenu par l'outil.
Aloadimage est un simple chargeur d'images de type sandboxing, similaire à xloadimage. Il est utile à la fois pour tester le comportement du client lors du développement d'applications utilisant arcan, mais également en tant que visionneuse d'images à part entière, avec un chargement d'image raisonnablement rapide, des commandes de liste de lecture de base, etc.
VR Bridge est un pilote d'entrée en option qui fournit le binaire arcan_vr qui ajoute la prise en charge de divers visiocasques. Des instructions plus détaillées sur sa configuration et son utilisation peuvent être trouvées dans le cadre du projet Safespaces mentionné dans la section « Projets associés ».
Arcan-trayicon est un outil qui charge en chaîne un autre client arcan, ainsi que deux images de référence (actives et inactives). Il essaie de s'enregistrer dans la barre d'état d'icônes d'une application arcan en cours d'exécution, bien qu'il doive explicitement activer la prise en charge. À Durden, cela se fait via le chemin :
global/settings/statusbar/buttons/right/add_external=tray
Ensuite, vous pouvez utiliser :
ARCAN_CONNPATH=tray arcan-trayicon active.svg inactive.svg afsrv_terminal
Ou un autre client Arcan qui sera ensuite chargé lorsque vous cliquerez sur le bouton de la barre d'état système, confiné dans une fenêtre contextuelle, puis supprimé lorsque la fenêtre contextuelle sera détruite. Il s'agit d'un moyen rapide et pratique d'encapsuler divers services système et scripts de commandes externes.