Arcan 是一个功能强大的开发框架,几乎可以创建任何内容,从专用嵌入式应用程序的用户界面一直到成熟的独立桌面环境。
其核心是一个强大且可移植的多媒体引擎,具有经过充分测试和记录良好的 Lua 脚本接口。该开发强调安全性、可调试性和性能——以 API 设计方面的最小意外原则为指导。
有关功能、设计、目标、当前开发、路线图、变更日志、贡献说明等的更多详细信息,请参阅 arcan-wiki。
还有一个网站收集其他链接、公告、发布、视频/演示文稿等。
如需社区联系,请查看 irc.libera.chat 上的 IRC 频道 #arcan 和/或 Discord(邀请链接)
有关开发人员信息,请参阅 HACKING.md
由于微软越来越多的滥用行为,github 存储库即将失效,因此我们正在转向自托管 Fossil。该存储库将暂时同步到 github,但那里没有活跃的开发活动。请参阅化石.arcan-fe.com。
某些发行版(例如 voidlinux)将大部分 arcan 作为其软件包的一部分,因此您可以为其中一个发行版节省一些工作。其他拥有活跃社区的人将通过 Nix 进行(例如:nix-shell -p arcan.all-wrapped)。
Docker-容器模板(主要用于无头开发和测试)可以在这里找到,质量从差到差差别很大(就像 Docker 一样):dockerfiles。
有很多方法可以调整构建步骤以减少依赖性。根据您的需求,还有更多方法来配置和集成组件;作为本机桌面运行还是作为另一个桌面内的应用程序运行时运行?
大多数选项是通过在 src 目录上运行 cmake 的构建输出公开的。
为了简单起见,有一个构建预设,“一切”,这就是我们将在此处使用的预设。
具体的包名称取决于您的发行版,但常见的包名称是:
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'二进制文件默认安装suid。这并不是绝对必要的,除非需要某些特定功能,例如 Linux 上的笔记本电脑背光控制,因为这些功能需要访问 sysfs 和朋友。
如果这不相关,您可以删除二进制文件上的 suid 属性,但请注意,您当前的用户仍然需要访问相关的 /dev/input/event 和 /dev/dri/cardN 和 /dev/dri/renderN 文件正常工作 - 否则可能无法检测到或无法使用输入和/或图形设备。
该二进制文件确实分成了主引擎运行的非 suid 部分,请参阅 posix/psep_open.c 以审核以更高权限运行的内容以及删除权限的代码。特权进程负责协商设备访问、实现虚拟终端切换,并作为看门狗在活锁或某些 GPU 故障时恢复主进程。
无论使用什么应用程序,扩展引擎行为的另一种方法是所谓的钩子脚本。它们驻留在 -T 命令行参数覆盖的“系统脚本路径”内,或者默认的共享/arcan/scripts 中。
我们的想法是,这些应该能够提供需要引擎内部合作的“切换”功能,以便进行快速自定义修改或帮助桥接其他工具。
一个很好的例子是“external_input”:
arcan -H hooks/external_input.lua -H hooks/external_input.lua myappl
这将打开两个连接点“extio_1”、“extio_2”,这两个连接点将允许一个客户端连接并提供输入,该输入将在“myappl”应用程序中显示为来自引擎。
联机帮助页中更详细地介绍了这些内容。
Arcan-net 是一种二进制文件,允许您通过网络转发一个或多个 arcan 客户端。它是默认构建的,可以作为单独的网络工具触发,也可以通过设置 ARCAN_CONNPATH=a12://id@host:port 或在窗口管理器发出迁移请求时从 shmif 间接启动。
另请参阅: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 连接的复杂客户端可能无法正常工作。 Firefox 是一个众所周知的罪犯。
由于使用 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 appl 名称进行设置。例如,这将为“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 的服务器。
该工具有许多控件和选项,因此建议您查看其联机帮助页以获取更多详细信息和说明。
“everything”构建选项还应该生成一个名为“arcan_headless”的二进制文件,至少在 BSD 和 Linux 上是这样。该二进制文件可用于运行 arcan,而不会干扰您的其他图形和显示系统。如果可以访问“渲染节点”(/dev/dri/renderD128 等),它也应该在容器和其他严格的沙箱解决方案内正常工作。
为了使其有用,它可以录制/流式传输到虚拟屏幕。遵循上述示例的此类设置的示例如下:
ARCAN_VIDEO_ENCODE=protocol=vnc arcan_headless console
假设构建系统找到了 libvncserver 依赖项,这应该会在 localhost+5900 处为您留下一个暴露的(不安全的、不受保护的……)vnc 服务器。请参阅 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 是一个 Neovim 前端,充当本地 arcan 客户端。
还有许多辅助工具可用于添加某些功能,例如对 VR 设备和托盘图标的支持。它们是单独构建的,可以在 tools/ 子目录中找到。他们有自己独立的构建系统和相应的 README.md 文件。
他们工作的假设是 arcan 及其各自的库已经构建并安装。它们是与引擎同步和版本控制的,因此如果您升级它,请确保也重建工具。
人们感兴趣的主要工具是:
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 开发应用程序时测试客户端行为很有用,而且本身也可以作为图像查看器,具有相当快的图像加载、基本的播放列表控件等。
VR 桥是一个可选的输入驱动程序,提供 arcan_vr 二进制文件,增加了对各种头戴式显示器的支持。有关其设置和使用的更详细说明可以作为“相关项目”部分中提到的 Safespaces 项目的一部分找到。
Arcan-trayicon 是一个链式加载另一个 arcan 客户端以及两个参考图像(活动和非活动)的工具。它尝试在正在运行的arcan应用程序的图标托盘中注册自己,尽管它必须显式启用支持。在 Durden 中,这是通过以下路径完成的:
global/settings/statusbar/buttons/right/add_external=tray
然后你可以使用:
ARCAN_CONNPATH=tray arcan-trayicon active.svg inactive.svg afsrv_terminal
或者其他一些奥秘客户端,当单击托盘按钮时将加载,限制在弹出窗口中,然后在弹出窗口被销毁时被杀死。这是一种包装各种系统服务和外部命令脚本的快速便捷的方法。