Arcan — это мощная среда разработки, позволяющая создавать практически все, от пользовательских интерфейсов для специализированных встроенных приложений до полноценных автономных настольных сред.
В его основе лежит надежный и портативный мультимедийный движок с хорошо протестированным и хорошо документированным интерфейсом сценариев Lua. При разработке особое внимание уделяется безопасности, возможности отладки и производительности, руководствуясь принципом наименьшего неожиданности с точки зрения дизайна API.
Более подробную информацию о возможностях, дизайне, целях, текущем развитии, дорожной карте, журналах изменений, примечаниях по участию и т. д. можно найти в аркан-вики.
Также есть сайт, на котором собраны другие ссылки, анонсы, релизы, видео/презентации и так далее.
Для связи с сообществом посетите IRC-канал #arcan на irc.libera.chat и/или дискорд (пригласительная ссылка).
Информацию для разработчиков смотрите на HACKING.md.
Репозиторий GitHub прекращает свое существование из-за все более злоупотреблений со стороны Microsoft, и поэтому мы переходим на самостоятельное размещение Fossil. Репозиторий на данный момент будет синхронизирован с github, но активной деятельности по разработке там не будет. См. ископаемый.arcan-fe.com.
В некоторых дистрибутивах, например voidlinux, большая часть arcan входит в состав пакетов, так что вы можете сэкономить немного времени, выбрав один из них. Другие с активным сообществом будут через Nix (например: nix-shell -parcan.all-wrapped).
Шаблоны Docker-контейнеров (в основном используемые для автономной разработки и тестирования) можно найти здесь, качество сильно варьируется от плохого до плохого (как и Docker): dockerfiles.
Существует множество способов настройки этапов сборки, чтобы уменьшить зависимости. Существует еще больше способов настройки и интеграции компонентов в зависимости от того, что вы собираетесь делать; работает как собственный рабочий стол или как среда выполнения приложения на другом рабочем столе?
Большинство параметров доступны через выходные данные сборки при запуске cmake в каталоге src.
Для простоты выбора размера существует предустановка сборки «все», которую мы здесь и будем использовать.
Конкретные имена пакетов зависят от вашего дистрибутива, но наиболее распространенными являются:
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 -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
Возможно, это поможет выяснить, кто виноват.
Созданный двоичный файл «arcan» платформы egl-dri по умолчанию устанавливает suid. В этом нет строгой необходимости, если только не желательны некоторые специфические функции, например, управление подсветкой ноутбука в Linux, поскольку для этого требуется доступ к sysfs и друзьям.
Если это не имеет значения, вы можете удалить свойство suid из двоичного файла, но учтите, что вашему текущему пользователю по-прежнему требуется доступ к соответствующим файлам /dev/input/event и /dev/dri/cardN и /dev/dri/renderN для работать должным образом — в противном случае устройства ввода и/или графические устройства могут быть не обнаружены или недоступны для использования.
Бинарный файл разделяется на часть, не относящуюся к suid, на которой работает основной движок. См. posix/psep_open.c для проверки того, что запускается с более высокими привилегиями, а также код для удаления привилегий. Привилегированный процесс отвечает за согласование доступа к устройствам, реализацию переключения виртуальных терминалов и выполняет роль сторожевого таймера для восстановления основного процесса при блокировках в реальном времени или некоторых сбоях графического процессора.
Еще один способ расширить поведение движка независимо от используемого приложения — это так называемые скрипты-хуки. Они находятся внутри «пути к системному скрипту», указанного в аргументе командной строки -T, или по умолчанию в файлеshared/arcan/scripts.
Идея состоит в том, что они должны иметь возможность предоставлять функции «включения», которые потребуют взаимодействия внутри движка, чтобы выполнять быстрые пользовательские модификации или помогать подключать другие инструменты.
Хорошим примером является «external_input»:
arcan -H hooks/external_input.lua -H hooks/external_input.lua myappl
Это откроет две точки подключения, «extio_1», «extio_2», которые позволят одному клиенту подключиться и предоставить входные данные, которые будут отображаться для приложения «myappl» как исходящие от движка.
Более подробно они описаны на странице руководства.
Arcan-net — это двоичный файл, который позволяет перенаправлять одного или нескольких клиентов Arcan по сети. Он создается по умолчанию и может быть запущен как отдельный сетевой инструмент, а также запущен косвенно из shmif, установив ARCAN_CONNPATH=a12://id@host:port, или при выдаче запроса на миграцию оконным менеджером.
См. также: 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.
В качестве быстрого примера, вот как можно проверить и изменить ключи, которые в настоящее время использует «Дерден»:
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
Это позволяет приложениям запускать программу как дочернюю программу (которая наследует ее примитивы подключения, а не пытается найти их, используя некоторое пространство имен, зависящее от ОС). В приведенном выше примере возникнет arcan-net в локальном режиме, где клиенты, подключающиеся к пути подключения «netfwd», будут перенаправлены на прослушивающий сервер по адресу 10.0.0.10:6666.
Этот инструмент имеет множество элементов управления и опций, поэтому рекомендуется просмотреть его справочную страницу для получения более подробной информации и инструкций.
Опция сборки «все» также должна создавать двоичный файл под названием «arcan_headless», по крайней мере, на BSD и Linux. Этот двоичный файл можно использовать для запуска Arcan, не мешая другой вашей графической системе и системе отображения. Учитывая доступ к «узлу рендеринга» (/dev/dri/renderD128 и т. д.), он также должен нормально работать внутри контейнеров и других строгих решений для песочницы.
Чтобы сделать его полезным, он может записывать/транслировать на виртуальный экран. Примером такой настройки, следующей за приведенным выше примером, может быть:
ARCAN_VIDEO_ENCODE=protocol=vnc arcan_headless console
Предполагая, что система сборки обнаружила зависимость libvncserver, у вас должен остаться открытый (небезопасный, незащищенный...) vnc-сервер по адресу localhost+5900. См. 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 это активируется через global/settings/system/clipboard, где вы можете контролировать объем доступа к буферу обмена, который получает инструмент.
Aloadimage — это простой загрузчик изображений для песочницы, похожий на xloadimage. Он полезен как для тестирования поведения клиента при разработке приложений с использованием Arcan, так и в качестве самостоятельного средства просмотра изображений с достаточно быстрой загрузкой изображений, базовыми элементами управления списками воспроизведения и так далее.
VR Bridge — это дополнительный входной драйвер, который предоставляет двоичный файл arcan_vr, который добавляет поддержку различных наголовных дисплеев. Более подробные инструкции по его настройке и использованию можно найти в рамках проекта Safespaces, упомянутого в разделе «Связанные проекты».
Arcan-trayicon — это инструмент, который загружает по цепочке другой клиент Arcan вместе с двумя эталонными изображениями (активным и неактивным). Он пытается зарегистрироваться в области значков работающего приложения Arcan, хотя ему необходимо явно включить поддержку. В Дердене это делается по пути:
global/settings/statusbar/buttons/right/add_external=tray
Затем вы можете использовать:
ARCAN_CONNPATH=tray arcan-trayicon active.svg inactive.svg afsrv_terminal
Или какой-нибудь другой аркан-клиент, который затем будет загружаться при нажатии кнопки на панели задач, ограничиваться всплывающим окном, а затем отключаться при уничтожении всплывающего окна. Это быстрый и удобный способ обертывания различных системных служб и внешних командных сценариев.