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
或其他一些奧秘客戶端,當單擊托盤按鈕時將加載,限制在彈出視窗中,然後在彈出視窗被銷毀時被殺死。這是一種包裝各種系統服務和外部命令腳本的快速便捷的方法。