Arcan은 특수 임베디드 애플리케이션을 위한 사용자 인터페이스부터 본격적인 독립형 데스크탑 환경에 이르기까지 거의 모든 것을 생성하기 위한 강력한 개발 프레임워크입니다.
그 중심에는 잘 테스트되고 잘 문서화된 Lua 스크립팅 인터페이스를 갖춘 강력하고 휴대 가능한 멀티미디어 엔진이 있습니다. 개발에서는 API 설계 측면에서 놀라움을 최소화하는 원칙에 따라 보안, 디버그 가능성 및 성능을 강조합니다.
기능, 디자인, 목표, 현재 개발, 로드맵, 변경 로그, 기여에 대한 참고 사항 등에 대한 자세한 내용은 arcan-wiki를 참조하세요.
기타 링크, 공지사항, 릴리스, 비디오/프레젠테이션 등을 수집하는 웹사이트도 있습니다.
커뮤니티에 문의하려면 irc.libera.chat의 IRC 채널 #arcan 및/또는 디스코드(초대 링크)를 확인하세요.
개발자 정보는 HACKING.md를 참조하세요.
Microsoft의 점점 더 폭력적인 관행으로 인해 github 저장소가 더 이상 사용되지 않게 되었으며, 이에 따라 자체 호스팅 Fossil로 전환하고 있습니다. 저장소는 당분간 github에 동기화되지만 그곳에서는 활발한 개발 활동이 없습니다. fossil.arcan-fe.com을 참조하세요.
voidlinux와 같은 일부 배포판은 패키지의 일부로 대부분의 arcan을 포함하고 있으므로 그 중 하나에 대한 작업을 절약할 수 있습니다. 활동적인 커뮤니티가 있는 다른 커뮤니티는 Nix를 통해 이루어집니다(예: nix-shell -p arcan.all-wrapped).
Docker-컨테이너 템플릿(주로 헤드리스 개발 및 테스트에 사용됨)은 여기서 찾을 수 있습니다. 품질은 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)을 보장하고 복구 가능한 데스크톱이 손상된 사용자 공간에서 정적으로 연결되고 실행될 수 있도록 보장하는 것입니다(따라서 포함된 불러오기). 한 가지 예외는 특수(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 호환) 그래픽 응용 프로그램도 실행할 수 있다는 추가 기능이 있습니다. 다른 프로젝트에 대해서는 아래 '관련 프로젝트'를 참조하세요.
입력 장치가 오작동하는 경우 다음의 빠르고 더러운 'eventtest'를 사용하세요.
arcan /path/to/arcan/tests/interactive/eventtest
누구를 비난할지 알아내는 데 유용할 수 있습니다.
생성된 egl-dri 플랫폼 'arcan' 바이너리는 기본적으로 suid를 설치합니다. 일부 특정 기능(예: sysfs 및 친구에 대한 액세스가 필요한 Linux의 노트북 백라이트 제어)이 필요한 경우가 아니면 이는 꼭 필요한 것은 아닙니다.
관련이 없는 경우 바이너리에서 suid 속성을 제거할 수 있지만 현재 사용자는 여전히 관련 /dev/input/event 및 /dev/dri/cardN 및 /dev/dri/renderN 파일에 액세스해야 합니다. 제대로 작동합니다. 그렇지 않으면 입력 및/또는 그래픽 장치가 감지되지 않거나 사용 가능하지 않을 수 있습니다.
바이너리는 메인 엔진이 실행하는 비 suid 부분으로 분할됩니다. 더 높은 권한으로 실행 중인 항목과 권한 삭제를 위한 코드를 감사하려면 posix/psep_open.c를 참조하세요. 권한 있는 프로세스는 장치 액세스 협상, 가상 터미널 전환 구현, 라이브 잠금 또는 일부 GPU 오류 시 기본 프로세스 복구를 위한 감시 역할을 담당합니다.
사용되는 앱에 관계없이 엔진 동작을 확장하는 또 다른 방법은 후크 스크립트라고 합니다. 이는 -T 명령줄 인수 또는 기본값인 shared/arcan/scripts에 포함된 '시스템 스크립트 경로' 내에 있습니다.
빠른 사용자 정의 수정을 수행하거나 다른 도구를 연결하는 데 도움을 주기 위해 엔진 내부의 협력이 필요한 '토글 온' 기능을 제공할 수 있어야 한다는 아이디어입니다.
좋은 예는 'external_input'입니다.
arcan -H hooks/external_input.lua -H hooks/external_input.lua myappl
이렇게 하면 하나의 클라이언트가 연결하고 엔진에서 오는 것처럼 'myappl' 애플리케이션에 표시되는 입력을 제공할 수 있는 'extio_1', 'extio_2'라는 두 개의 연결 지점이 열립니다.
이에 대한 자세한 내용은 맨페이지에 나와 있습니다.
Arcan-net은 네트워크를 통해 하나 이상의 Arcan 클라이언트를 전달할 수 있는 바이너리입니다. 이는 기본적으로 구축되며 별도의 네트워크 도구로 트리거될 수도 있고 ARCAN_CONNPATH=a12://id@host:port를 설정하거나 창 관리자가 마이그레이션 요청을 발행할 때 shmif에서 간접적으로 시작할 수도 있습니다.
src/a12/net/README.md 및 src/a12/net/HACKING.md도 참조하세요.
일부 장소에서 언급되는 'arcan-wayland' 또는 'waybridge'는 Xwayland를 통해 wayland 및 X 클라이언트에 대한 지원을 추가하는 바이너리입니다. 글로벌 시스템 서비스로 실행될 수 있습니다. 예:
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 종속 네임스페이스를 사용하여 프로그램을 찾으려고 시도하는 대신 연결 기본 형식을 상속함)으로 프로그램을 시작할 수 있습니다. 위의 예에서는 'netfwd' connpath에 연결하는 클라이언트가 10.0.0.10:6666에서 수신 대기하는 서버로 리디렉션되는 로컬 모드에서 arcan-net을 생성했을 것입니다.
이 도구에는 다양한 컨트롤과 옵션이 있으므로 맨페이지에서 자세한 내용과 지침을 확인하는 것이 좋습니다.
'everything' 빌드 옵션은 적어도 BSD 및 Linux에서 '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에서는 도구가 얻는 클립보드 액세스 양을 제어할 수 있는 전역/설정/시스템/클립보드를 통해 활성화됩니다.
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
또는 트레이 버튼을 클릭할 때 로드되어 팝업으로 제한되고 팝업이 파괴되면 종료되는 다른 Arcan 클라이언트도 있습니다. 이는 다양한 시스템 서비스와 외부 명령 스크립트를 래핑하는 빠르고 편리한 방법입니다.