Arcan adalah kerangka pengembangan yang kuat untuk menciptakan hampir semua hal mulai dari antarmuka pengguna untuk aplikasi tertanam khusus hingga lingkungan desktop mandiri yang lengkap.
Inti dari program ini adalah mesin multimedia yang kuat dan portabel, dengan antarmuka skrip Lua yang telah teruji dan terdokumentasi dengan baik. Pengembangan ini menekankan keamanan, kemampuan debug, dan kinerja -- dipandu oleh prinsip yang paling tidak mengejutkan dalam hal desain API.
Untuk detail lebih lanjut tentang kemampuan, desain, tujuan, perkembangan saat ini, peta jalan, log perubahan, catatan tentang kontribusi, dan sebagainya, silakan merujuk ke arcan-wiki.
Ada juga website yang mengumpulkan link lain, pengumuman, rilis, video/presentasi dan lain sebagainya.
Untuk kontak komunitas, lihat saluran IRC #arcan di irc.libera.chat dan/atau perselisihan (invite-link)
Untuk informasi pengembang, lihat HACKING.md
Repositori github tidak lagi berfungsi karena semakin banyaknya praktik penyalahgunaan Microsoft, dan kami beralih ke Fossil yang dihosting sendiri. Repositori akan disinkronkan ke github untuk sementara waktu, tetapi tidak ada aktivitas pengembangan aktif di sana. Lihat fosil.arcan-fe.com.
Beberapa distribusi, misalnya voidlinux memiliki sebagian besar arcan sebagai bagian dari paketnya, sehingga Anda dapat menghemat pekerjaan untuk salah satu distribusi tersebut. Yang lain dengan komunitas aktif akan melalui Nix (misalnya: nix-shell -p arcan.all-wrapped).
Templat wadah Docker (terutama digunakan untuk pengembangan dan pengujian tanpa kepala) dapat ditemukan di sini, kualitasnya sangat bervariasi dari buruk hingga buruk (seperti Docker): dockerfiles.
Ada banyak cara untuk menyesuaikan langkah-langkah pembangunan untuk mengurangi ketergantungan. Ada lebih banyak cara untuk mengkonfigurasi dan mengintegrasikan komponen tergantung pada tujuan Anda; berjalan sebagai desktop asli atau sebagai runtime aplikasi di dalam desktop lain?
Sebagian besar opsi diekspos melalui output build dari menjalankan cmake di direktori src.
Demi kesederhanaan dalam hal ukuran, ada preset build, 'semuanya' yang akan kita gunakan di sini.
Nama paket tertentu bergantung pada distribusi Anda, namun yang umum adalah:
sqlite3, openal-soft, sdl2, opengl, luajit, gbm, kms, freetype, harfbuzz
libxkbcommon
Untuk opsi penyandian dan penguraian kode lainnya, Anda mungkin juga menginginkan:
libvlc-core (videolan), the ffmpeg suite, leptonica + tesseract (ocr)
libvncserver libusb1, v4l2-loopback, mupdf
Pertama, kita memerlukan beberapa dependensi dalam sumber yang dikloning secara manual untuk saat ini:
git clone https://github.com/letoram/arcan.git
cd arcan/external/git
./clone.sh
cd ../../
Ini biasanya tidak diperlukan, kegunaan utamanya adalah untuk memastikan opsi build tertentu yang mungkin berbeda antar distribusi (luajit) dan untuk memastikan bahwa desktop yang dapat dipulihkan dapat ditautkan secara statis dan dieksekusi di ruang pengguna yang rusak (jadi embedup tertanam). Satu-satunya pengecualian adalah OpenAL yang ditambal untuk digunakan oleh build khusus (arcan-lwa). Hal ini dijadwalkan untuk melakukan pemfaktoran ulang untuk menghilangkan ketergantungan tersebut, namun ada prioritas lain yang harus dilakukan.
Sekarang kita dapat mengkonfigurasi dan membangun mesin utama:
mkdir build
cd build
cmake -DBUILD_PRESET="everything" ../src
Seperti proyek berbasis CMake lainnya, Anda dapat menambahkan:
-DCMAKE_BUILD_TYPE=Debug
Untuk beralih dari versi rilis ke versi debug.
Setelah selesai menyelidiki dependensi, Anda akan mendapatkan laporan dependensi mana yang ditemukan dan fitur mana yang diaktifkan/dinonaktifkan, atau memperingatkan Anda jika beberapa dependensi yang diperlukan tidak dapat ditemukan.
Buat dan instal seperti biasa (yaitu make, sudo make install). Sejumlah biner diproduksi, dengan yang 'utama' disebut arcan saja. Untuk menguji 'dalam sumber' (tanpa menginstal), Anda harus dapat menjalankan:
./arcan -T ../data/scripts -p ../data/resources ../data/appl/welcome
Argumen -T menyetel kumpulan skrip bawaan/bersama kami, -p tempat sumber daya bersama seperti font dan sebagainya dapat ditemukan, dan argumen terakhir adalah 'skrip' sebenarnya yang akan dijalankan.
Dengan instalasi, ini akan berkurang menjadi:
arcan welcome
Secara otomatis akan mencoba mencari tahu apakah itu harus menjadi server tampilan asli atau dijalankan di dalam server lain atau bahkan dirinya sendiri berdasarkan keberadaan berbagai variabel lingkungan (DISPLAY, WAYLAND_DISPLAY, ARCAN_CONNPATH).
'selamat datang' adalah nama layar selamat datang bawaan yang sederhana, yang akan mati secara otomatis setelah beberapa detik .
Untuk sesuatu yang lebih bermanfaat secara langsung, Anda dapat mencoba 'konsol' aplikasi bawaan:
arcan console
Yang seharusnya berfungsi seperti baris perintah konsol normal Anda, tetapi dengan tambahan kemampuan untuk menjalankan aplikasi grafis (kompatibel dengan arcan) juga. Untuk proyek lainnya, lihat 'Proyek Terkait' di bawah.
Jika perangkat input mengalami gangguan, 'eventtest' yang cepat dan kotor di:
arcan /path/to/arcan/tests/interactive/eventtest
Mungkin berguna untuk mencari tahu siapa yang harus disalahkan.
Instalasi biner 'arcan' platform egl-dri yang dihasilkan suid secara default. Hal ini tidak sepenuhnya diperlukan kecuali beberapa fitur spesifik diinginkan, misalnya kontrol lampu latar laptop di Linux karena memerlukan akses ke sysfs dan teman-teman.
Jika itu tidak relevan, Anda dapat menghapus properti suid pada biner, namun perhatikan bahwa pengguna Anda saat ini masih memerlukan akses ke file /dev/input/event dan /dev/dri/cardN dan /dev/dri/renderN yang relevan untuk berfungsi dengan baik -- jika tidak, perangkat input dan/atau grafis mungkin tidak terdeteksi atau dapat digunakan.
Biner dipecah menjadi bagian non-suid yang dijalankan oleh mesin utama, lihat posix/psep_open.c untuk mengaudit apa yang dijalankan dengan hak istimewa yang lebih tinggi serta kode untuk menghilangkan hak istimewa. Proses yang memiliki hak istimewa bertanggung jawab untuk menegosiasikan akses perangkat, menerapkan peralihan terminal virtual, dan sebagai pengawas untuk memulihkan proses utama pada live lock atau beberapa kegagalan GPU.
Cara lain untuk memperluas perilaku mesin terlepas dari aplikasi yang digunakan disebut skrip kait. Ini berada di dalam 'jalur skrip sistem' yang dicakup oleh argumen baris perintah -T, atau default dari shared/arcan/scripts.
Idenya adalah bahwa ini harus dapat menyediakan fitur 'toggle on' yang memerlukan kerja sama dari dalam mesin, untuk melakukan modifikasi kustom dengan cepat atau membantu menjembatani alat lain.
Contoh yang bagus adalah 'external_input':
arcan -H hooks/external_input.lua -H hooks/external_input.lua myappl
Ini akan membuka dua titik koneksi, 'extio_1', 'extio_2' yang akan memungkinkan satu klien untuk terhubung dan memberikan masukan yang akan tampak pada aplikasi 'myappl' yang berasal dari mesin.
Ini dibahas secara lebih rinci di halaman manual.
Arcan-net adalah biner yang memungkinkan Anda meneruskan satu atau banyak klien arcan melalui jaringan. Ini dibangun secara default, dan dapat dipicu baik sebagai alat jaringan terpisah maupun diluncurkan secara tidak langsung dari shmif dengan mengatur ARCAN_CONNPATH=a12://id@host:port, atau ketika mengeluarkan permintaan migrasi oleh window manager.
Lihat juga: src/a12/net/README.md dan src/a12/net/HACKING.md.
'arcan-wayland' atau 'waybridge', sebagaimana disebut di beberapa tempat adalah biner yang menambahkan dukungan untuk klien wayland dan X (melalui Xwayland). Ini dapat dijalankan sebagai layanan sistem global, misalnya
arcan-wayland -xwl
Atau berdasarkan kasus per kasus, seperti:
arcan-wayland -exec weston-terminal
Untuk klien wayland yang patuh, dan:
arcan-wayland -exec-x11 xterm
Untuk klien X. Basis 'per kasus' direkomendasikan karena lebih aman dan terjamin dibandingkan membiarkan banyak klien berbagi proses jembatan yang sama, dengan biaya yang dapat diabaikan. Kelemahannya adalah beberapa klien kompleks yang mengandalkan pembuatan beberapa koneksi wayland berbeda mungkin gagal berfungsi dengan baik. Firefox dikenal sebagai pelakunya.
Ada sejumlah opsi penyetelan dan pemecahan masalah karena kerumitan penggunaan wayland, lihat halaman manual dan tombol --help.
Semua konfigurasi runtime digabungkan ke dalam database, baik yang default 'arcan.sqlite' atau yang ditetapkan secara eksplisit (arcan -d mydb.sqlite).
Ini digunakan untuk opsi khusus platform, opsi khusus mesin, dan untuk klien tepercaya yang mengizinkan skrip yang berjalan untuk dijalankan. Ini juga digunakan sebagai penyimpanan nilai kunci konfigurasi untuk setiap aplikasi arcan yang sedang berjalan.
Sebagai contoh singkat, ini adalah cara memeriksa dan memodifikasi kunci yang sedang digunakan 'Durden':
arcan_db show_appl durden
arcan_db add_appl_kv durden shadow_on true
Konfigurasi lanjutan untuk beberapa platform video dapat diatur melalui nama aplikasi arcan yang dicadangkan. Misalnya, ini akan menetapkan nama perangkat kartu grafis utama untuk versi platform 'egl-dri':
arcan_db add_appl_kv arcan video_device=/dev/dri/card2
Untuk menambahkan 'target peluncuran', Anda dapat menggunakan sesuatu seperti:
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
Hal ini memungkinkan aplikasi untuk memulai program sebagai anak tepercaya (yang mewarisi primitif koneksinya daripada mencoba dan menemukannya menggunakan namespace yang bergantung pada OS). Contoh di atas akan memunculkan arcan-net dalam mode lokal di mana klien yang terhubung ke jalur 'netfwd' akan dialihkan ke server yang mendengarkan di 10.0.0.10:6666.
Ada banyak kontrol dan opsi untuk alat ini, jadi disarankan agar Anda melihat halaman manualnya untuk detail dan instruksi lebih lanjut.
Opsi build 'semuanya' juga harus menghasilkan biner yang disebut 'arcan_headless', setidaknya di BSD dan Linux. Biner ini dapat digunakan untuk menjalankan arcan tanpa mengganggu sistem grafis dan tampilan Anda yang lain. Diberikan akses ke 'render node' (/dev/dri/renderD128 dan seterusnya) dan itu juga akan berfungsi dengan baik di dalam container dan solusi sandbox ketat lainnya.
Agar berguna, ia dapat merekam/streaming ke layar virtual. Contoh pengaturan yang mengikuti contoh di atas adalah:
ARCAN_VIDEO_ENCODE=protocol=vnc arcan_headless console
Dengan asumsi sistem build menemukan ketergantungan libvncserver, ini akan membuat Anda memiliki server vnc yang terbuka (tidak aman, tidak terlindungi, ...) di localhost+5900. Lihat afsrv_encode untuk daftar argumen yang dapat ditambahkan ke lingkungan encode untuk mengontrol apa yang terjadi.
Proyek ini didanai melalui NGI0 Entrust, sebuah dana yang didirikan oleh NLnet dengan dukungan finansial dari program Internet Generasi Berikutnya Komisi Eropa. Pelajari lebih lanjut di halaman proyek NLnet.
Jika Anda tidak tertarik untuk mengembangkan sesuatu sendiri, kemungkinan besar Anda tidak akan banyak memanfaatkan bagian-bagian dari proyek ini saja. Berikut beberapa proyek yang mungkin ingin Anda pertimbangkan:
Durden adalah lingkungan desktop utama yang menggunakan proyek ini sebagai server tampilannya.
Safespaces adalah lingkungan desktop VR/3D eksperimental.
Pipeworld adalah lingkungan pemrograman aliran data (pikirkan excel).
Arcan-Devices mengumpulkan driver tambahan.
Untuk mendapatkan dukungan untuk lebih banyak jenis klien dan sebagainya, ada juga:
Dukungan Wayland (lihat bagian Wayland di atas, dan src/wayland/README.md).
QEmu adalah versi QEmu yang dipatch dan menambahkan opsi -ui arcan.
Xarcan adalah Xorg yang dipatch yang memungkinkan Anda menjalankan sesi X 'sebagai jendela'.
nvim-arcan adalah frontend neovim yang bertindak sebagai klien arcan asli.
Ada juga sejumlah alat pembantu yang dapat digunakan untuk menambahkan fitur tertentu, seperti dukungan untuk perangkat VR dan ikon baki. Ini dibuat secara terpisah dan dapat ditemukan di alat/subdirektori. Mereka memiliki sistem build terpisah dan file README.md yang sesuai.
Mereka bekerja dengan asumsi bahwa arcan dan perpustakaannya masing-masing telah dibangun dan dipasang. Mereka terkunci dan berversi ke mesin, jadi jika Anda mengupgradenya, pastikan untuk membangun kembali alatnya juga.
Alat utama yang menarik adalah:
Acfgfs adalah alat yang memungkinkan Anda memasang aplikasi arcan tertentu sebagai sistem file FUSE. Aplikasi harus secara eksplisit mendukungnya. Untuk lingkungan desktop Durden, Anda dapat menggunakan global/settings/system/control=somename lalu:
arcan_cfgfs --control=/path/to/durden/ipc/somename /mnt/desktop
Dan kontrol/konfigurasi desktop harus diekspos di titik pemasangan yang ditentukan.
Aclip adalah pengelola papan klip yang mirip dengan Xclip. Hal ini memungkinkan untuk menjembatani clipboard antara lingkungan desktop seperti Durden, dan server X.
Ini mensyaratkan bahwa penghubungan clipboard telah diizinkan (dinonaktifkan secara default karena alasan keamanan). Di Durden, ini diaktifkan melalui global/settings/system/clipboard di mana Anda dapat mengontrol berapa banyak akses clipboard yang didapat alat tersebut.
Aloadimage adalah pemuat gambar sandbox sederhana, mirip dengan xloadimage. Ini berguna baik untuk menguji perilaku klien saat mengembangkan aplikasi menggunakan arcan, namun juga sebagai penampil gambar tersendiri, dengan pemuatan gambar yang cukup cepat, kontrol daftar putar dasar, dan sebagainya.
Jembatan VR adalah driver input opsional yang menyediakan biner arcan_vr yang menambahkan dukungan untuk berbagai tampilan yang dipasang di kepala. Petunjuk lebih rinci mengenai pengaturan dan penggunaannya dapat ditemukan sebagai bagian dari proyek Safespaces yang disebutkan di bagian 'Proyek Terkait'.
Arcan-trayicon adalah alat yang memuat klien arcan lain secara berantai, bersama dengan dua gambar referensi (aktif dan tidak aktif). Ia mencoba mendaftarkan dirinya di baki ikon aplikasi arcan yang sedang berjalan, meskipun ia harus secara eksplisit mengaktifkan dukungannya. Di Durden, ini dilakukan melalui jalur:
global/settings/statusbar/buttons/right/add_external=tray
Kemudian Anda dapat menggunakan:
ARCAN_CONNPATH=tray arcan-trayicon active.svg inactive.svg afsrv_terminal
Atau klien arcan lainnya yang kemudian akan dimuat ketika tombol baki diklik, dimasukkan ke dalam popup dan kemudian dimatikan saat popup tersebut dihancurkan. Ini adalah cara cepat dan nyaman untuk menggabungkan berbagai layanan sistem dan skrip perintah eksternal.