Arcan は、特殊な組み込みアプリケーションのユーザー インターフェイスから本格的なスタンドアロン デスクトップ環境まで、事実上あらゆるものを作成できる強力な開発フレームワークです。
その中心には、十分にテストされ、十分に文書化された Lua スクリプト インターフェイスを備えた、堅牢でポータブルなマルチメディア エンジンがあります。開発では、API 設計に関して驚きを最小限に抑える原則に基づいて、セキュリティ、デバッグ可能性、パフォーマンスを重視しています。
機能、設計、目標、現在の開発、ロードマップ、変更ログ、貢献に関するメモなどの詳細については、arcan-wiki を参照してください。
その他のリンク、お知らせ、リリース、ビデオ/プレゼンテーションなどを集めた Web サイトもあります。
コミュニティへの連絡については、irc.libera.chat の IRC チャネル #arcan および/または discord (invite-link) をチェックしてください。
開発者情報については、HACKING.md を参照してください。
Microsoft のますます不正な行為のおかげで、github リポジトリが廃止されようとしているため、私たちは自己ホスト型の Fossil に移行しています。当面、リポジトリは github に同期されますが、そこではアクティブな開発活動は行われません。 fossil.arcan-fe.comを参照してください。
voidlinux などの一部のディストリビューションでは、arcan のほとんどがパッケージの一部として含まれているため、これらのディストリビューションのいずれかにかかる作業を節約できます。活発なコミュニティを持つ他のものは、Nix を介して行われます (例: nix-shell -p arcan.all-wrapped)。
Docker - コンテナー テンプレート (主にヘッドレス開発とテストに使用されます) は、dockerfiles にあります。品質は悪いものから悪いものまで大きく異なります (Docker と同様)。
依存関係を減らすためにビルドステップを調整する方法はたくさんあります。目的に応じて、コンポーネントを構成および統合する方法はさらにたくさんあります。ネイティブ デスクトップとして実行するのか、それとも別のデスクトップ内のアプリケーション ランタイムとして実行するのか?
ほとんどのオプションは、src ディレクトリで cmake を実行することによるビルド出力を介して公開されます。
サイズよりも単純にするために、ここで使用するビルド プリセット「everything」があります。
特定のパッケージ名はディストリビューションによって異なりますが、一般的なパッケージ名は次のとおりです。
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)、および回復可能なデスクトップを静的にリンクして、破損したユーザースペースで実行できるようにすることです (つまり、組み込み起動)。 1 つの例外は、特別な (arcan-lwa) ビルドで使用されるようにパッチが適用された OpenAL です。これは、その依存関係を削除するためのリファクタリングが予定されていますが、他の優先事項が邪魔をしています。
これで、メイン エンジンを構成して構築できるようになりました。
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) の存在に基づいて、ネイティブ ディスプレイ サーバーにするか、別のサーバー内でネストして実行するか、さらにはそれ自体で実行するかを自動的に判断しようとします。
「welcome」は単純な組み込みのようこそ画面の名前で、数秒後に自動的にシャットダウンされます。
より直接的に役立つものについては、組み込みアプリケーション「コンソール」を試すことができます。
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 障害時にメイン プロセスを回復するためのウォッチドッグとしての役割を担います。
使用されているアプリケーションに関係なくエンジンの動作を拡張するもう 1 つの方法は、いわゆるフック スクリプトです。これらは、-T コマンドライン引数でカバーされる「システム スクリプト パス」、またはデフォルトのshared/arcan/scripts内に存在します。
アイデアとしては、カスタム変更を迅速に実行したり、他のツールの橋渡しを支援したりするために、エンジン内からの連携が必要な「トグルオン」機能を提供できる必要があるということです。
良い例は「external_input」です。
arcan -H hooks/external_input.lua -H hooks/external_input.lua myappl
これにより、2 つの接続ポイント「extio_1」、「extio_2」が開かれ、1 つのクライアントが接続して、「myappl」アプリケーションにエンジンからのものとして表示される入力を提供できるようになります。
これらについてはマンページで詳しく説明されています。
Arcan-net は、ネットワーク上で 1 つまたは複数の 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 クライアントの場合。 「ケースごと」ベースは、複数のクライアントが同じブリッジ プロセスを共有するよりも安全であり、コストも無視できるため、推奨されます。欠点は、複数の異なるウェイランド接続の作成に依存する一部の複雑なクライアントが正しく動作しない可能性があることです。 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 アプリケーション名を使用して設定できます。これにより、たとえば、「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
これにより、アプリケーションは信頼できる子としてプログラムを開始できます (OS に依存する名前空間を使用して接続プリミティブを検索するのではなく、接続プリミティブを継承します)。上記の例では、ローカル モードで arcan-net が生成され、「netfwd」connpath に接続しているクライアントは 10.0.0.10:6666 でリッスンしているサーバーにリダイレクトされます。
このツールには多くのコントロールとオプションがあるため、詳細と手順についてはマンページを参照することをお勧めします。
少なくとも BSD と Linux では、「everything」ビルド オプションは「arcan_headless」というバイナリも生成する必要があります。このバイナリを使用すると、他のグラフィックスや表示システムに干渉することなく、arcan を実行できます。 「レンダー ノード」 (/dev/dri/renderD128 など) へのアクセスが与えられ、コンテナーやその他の厳密なサンドボックス ソリューション内でも正常に動作するはずです。
便利にするために、仮想画面に録画/ストリーミングできます。上記の例に続くそのようなセットアップの例は次のようになります。
ARCAN_VIDEO_ENCODE=protocol=vnc arcan_headless console
ビルドシステムが libvncserver 依存関係を検出したと仮定すると、localhost+5900 に公開された (安全でない、保護されていないなど) vnc サーバーが残るはずです。動作を制御するためにエンコード環境に追加できる引数のリストについては、afsrv_encode を参照してください。
このプロジェクトは、欧州委員会の次世代インターネット プログラムからの資金援助を受けて NLnet によって設立された基金である NGI0 Entrust を通じて資金提供されています。詳細については、NLnet プロジェクト ページをご覧ください。
独自の何かを開発することに興味がない場合は、このプロジェクトの一部だけを使用してもほとんど役に立たないでしょう。検討していただきたいプロジェクトをいくつか紹介します。
Durden は、このプロジェクトを表示サーバーとして使用するメインのデスクトップ環境です。
Safespaces は実験的な VR/3D デスクトップ環境です。
Pipeworld はデータフロー (Excel を思い浮かべてください) プログラミング環境です
Arcan-Devices は追加のドライバーを蓄積します。
より多くの種類のクライアントなどのサポートを受けるには、以下もあります。
Wayland のサポート (上記の Wayland セクションおよび src/wayland/README.md を参照)。
QEmu -ui arcan オプションを追加したパッチ適用済みの QEmu バージョン。
Xarcan は、X セッションを「ウィンドウとして」実行できるようにするパッチ適用された Xorg です。
nvim-arcan は、ネイティブ arcan クライアントとして機能する neovim フロントエンドです。
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 では、これは global/settings/system/clipboard 経由で有効になり、ツールが取得するクリップボード アクセスの量を制御できます。
Aloadimage は、xloadimage に似た、単純なサンドボックス イメージ ローダーです。これは、arcan を使用してアプリケーションを開発するときにクライアントの動作をテストするのに役立ちますが、適度に高速な画像読み込みや基本的なプレイリスト コントロールなどを備えた、それ自体の画像ビューアとしても役立ちます。
VR ブリッジは、さまざまなヘッドマウント ディスプレイのサポートを追加する arcan_vr バイナリを提供するオプションの入力ドライバーです。セットアップと使用に関する詳細な手順は、「関連プロジェクト」セクションで説明されている Safespaces プロジェクトの一部として参照できます。
Arcan-trayicon は、2 つの参照イメージ (アクティブおよび非アクティブ) とともに別の Arcan クライアントをチェーンロードするツールです。実行中の Arcan アプリケーションのアイコン トレイに自身を登録しようとしますが、サポートを明示的に有効にする必要があります。 Durden では、これはパス経由で行われます。
global/settings/statusbar/buttons/right/add_external=tray
その後、以下を使用できます。
ARCAN_CONNPATH=tray arcan-trayicon active.svg inactive.svg afsrv_terminal
または、トレイ ボタンをクリックするとロードされ、ポップアップ内に閉じ込められ、ポップアップが破棄されると強制終了される他の Arcan クライアント。これは、さまざまなシステム サービスや外部コマンド スクリプトをラップするための迅速で便利な方法です。