Arcan es un potente marco de desarrollo para crear prácticamente cualquier cosa, desde interfaces de usuario para aplicaciones integradas especializadas hasta entornos de escritorio independientes completos.
En esencia se encuentra un motor multimedia robusto y portátil, con una interfaz de secuencias de comandos Lua bien documentada y probada. El desarrollo enfatiza la seguridad, la depuración y el rendimiento, guiados por el principio de mínima sorpresa en términos de diseño de API.
Para obtener más detalles sobre capacidades, diseño, objetivos, desarrollo actual, hoja de ruta, registros de cambios, notas sobre contribuciones, etc., consulte arcan-wiki.
También hay un sitio web que recopila otros enlaces, anuncios, lanzamientos, vídeos/presentaciones, etc.
Para contacto con la comunidad, consulte el canal IRC #arcan en irc.libera.chat y/o discord (enlace de invitación)
Para obtener información para desarrolladores, consulte HACKING.md
El repositorio de github está desapareciendo gracias a las prácticas cada vez más abusivas de Microsoft y, por lo tanto, nos estamos moviendo hacia Fossil autohospedado. El repositorio se sincronizará con github por el momento, pero no habrá actividades de desarrollo activas allí. Véase fósil.arcan-fe.com.
Algunas distribuciones, por ejemplo, voidlinux, tienen la mayor parte de arcan como parte de sus paquetes, por lo que puedes ahorrarte algo de trabajo optando por una de ellas. Otros con comunidad activa serían a través de Nix (por ejemplo: nix-shell -p arcan.all-wrapped).
Las plantillas de contenedor Docker (utilizadas principalmente para desarrollo y pruebas sin cabeza) se pueden encontrar aquí, la calidad varía enormemente de mala a pobre (al igual que Docker): dockerfiles.
Hay muchas formas de ajustar los pasos de compilación para reducir las dependencias. Hay incluso más formas de configurar e integrar los componentes dependiendo de lo que esté buscando; ¿Se ejecuta como un escritorio nativo o como un tiempo de ejecución de aplicación dentro de otro escritorio?
La mayoría de las opciones se exponen a través del resultado de la compilación al ejecutar cmake en el directorio src.
Para simplificar el tamaño, hay un ajuste preestablecido de compilación, "todo", que es el que usaremos aquí.
Los nombres de paquetes específicos dependen de su distribución, pero los más comunes son:
sqlite3, openal-soft, sdl2, opengl, luajit, gbm, kms, freetype, harfbuzz
libxkbcommon
Para obtener más opciones de codificación y decodificación, es posible que también desee:
libvlc-core (videolan), the ffmpeg suite, leptonica + tesseract (ocr)
libvncserver libusb1, v4l2-loopback, mupdf
Primero necesitamos algunas dependencias en el código fuente que se clonan manualmente por ahora:
git clone https://github.com/letoram/arcan.git
cd arcan/external/git
./clone.sh
cd ../../
Por lo general, no son necesarios, el uso principal es garantizar ciertas opciones de compilación que pueden variar entre distribuciones (luajit) y garantizar que un escritorio recuperable pueda vincularse estáticamente y ejecutarse en un espacio de usuario que de otro modo estaría roto (por lo tanto, inicio integrado). La única excepción es OpenAL, que está parcheado para ser utilizado por una compilación especial (arcan-lwa). Está previsto refactorizarlo para eliminar esa dependencia, pero hay otras prioridades en el camino.
Ahora podemos configurar y construir el motor principal:
mkdir build
cd build
cmake -DBUILD_PRESET="everything" ../src
Al igual que con otros proyectos basados en CMake, puedes agregar:
-DCMAKE_BUILD_TYPE=Debug
Para cambiar de una versión de lanzamiento a una de depuración.
Cuando haya terminado de sondear las dependencias, obtendrá un informe de qué dependencias se encontraron y qué características se activaron/desactivaron, o le avisará si no se pudieron encontrar algunas de las dependencias requeridas.
Realice e instale como de costumbre (es decir, make, sudo make install). Se producen varios binarios, y el "principal" se denomina simplemente arcano. Para probar 'en el código fuente' (sin instalar), debería poder ejecutar:
./arcan -T ../data/scripts -p ../data/resources ../data/appl/welcome
El argumento -T establece nuestro conjunto de scripts integrados/compartidos, el -p donde se pueden encontrar recursos compartidos como fuentes, etc., y el último argumento es el 'script' real que se ejecutará.
Con la instalación, esto debería reducirse a:
arcan welcome
Automáticamente intentará determinar si debe ser un servidor de visualización nativo o ejecutarse anidado dentro de otro o incluso en sí mismo en función de la presencia de varias variables de entorno (DISPLAY, WAYLAND_DISPLAY, ARCAN_CONNPATH).
'bienvenido' es el nombre de una sencilla pantalla de bienvenida incorporada, que se cerrará automáticamente después de unos segundos .
Para algo más directamente útil, puede probar la 'consola' de la aplicación incorporada:
arcan console
Lo cual debería funcionar igual que la línea de comandos normal de tu consola, pero con el toque adicional de poder ejecutar también aplicaciones gráficas (compatibles con arcan). Para otros proyectos, consulte los 'Proyectos relacionados' más abajo.
Si los dispositivos de entrada se comportan mal, la rápida y sucia 'prueba de eventos' en:
arcan /path/to/arcan/tests/interactive/eventtest
Podría ser útil para descubrir a quién culpar.
El binario 'arcan' de la plataforma egl-dri producido instala suid de forma predeterminada. Esto no es estrictamente necesario a menos que se deseen algunas funciones específicas, por ejemplo, controles de retroiluminación de portátiles en Linux, ya que requieren acceso a sysfs y amigos.
Si eso no es relevante, puede eliminar la propiedad suid del binario, pero tenga en cuenta que su usuario actual aún requiere acceso a los archivos /dev/input/event y /dev/dri/cardN y /dev/dri/renderN relevantes para funcione correctamente; de lo contrario, es posible que los dispositivos de entrada y/o gráficos no se detecten o no se puedan utilizar.
El binario se divide en una parte no suid de la que se ejecuta el motor principal; consulte posix/psep_open.c para auditar lo que se ejecuta con privilegios más altos, así como el código para eliminar privilegios. El proceso privilegiado es responsable de negociar el acceso al dispositivo, implementar la conmutación de terminal virtual y actuar como guardián para recuperar el proceso principal en caso de bloqueos activos o algunas fallas de la GPU.
Otra forma de ampliar el comportamiento del motor independientemente de la aplicación que se utilice son los llamados scripts de gancho. Estos residen dentro de la 'ruta del script del sistema' cubierta por el argumento de línea de comando -T, o el valor predeterminado deshared/arcan/scripts.
La idea es que estos deberían poder proporcionar funciones de "activación" que necesitarían cooperación desde dentro del motor, para realizar modificaciones personalizadas rápidas o ayudar a unir otras herramientas.
Un buen ejemplo es 'external_input':
arcan -H hooks/external_input.lua -H hooks/external_input.lua myappl
Esto abriría dos puntos de conexión, 'extio_1', 'extio_2' que permitirán que un cliente se conecte y proporcione información que aparecerá en la aplicación 'myappl' como proveniente del motor.
Estos se tratan con más detalle en la página de manual.
Arcan-net es un binario que le permite reenviar uno o varios clientes arcan a través de una red. Está construido de forma predeterminada y se puede activar como una herramienta de red separada o indirectamente desde shmif configurando ARCAN_CONNPATH=a12://id@host:port, o al emitir una solicitud de migración por parte del administrador de ventanas.
Ver también: src/a12/net/README.md y src/a12/net/HACKING.md.
El 'arcan-wayland' o 'waybridge', como se le conoce en algunos lugares, es binario y agrega soporte para clientes wayland y X (a través de Xwayland). Se puede ejecutar como un servicio del sistema global, por ejemplo
arcan-wayland -xwl
O caso por caso, como:
arcan-wayland -exec weston-terminal
Para un cliente compatible con wayland, y:
arcan-wayland -exec-x11 xterm
Para un cliente X. Se recomienda el método "por caso", ya que es más seguro que permitir que varios clientes compartan el mismo proceso puente, a un costo insignificante. La desventaja es que algunos clientes complejos que dependen de realizar múltiples conexiones distintas pueden no funcionar correctamente. Firefox es un delincuente conocido.
Hay una serie de opciones de ajuste y solución de problemas debido a la complejidad del uso de wayland; consulte la página de manual y la opción --help.
Toda la configuración del tiempo de ejecución se consolida en una base de datos, ya sea la predeterminada 'arcan.sqlite' o una configurada explícitamente (arcan -d mydb.sqlite).
Esto se utiliza para opciones específicas de la plataforma, opciones específicas del motor y para clientes confiables a los que se les permite iniciar los scripts en ejecución. También se utiliza como almacén de clave-valor de configuración para cualquier aplicación arcana que se esté ejecutando.
Como ejemplo rápido, así es como inspeccionar y modificar las claves que 'Durden' está usando actualmente:
arcan_db show_appl durden
arcan_db add_appl_kv durden shadow_on true
La configuración avanzada para algunas plataformas de video se puede establecer a través del nombre reservado de la aplicación arcana. Esto, por ejemplo, establecería el nombre del dispositivo de la tarjeta gráfica principal para la versión de la plataforma 'egl-dri':
arcan_db add_appl_kv arcan video_device=/dev/dri/card2
Para agregar 'objetivos de lanzamiento', puedes usar algo como:
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
Esto permite que las aplicaciones inicien un programa como un niño confiable (que hereda sus primitivas de conexión en lugar de intentar encontrarlos usando algún espacio de nombres dependiente del sistema operativo). El ejemplo anterior habría generado arcan-net en el modo local donde los clientes que se conectan a la ruta de conexión 'netfwd' serían redirigidos al servidor que escucha en 10.0.0.10:6666.
Hay muchos controles y opciones para esta herramienta, por lo que se sugiere consultar su página de manual para obtener más detalles e instrucciones.
La opción de compilación 'todo' también debería producir un binario llamado 'arcan_headless', al menos en BSD y Linux. Este binario se puede utilizar para ejecutar arcan sin interferir con otros sistemas de visualización y gráficos. Se le da acceso a un 'nodo de renderizado' (/dev/dri/renderD128 y así sucesivamente) y también debería funcionar bien dentro de contenedores y otras soluciones estrictas de espacio aislado.
Para que sea útil, puede grabar/transmitir a una pantalla virtual. Un ejemplo de dicha configuración siguiendo el ejemplo anterior sería:
ARCAN_VIDEO_ENCODE=protocol=vnc arcan_headless console
Suponiendo que el sistema de compilación encontró la dependencia libvncserver, esto debería dejarlo con un servidor vnc expuesto (inseguro, desprotegido, ...) en localhost+5900. Consulte afsrv_encode para obtener una lista de argumentos que se pueden agregar al entorno de codificación para controlar lo que sucede.
Este proyecto está financiado a través de NGI0 Entrust, un fondo establecido por NLnet con el apoyo financiero del programa Next Generation Internet de la Comisión Europea. Obtenga más información en la página del proyecto NLnet.
Si no está interesado en desarrollar algo propio, probablemente encontrará poca utilidad solo con las partes de este proyecto. Aquí hay algunos proyectos que quizás quieras considerar:
Durden es el entorno de escritorio principal que utiliza este proyecto como servidor de visualización.
Safespaces es un entorno de escritorio experimental VR/3D.
Pipeworld es un entorno de programación de flujo de datos (piense en Excel)
Arcan-Devices acumula controladores adicionales.
Para obtener soporte para más tipos de clientes, etc., también existe:
Soporte de Wayland (consulte la sección Wayland anterior y src/wayland/README.md).
QEmu es una versión parcheada de QEmu que agrega una opción -ui arcan.
Xarcan es un Xorg parcheado que le permite ejecutar una sesión X 'como una ventana'.
nvim-arcan es una interfaz de neovim que actúa como un cliente arcan nativo.
También hay una serie de herramientas auxiliares que se pueden utilizar para agregar ciertas funciones, como compatibilidad con dispositivos de realidad virtual e íconos de bandeja. Estos se crean por separado y se pueden encontrar en el subdirectorio herramientas/. Tienen sus propios sistemas de compilación separados y los archivos README.md correspondientes.
Trabajan bajo el supuesto de que Arcan y sus respectivas bibliotecas han sido construidas e instaladas. Están sincronizadas y versionadas para el motor, por lo que si lo actualiza, asegúrese de reconstruir las herramientas también.
Las principales herramientas de interés son:
Acfgfs es una herramienta que le permite montar ciertas aplicaciones arcanas como un sistema de archivos FUSE. La aplicación debe admitirlo explícitamente. Para el entorno de escritorio Durden, puede usar global/settings/system/control=somename y luego:
arcan_cfgfs --control=/path/to/durden/ipc/somename /mnt/desktop
Y el control/configuración del escritorio debe exponerse en el punto de montaje especificado.
Aclip es un administrador de portapapeles similar a Xclip. Permite conectar el portapapeles entre un entorno de escritorio como Durden y el de un servidor X.
Esto requiere que se haya permitido el puente del portapapeles (deshabilitado de forma predeterminada por razones de seguridad). En Durden, esto se activa a través de global/settings/system/clipboard, donde puedes controlar cuánto acceso al portapapeles obtiene la herramienta.
Aloadimage es un cargador de imágenes de espacio aislado simple, similar a xloadimage. Es útil tanto para probar el comportamiento del cliente al desarrollar aplicaciones usando arcan, como también como un visor de imágenes por derecho propio, con una carga de imágenes razonablemente rápida, controles básicos de listas de reproducción, etc.
VR bridge es un controlador de entrada opcional que proporciona el binario arcan_vr que agrega soporte para varias pantallas montadas en la cabeza. Se pueden encontrar instrucciones más detalladas sobre su configuración y uso como parte del proyecto Safespaces mencionado en la sección "Proyectos relacionados".
Arcan-trayicon es una herramienta que carga en cadena otro cliente arcano, junto con dos imágenes de referencia (activa e inactiva). Intenta registrarse en la bandeja de iconos de una aplicación arcana en ejecución, aunque debe habilitar explícitamente el soporte. En Durden, esto se hace a través del camino:
global/settings/statusbar/buttons/right/add_external=tray
Entonces puedes usar:
ARCAN_CONNPATH=tray arcan-trayicon active.svg inactive.svg afsrv_terminal
O algún otro cliente arcano que luego se cargará cuando se haga clic en el botón de la bandeja, se limitará a una ventana emergente y luego se eliminará cuando se destruya la ventana emergente. Esta es una forma rápida y conveniente de empaquetar varios servicios del sistema y scripts de comandos externos.