‘Tis the season to be jolly and just about time for the definitely last release of the year for both Arcan and its related subproject, the Durden desktop environment. Following the pattern from the last release post, lets go through some highlights and related videos, but first – a family photo:
From left to right, we have a little Raspberry running the ‘prio’ WM using the broadcom binary blob drivers (so lacks some of the features needed to run durden), with arcan and terminals eating up all of 20MB of ram. The left Macbook running OSX with Arcan/Durden in fullscreen, retina resolution, of course. The Macbook on the right is running the same system on OpenBSD 6.2. The three-headed monkey behind them is a voidlinux setup with two instances, one on an intel GPU, the other on an AMD GPU. If only the android devices on the wall could be brought in on the fun as well…
Arcan
For Arcan itself, there has been rather few ‘visible’ changes, but many more things underneath.
The Xorg arcan backend ‘Xarcan’ has been ported to OpenBSD and is now up and running there. While on the subject, the OpenBSD port has also received some improvements on the input front, with support for the wsmouse interface and the engine itself now uses the same privilege separation setup as Xenocara.
The VRbridge tool has been updated with basic OpenHMD support. In the video, you can see the vrtest script where a cube is mapped to the reported HMD orientation. A number of engine improvements have also been made for managing VR related rendering. As a PoC – here’s windowmaker, xterm and xeyes connected to an xarcan instance that renders to arcan_lwa and then via arcan with this script (gist).
The wayland protocol service has seen quite a few improvements to crash recovery, wl-shell and xdg-shell protocol compliance. It has also received a single-exec mode for compartmentation of wayland clients, and has some basic least-privileges via seccomp- filters. The full details of the crash recovery steps are kept in a separate article, Crash Resilient Wayland compositing.
The Terminal and TUI libraries have been extended to get a window ‘cloning’ feature and a related pasteboard mode. The clone feature acts as a passive ‘screenshot’ of the contents of the terminal at activation time, and the pasteboard mode reroutes ‘copy’ operations to be added to a copy window rather than being added to the clipboard directly.
Arcan and the special ‘lwa’ build have gotten their argument handling and initial setup extended to allow arbitrarily long chains of ‘pipes and filters’ like media processing, the full details are kept in the separate article, AWK for multimedia.
Yet another tool has joined the ranks, arcan-netproxy, though not really usable for anything but experimentation at the moment, but it will become the main development focus target for the 0.6.x versions. Its role and purpose is to provide ‘per- window’ like networking features, and later on, full network transparency.
Durden
To weigh up for the lack of visual flair to Arcan itself, plenty of highly visible changes has been made to the durden desktop environment.
Flair
Flair is a new tool script that provides a Compiz- like UI effects framework for adding visual flair to normal operations. Though only a few effects have been added so far, more are sure to come now that the tough parts have been finished. In the video you see not only faux-physics ‘clothy windows’ (spring grid, verlet integration, obviously superior to wobbly windows) but also an xsnow- like effect layer and a burn-on-window-destroy effect. Now, if we only could get an adaptation of Realtime 2D Radiosity and end the era of drop shadows…
Overview
Overview is a tool that acts as an ‘expose’ like workspace switcher to more quickly see what is happening on the other workspaces. Though it lacks something in the looks department, the bigger work effort was, like with the flair tool, getting the infrastructure in place for hooking and handling. Later iterations will bring back more interesting workspace switching looks.
Advanced Float
Previously, the floating window management mode was quite crude, and efforts have started to spice things up a bit. It is still not entirely competitive with advanced floating window managers yet, but the missing features should appear around the next version. This round of enhancements adds support for:
- spawn control (e.g. draw to spawn shown in the video)
- minimise targets (e.g. minimise to statusbar or desktop-icon)
- customised “on-drag-enter/over” screen regions
- titlebar buttons can now be set based on workspace mode
- auto-rearranger (simple binpack for now)
- grid- like position/sizing controls (like the compiz plugin)
Here you see the spawn control used, to position/size a number of windows, then auto-rearranging them.
Terminal Group- Mode
Taking a trick from the Rio/Plan9 article, it is now possible to spawn a terminal ‘group’ which act as its own distinct connection point. Graphical clients that connect via this point forcibly shares group (window slot and settings) with the terminal it spawned from, making hybrid text/graphics clients easier to work with in tiling modes. In the video, you see how the terminal switches to an image when aloadimage is run, switching back/forth between the parent slot and children, and back again when the window is ‘destroyed’.
Menu and Browser Improvements
The browser filtering now respects wildcards, but also lua patterns and specialised sort-order controls. In addition, most menu paths now show a description of what each entry do, and navigation also works with the mouse.
What’s Next?
The tedious 0.5.x- lower system graphics interfacing is sure to continue for a while longer, with the next round of changes focusing further on multi-vendor-multi-GPU drawing, swapping and load balancing now that most of the necessary configuration system rework has been dealt with.
Another worthwhile work target will be improving synchronisation strategies now that drivers start to support FreeSync, particularly letting the WM decide if and when some client should be prioritised (think games and latency) to complement the existing ‘direct-to-screen’ mode.
It is also about time to push the work on TUI further: finishing the Lua API bindings and related advanced features e.g. subwindows, content embedding, standalone version (kmscon: the return).
For Durden, the feature race will soon (but not yet) start to slow down and instead focus on raising overall quality and usability (polish, actual default profiles, internationalisation support). Before then, however, it is likely that some more advanced input devices (eye trackers, customised mouse- and touchscreen gestures, onscreen keyboard) will get a little bit of love, icon and drag/drop for float mode, and the model-viewer tool being extended to support redirecting to a VR HMD, allowing for 360-, 180- video playback.
Senseye has been neglected for a long time, with only minor experiments on how to refactor the UI into something better. After some pondering, the individual sensors will be changed into “normal” arcan applications, and all the analysis tools will become plugins to Durden rather than acting as a completely separate UI.
Detailed Changelog
Arcan
Engine:
- VR support now covers the full path from bridge communicating metadata and limb discovery/loss/map/updates
- (71939f) -0,-1 pipes and filters input setup added, covered in AWK for Multimedia
- format-string render functions extended with vid-subimage blit
Lua:
- New function: define_linktarget – used to create an offscreen render pipeline that is tied to the pipeline of another rendertarget
- New function: subsystem_reset – used to rebuild subsystems (video only for now) to allow live driver upgrades, active GPU switching and so on – without losing state
- Updated function: camtag_model, change to allow forcing destination rendertarget
- Updated function: image_tesselation, expose index access
- Updated function: render_text, added evid,w,h and Evid,w,h,x1,y1,x2,y2
- Updated function: random_surface, added additional noise function controls
Terminal/Tui
- Support for ligatures improved
- Highlighting/Inverse/Full-Block cursor changed for better visibility
- Added controls to copy the current window into a new (input label: COPY_WINDOW)
- Copy Windows can be set to be the primary clipboard receiver (input label: SELECT_TOGGLE)
Platform
- OpenBSD: added mouse support
- Egl-Dri: swap-GPU slot added to db- based configuration
- SDL2: improved keyboard and mouse support
Tools
- VRbridge – initial support for OpenHMD
- Xarcan – Ported to OpenBSD
- Waybridge:
- fixes to subsurface allocations
- reworked wl-shell to use (most) of the xdg-shell event mapping
- -egl-shm argument added (perform shm->dma_buf conversion in bridge to offload server)
- single exec mode (arcan-wayland -exec /my/bin) for stronger separation between clients
- add support for rebuilding client (crash recovery and migration)
Durden
Big Items:
- Display region sharing now supports force-pushing into clients that can handle input segments.
- target/video/advance/migrate,fallback – send a migrate request to a client, which may prompt a client to jump to a different connection point or display server instance.
- shader subsystem – added a multi-pass effect format along with some initial effects (gaussian blur, CRT-lottes).
- tools/advfloat – extended float layout mode capabilities:
- spawn control (draw2spawn)
- hide-to-statusbar
- cursor-action-region (see tools/advfloat/cregion.lua for definition)
- automatic relayouter
- tools/overview – added a HUD- like workspace switcher
- tools/flair – added a visual effects layers and some initial effects
- terminal-group spawn-mode – allows a connection primitive to be generated per terminal and clients which connect via this group share the same logical window tree slot
- Tui/terminal clients are now allowed to spawn additional tui subsegments.
- File browser now expose wild-card matching (asterisk), Lua patterns (%%) and sort-order modification (typing % lists options).
- retain some window and workspace properties across script errors, crashes and resets
- menu navigation can now shows a helper description of the currently selected item
- mode-sensitive titlebar icons – window titlebar icons can now be set to be activated only in certain modes
Minor:
- Destroying a window in fullscreen mode now returns the workspace to the last known mode instead of forcing to tile
- Double-tap input-lock automatically unlocks if the locked window is closed
- Double-tap input-lock without a selected windows is now a no-op
- Float mode border drag sizing, cursorhint and positioning fixes
- Float mode drag now respects statusbar- imposed boundaries
- Float mode canvas-drag/resize option for self-decorated clients
- Improved (less broken) handling for wayland popups and subsurfaces
- Step-resize keybinding now aligns to window- cell size (terminals)
- statusbar can now be sized/padded to percentage of display output (config/statusbar/borderpad)
- statusbar specific configuration moved to (config/statusbar) from (config/visual/bars/…)
- statusbar number prefix on known workspaces and statusbar mode button can now be toggled on/off
That’s all for now – Happy New Year and See you in 2018.
What keyboard is that?
Razer BlackWidow Tournament Edition Chroma I think, not sure if it’s a keeper yet – grabbed it for adding it to the list of supported led controllers
This is a very high level desktop environment. It seems so high that most people seem to be afraid to comment on its technical merits. Just when it seemed like the desktop future came to a screeching halt, dreams of a TUI desktop environment seemed gone into the abyss.
Anything remotely approaching the technical highlights of the Oberon/BlueBottle Text User Interface seemed like it was dreams away. Here we are, today. Not only have someone brought back a sorely missed desktop TUI approach, yet somehow someone, also managed to step out the matrix by combining it with 3D. This is no gimmicky approach to 3D, like the Metisse desktop…. This a very sensible approach with VIM-like key bindings (wow!!). My only hope was someday, someone would combine JWM/Enlightment/Monster desktop environments. JWM in terms of speed, efficiency, stability, and the way it behaves when it opens and close windows, just very responsive and it opens up with an interesting flash. Enlightment (or the Enlightment libraries) for its sheer beauty and composting effects. Monster for its intuitive tiling window manager, and its tight and compact code. I guess Awesome window manager isn’t too bad, however, it could be more stable. Arcan/Durden on the other hand is next level, next generation technology, today. It comes equipped with all the sensible high-tech features and security approaches to match. It may be the only desktop environment, in this world, to combine the 3 most crucial aspects to the desktop environment TUI/Tiling/3D. TT3DS in other words Text User Interface /Tiling Window Manager/ 3D Composting. Where did the “S” come from? “S” as in security by default not an afterthought. So, yes, actually, there are at least 4 main crucial aspects to a sensible desktop environment approach and we have it, right here, today! This is, definitely, a step in the right direction. Thank You, Thank You, Thank You!