Arcan é uma estrutura de desenvolvimento poderosa para criar praticamente qualquer coisa, desde interfaces de usuário para aplicativos embarcados especializados até ambientes de desktop autônomos completos.
Em seu cerne está um mecanismo multimídia robusto e portátil, com uma interface de script Lua bem testada e bem documentada. O desenvolvimento enfatiza segurança, capacidade de depuração e desempenho – guiado por um princípio de menor surpresa em termos de design de API.
Para obter mais detalhes sobre capacidades, design, objetivos, desenvolvimento atual, roteiro, changelogs, notas sobre contribuições e assim por diante, consulte o arcan-wiki.
Existe também um site que coleta outros links, anúncios, lançamentos, vídeos/apresentações e assim por diante.
Para contato com a comunidade, confira o canal IRC #arcan em irc.libera.chat e/ou o discord (link de convite)
Para obter informações do desenvolvedor, consulte HACKING.md
O repositório github está extinto graças às práticas cada vez mais abusivas da Microsoft e, portanto, estamos migrando para o Fossil auto-hospedado. O repositório será sincronizado com o github por enquanto, mas nenhuma atividade de desenvolvimento ativa lá. Consulte fossil.arcan-fe.com.
Algumas distribuições, por exemplo, voidlinux, têm a maior parte do arcan como parte de seus pacotes, então você pode economizar algum trabalho optando por uma delas. Outros com uma comunidade ativa seriam através do Nix (por exemplo: nix-shell -p arcan.all-wrapped).
Os modelos de contêiner Docker (usados principalmente para desenvolvimento e teste headless) podem ser encontrados aqui, a qualidade varia muito de ruim a ruim (assim como o Docker): dockerfiles.
Há muitas maneiras de ajustar as etapas de construção para reduzir dependências. Existem ainda mais maneiras de configurar e integrar os componentes dependendo do que você pretende; rodando como um desktop nativo ou como um tempo de execução de aplicativo dentro de outro desktop?
A maioria das opções são expostas por meio da saída de compilação da execução do cmake no diretório src.
Por uma questão de simplicidade em relação ao tamanho, existe uma predefinição de construção, 'tudo', que usaremos aqui.
Os nomes de pacotes específicos dependem da sua distribuição, mas os mais comuns são:
sqlite3, openal-soft, sdl2, opengl, luajit, gbm, kms, freetype, harfbuzz
libxkbcommon
Para obter mais opções de codificação e decodificação, você também pode querer:
libvlc-core (videolan), the ffmpeg suite, leptonica + tesseract (ocr)
libvncserver libusb1, v4l2-loopback, mupdf
Primeiro, precisamos de algumas dependências de código-fonte que são clonadas manualmente por enquanto:
git clone https://github.com/letoram/arcan.git
cd arcan/external/git
./clone.sh
cd ../../
Normalmente, eles não são necessários, o uso principal é garantir certas opções de construção que podem variar entre as distribuições (luajit) e garantir que um desktop recuperável possa ser vinculado estaticamente e executado em um espaço de usuário que de outra forma seria quebrado (portanto, trazerup incorporado). A única exceção é o OpenAL, que foi corrigido para ser usado por uma compilação especial (arcan-lwa). Isso está programado para refatoração para remover essa dependência, mas há outras prioridades no caminho.
Agora podemos configurar e construir o motor principal:
mkdir build
cd build
cmake -DBUILD_PRESET="everything" ../src
Como acontece com outros projetos baseados em CMake, você pode adicionar:
-DCMAKE_BUILD_TYPE=Debug
Para mudar de uma versão de lançamento para uma de depuração.
Quando terminar de investigar as dependências, você receberá um relatório de quais dependências foram encontradas e quais recursos foram ativados/desativados, ou alertará se algumas das dependências necessárias não puderem ser encontradas.
Faça e instale normalmente (ou seja, make, sudo make install). Vários binários são produzidos, sendo o 'principal' chamado simplesmente de arcano. Para testar 'na fonte' (sem instalar), você deve ser capaz de executar:
./arcan -T ../data/scripts -p ../data/resources ../data/appl/welcome
O argumento -T define nosso conjunto de scripts integrados/compartilhados, o -p onde recursos compartilhados como fontes e assim por diante podem ser encontrados, e o último argumento é o 'script' real a ser executado.
Com a instalação, isso deve ser reduzido para:
arcan welcome
Ele tentará automaticamente descobrir se deve ser um servidor de exibição nativo ou executado aninhado em outro ou até mesmo com base na presença de várias variáveis de ambiente (DISPLAY, WAYLAND_DISPLAY, ARCAN_CONNPATH).
'bem-vindo' é o nome de uma tela de boas-vindas integrada simples, que será encerrada automaticamente após alguns segundos .
Para algo mais diretamente útil, você pode tentar o 'console' do aplicativo integrado:
arcan console
Que deve funcionar exatamente como a linha de comando normal do console, mas com a vantagem adicional de poder executar aplicativos gráficos (compatíveis com arcan) também. Para outros projetos, consulte os 'Projetos Relacionados' mais abaixo.
Se os dispositivos de entrada estiverem se comportando mal, o 'eventtest' rápido e sujo em:
arcan /path/to/arcan/tests/interactive/eventtest
Pode ser útil para descobrir quem culpar.
O binário 'arcan' da plataforma egl-dri produzido instala o suid por padrão. Isto não é estritamente necessário, a menos que alguns recursos específicos sejam desejados, por exemplo, controles de luz de fundo de laptop no Linux, pois exigem acesso a sysfs e amigos.
Se isso não for relevante, você pode remover a propriedade suid do binário, mas observe que seu usuário atual ainda requer acesso aos arquivos /dev/input/event e /dev/dri/cardN e /dev/dri/renderN relevantes para funcionar corretamente - caso contrário, os dispositivos de entrada e/ou gráficos poderão não ser detectados ou utilizáveis.
O binário se divide em uma parte não-suid da qual o mecanismo principal é executado, consulte posix/psep_open.c para auditar o que está sendo executado com privilégios mais altos, bem como o código para eliminar privilégios. O processo privilegiado é responsável por negociar o acesso ao dispositivo, implementar a comutação de terminal virtual e como watchdog para recuperar o processo principal em bloqueios ativos ou algumas falhas de GPU.
Outra maneira de estender o comportamento do mecanismo, independentemente do aplicativo usado, são os chamados scripts de gancho. Eles residem dentro do 'caminho do script do sistema' coberto pelo argumento da linha de comando -T ou o padrão de shared/arcan/scripts.
A idéia é que eles sejam capazes de fornecer recursos de 'ativação' que precisariam de cooperação de dentro do mecanismo, a fim de fazer modificações personalizadas rápidas ou ajudar a conectar outras ferramentas.
Um bom exemplo é 'external_input':
arcan -H hooks/external_input.lua -H hooks/external_input.lua myappl
Isso abriria dois pontos de conexão, 'extio_1', 'extio_2', que permitirão que um cliente se conecte e forneça informações que aparecerão para o aplicativo 'myappl' como provenientes do mecanismo.
Eles são abordados com mais detalhes na página de manual.
Arcan-net é um binário que permite encaminhar um ou mais clientes arcan através de uma rede. Ele é construído por padrão e pode ser acionado como uma ferramenta de rede separada, bem como ser iniciado indiretamente a partir do shmif, configurando ARCAN_CONNPATH=a12://id@host:port, ou ao emitir uma solicitação de migração pelo gerenciador de janelas.
Veja também: src/a12/net/README.md e src/a12/net/HACKING.md.
O 'arcan-wayland' ou 'waybridge', como é referido em alguns lugares, é binário e adiciona suporte para wayland e clientes X (via Xwayland). Ele pode ser executado como um serviço de sistema global, por exemplo
arcan-wayland -xwl
Ou caso a caso, como:
arcan-wayland -exec weston-terminal
Para um cliente wayland compatível e:
arcan-wayland -exec-x11 xterm
Para um cliente X. A base “por caso” é recomendada porque é mais segura e protegida do que permitir que vários clientes compartilhem o mesmo processo de ponte, a um custo negligenciável. A desvantagem é que alguns clientes complexos que dependem de múltiplas conexões distintas de wayland podem não funcionar corretamente. O Firefox é um criminoso conhecido.
Há uma série de opções de ajuste e solução de problemas devido à complexidade do uso do wayland, consulte a página de manual e o botão --help.
Toda a configuração do tempo de execução é consolidada em um banco de dados, seja o padrão 'arcan.sqlite' ou um definido explicitamente (arcan -d mydb.sqlite).
Isso é usado para opções específicas de plataforma, opções específicas de mecanismo e para clientes confiáveis que têm permissão para iniciar os scripts em execução. Ele também é usado como um armazenamento de valores-chave de configuração para qualquer aplicativo arcan em execução.
Como um exemplo rápido, veja como inspecionar e modificar as chaves que 'Durden' está usando atualmente:
arcan_db show_appl durden
arcan_db add_appl_kv durden shadow_on true
A configuração avançada para algumas plataformas de vídeo pode ser definida através do nome reservado do aplicativo arcan. Isto definiria, por exemplo, o nome do dispositivo da placa gráfica principal para a versão da plataforma 'egl-dri':
arcan_db add_appl_kv arcan video_device=/dev/dri/card2
Para adicionar 'alvos de lançamento', você pode 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
Isso permite que os aplicativos iniciem um programa como um filho confiável (que herda suas primitivas de conexão em vez de tentar encontrá-los usando algum namespace dependente do sistema operacional). O exemplo acima teria gerado o arcan-net no modo local, onde os clientes que se conectassem ao connpath 'netfwd' seriam redirecionados para o servidor que escuta em 10.0.0.10:6666.
Existem muitos controles e opções para esta ferramenta, por isso sugerimos que você consulte sua página de manual para obter mais detalhes e instruções.
A opção de compilação 'everything' também deve produzir um binário chamado 'arcan_headless', pelo menos em BSDs e Linux. Este binário pode ser usado para executar o arcan sem interferir em outros gráficos e sistema de exibição. Dado acesso a um 'nó de renderização' (/dev/dri/renderD128 e assim por diante) e também deve funcionar bem dentro de contêineres e outras soluções de sandbox estritas.
Para torná-lo útil, ele pode gravar/transmitir para uma tela virtual. Um exemplo de tal configuração seguindo o exemplo acima seria:
ARCAN_VIDEO_ENCODE=protocol=vnc arcan_headless console
Supondo que o sistema de compilação encontrou a dependência do libvncserver, isso deve deixar você com um servidor vnc exposto (inseguro, desprotegido, ...) em localhost+5900. Consulte afsrv_encode para obter uma lista de argumentos que podem ser adicionados ao ambiente de codificação para controlar o que acontece.
Este projeto é financiado através do NGI0 Entrust, um fundo criado pela NLnet com apoio financeiro do programa Next Generation Internet da Comissão Europeia. Saiba mais na página do projeto NLnet.
Se você não estiver interessado em desenvolver algo próprio, provavelmente encontrará pouca utilidade apenas nas partes deste projeto. Aqui estão alguns projetos que você pode querer analisar:
Durden é o principal ambiente de desktop que usa este projeto como servidor de exibição.
Safespaces é um ambiente de desktop experimental VR/3D.
Pipeworld é um ambiente de programação de fluxo de dados (pense em Excel)
Arcan-Devices acumula drivers extras.
Para obter suporte para mais tipos de clientes e assim por diante, existe também:
Suporte ao Wayland (consulte a seção Wayland acima e src/wayland/README.md).
QEmu, uma versão corrigida do QEmu que adiciona uma opção -ui arcan.
Xarcan é um Xorg corrigido que permite executar uma sessão X 'como uma janela'.
nvim-arcan é um frontend neovim que atua como um cliente arcan nativo.
Há também uma série de ferramentas auxiliares que podem ser usadas para adicionar determinados recursos, como suporte para dispositivos VR e ícones de bandeja. Eles são construídos separadamente e podem ser encontrados no subdiretório tools/. Eles têm seus próprios sistemas de construção separados e arquivos README.md correspondentes.
Eles trabalham partindo do pressuposto de que o arcan e suas respectivas bibliotecas foram construídos e instalados. Eles são bloqueados e versionados para o mecanismo, portanto, se você atualizá-lo, certifique-se de reconstruir as ferramentas também.
As principais ferramentas de interesse são:
Acfgfs é uma ferramenta que permite montar certos aplicativos arcan como um sistema de arquivos FUSE. O aplicativo deve apoiá-lo explicitamente. Para o ambiente de desktop Durden, você pode usar global/settings/system/control=somename e então:
arcan_cfgfs --control=/path/to/durden/ipc/somename /mnt/desktop
E o controle/configuração da área de trabalho deve ser exposto no ponto de montagem especificado.
Aclip é um gerenciador de área de transferência semelhante ao Xclip. Ele permite fazer a ponte entre a área de transferência entre um ambiente de desktop como Durden e um servidor X.
Isso requer que a ponte da área de transferência tenha sido permitida (desativada por padrão por motivos de segurança). Em Durden, isso é ativado via global/settings/system/clipboard, onde você pode controlar quanto acesso à área de transferência a ferramenta obtém.
Aloadimage é um carregador de imagens de sandbox simples, semelhante ao xloadimage. É útil tanto para testar o comportamento do cliente ao desenvolver aplicativos usando arcan, mas também como um visualizador de imagens por si só, com carregamento de imagens razoavelmente rápido, controles básicos de lista de reprodução e assim por diante.
VR bridge é um driver de entrada opcional que fornece o binário arcan_vr que adiciona suporte para vários head-mounted displays. Instruções mais detalhadas sobre sua configuração e uso podem ser encontradas como parte do projeto Safespaces mencionado na seção 'Projetos Relacionados'.
Arcan-trayicon é uma ferramenta que carrega em cadeia outro cliente arcan, junto com duas imagens de referência (ativa e inativa). Ele tenta se registrar na bandeja de ícones de um aplicativo arcan em execução, embora deva ativar explicitamente o suporte. Em Durden, isso é feito através do caminho:
global/settings/statusbar/buttons/right/add_external=tray
Então você pode usar:
ARCAN_CONNPATH=tray arcan-trayicon active.svg inactive.svg afsrv_terminal
Ou algum outro cliente arcan que será carregado quando o botão da bandeja for clicado, confinado em um pop-up e então eliminado quando o pop-up for destruído. Esta é uma maneira rápida e conveniente de agrupar vários serviços do sistema e scripts de comandos externos.