10 ms·
Darktile – GPU rendered terminal emulator designed for tiling window managers
- xt00 5y agohttps://twitter.com/cmuratori/status/1411437902802808832?lang=en https://twitter.com/cmuratori/status/1411437902802808832?lan... Maybe we need a Linux version of the terminal that Casey made
- beprogrammed 5y agoI can't believe I've never heard about a sixel up to now!
- rbanffy 5y agoConsider yourself lucky. It’s a terrible standard, really. It wasn’t very consistent even with DEC terminals alone. Plus it’s a LOT of bytes per image.
- rleigh 5y agoFrom today's persepective, maybe. However, it is entirely consistent with the terminal control sequences of that era which can't use CL for transmitting data. It's limited to control, or else you wouldn't be able to cancel operations at arbitrary points. Sixel data is using GL, CR and GR [the high six bits], and from the point of view of fitting in with the design constraints, it's actually quite elegant.
- rbanffy 5y agoIt’s more or less the same protocol used to print graphics on DEC printers, but now true colour is grafted on top of it. I bet soon we’ll be able to show HDR10 movies. ;-)
- MayeulC 5y agoThen I also encourage you to read up on https://sw.kovidgoyal.net/kitty/graphics-protocol/ https://sw.kovidgoyal.net/kitty/graphics-protocol/
- opan 5y agoI see OTF and TTF mentioned specifically. Does this mean bitmap fonts are not supported?
- sime2009 5y agoOn a related topic: Are there any good bitmaps fonts out there that have decent Unicode coverage?
- ranguna 5y agoI've been wondering, is there any reason to use GPU rendering for a terminal emulator ?
- vidarh 5y agoFor speed, it's marginal at best. Very few non-GPU terminals are anywhere near peak performance anyway, because once you get past a certain point the only noticeable difference tends to be what happens when you accidentally dump a huge chunk of text to the terminal. But it does allow fun stuff like shaders. E.g. I added some outlines in the shaders for my version of Kitty (not public anywhere - my hacky shaders are a mess) to let me use more transparent windows without making things unreadable.
- MayeulC 5y agoIt should help on low-power devices, and with power consumption. In theory at least. Moreover, it's a must if you want image support (I saw this terminal emulator supported sixels, opened an issue about the kitty protocol).
- vidarh 5y agoI don't see why it'd make a positive impact on power consumption or low power devices. Most of the time terminals consume very little processing power. You get brief bursts while scrolling lots of text, but that tends to be a tiny proportion of usage. Image support and sixel support exists on any number of terminals with no GPU support. A majority of the ones I've used w/sixel support in fact are totally oblivious to GPUs. Keep in mind sixel originated on terminals a few orders of magnitude slower than even modern mobile devices. For most uses you'll not even benefit from more than a basic 1980's era blitter in terms of acceleration, but given the data volumes even that will not make much difference with a well written terminal app (which will minimize copying to start with)
- ranguna 5y agoSo it benefits only from the rare case where my whole terminal is full of text? Like "cat"ing a binary file? Still not worth it it me, I try to keep my gpu usage as low as possible to save on battery life, and this just sounds overkill.
- pama 5y agoI’m curious: how do people verify the security of such low-level pieces of infrastructure?
- Seirdy 5y agoImperfect, incomplete, yet useful measures I take including building with some of Clang's sanitizers and running the program through a bubblewrap wrapper for filesystem sandboxing paired with a seccomp filter that allows a limited list of safer syscalls (including some W^X enforcement).
- leetrout 5y agoIs there a blog or webpage that summarizes all of this in one place?
- vidarh 5y agoWith the caveat this may be useful to guard against exploitation of bugs, not against a malicious terminal (which can e.g. quietly wait for a user to ssh or su and intercept the password, and then execute code on the background). Not to dissuade people from hardening them as I'm all for that. (I'm sure you're aware since you pointed out these measures are incomplete. Just spelling it out.)
- Seirdy 5y agobubblewrap and/or selinux can prevent the terminal from making network connections. but yeah, this is better for bugs.
- vidarh 5y agoYou can stop it doing all kinds, but if you do, then it's not usable as a general purpose terminal. That's the problem. A terminal needs to be able to spawn an unconstrained shell or other process linked to a pty that it controls the IO with. That ability can equally be used for malicious purposes. E.g. if the user can use the terminal to ssh anywhere, then the terminal itself can too. There certainly can be situations were a constrained terminal could be useful too, though
- gnull 5y agoIs there any reason to prefer Darktile over Alacritty?
- megous 5y agoNope. Both will probably fail when gl rendering is not available for whatever reason. Just tried to run alacritty: https://megous.com/dl/tmp/4af49886c7c9854d.png https://megous.com/dl/tmp/4af49886c7c9854d.png Personally, I'd want something that keeps working even if I don't reboot immediately after a system update, especially for something as key as a terminal emulator.
- zamadatix 5y agoThat'd be the fault of Nvidia proprietary drivers (which are regularly known to cause lot of annoying problems+issues like that across the board) as systems without a hardware GPU can still normally create OpenGL contexts. The day that driver mess is cleaned up a shit ton of problems will disappear overnight.
- megous 5y agoYes, I wish I didn't buy nvidia. Their stupid requirement to have exact same version for client/driver is so annoying. Not an option to buy anything else for a sane price at the moment sadly, due to crypto craze. ;)
- deleted 5y ago[deleted]
- craftkiller 5y agoYou can force alacritty to use a software renderer by setting the env variable LIBGL_ALWAYS_SOFTWARE=1 https://wiki.archlinux.org/title/Alacritty#Requires_hardware_supporting_GLSL_3.30 https://wiki.archlinux.org/title/Alacritty#Requires_hardware...
- megous 5y ago
- logical_person 5y agoDoes anyone know how it performs on termbench? https://github.com/cmuratori/termbench https://github.com/cmuratori/termbench
- lf-non 5y agoThere seems to be some focus on tiling window managers, but it is not obvious to me (as a user of sway) what benefit this offers over any other terminal emulator. Perhaps the focus on tiling wms is a justification for not having tabbing/splitting support built in. Also, given xorg-dev dependency I assume that if one is on wayland, they are better off using alacritty.
- DanielVZ 5y agoIt's about having everything available either in front of you (tiled in the current workspace) or in a single keystroke (to move to the desired workspace). I like it a lot, especially in comparison to what I see my coworkers doing: move their windows around in order to uncover other windows or alt tab constantly until you either find your desired window or you pass it accidentally.
- chrismorgan 5y agoYou’re talking about the benefits of tiling window managers compared to floating window managers. The question was instead “You say Darktile is ‘designed for tiling window managers’; what does that actually mean? How is it different from other terminal emulators?”
- csande17 5y agoWhen I hear that a terminal is "designed for tiling window managers", I expect that it: - Doesn't do any kind of tabs, or split view, or switching between different "buffers", under the assumption that you use your window manager for that stuff - Always fills the entire window with the contents of the terminal, regardless of what size the window is (e.g. non-integer multiple of size of a character cell), and doesn't draw its own window decorations - Launches very quickly - Generally has a flat, minimalist aesthetic. Uses (ideally configurable) keyboard shortcuts instead of a toolbar, menu bar, or right-click menu, and is configurable by editing a file. Some terminals are like this already, and I don't know how well Darktile lives up to it. But it's a very different design direction from, say, GNOME Terminal.
- 5y ago
- bashtoni 5y agoNice to see something like this built in Go, my personal favourite language to code in. Does this support Wayland? It's not clear, I can see someone has raised the question in an issue. I've been using kitty for a while which supports GPU rendering and has Wayland support too.
- pkulak 5y agoI'd love to know about Wayland support as well. I'm pretty stuck on Alacritty right now, but I'll always check out something else compatible that has sixels and ligature support.
- mmozeiko 5y agoTry foot: https://codeberg.org/dnkl/foot https://codeberg.org/dnkl/foot I believe it supports sixels and ligatures (but I haven't tried those, I don't care much about them). It works on Wayland - I'm running it under Sway and I'm very happy with it. It also supports server/daemon mode where server does all the rendering and shares glyph cache between windows - lower memory usage & faster startup.
- saladuh 5y agoIt does indeed support Sixels, and is super fast too. Also, the official build only runs on Wayland afaik (my friend tried to build it from source in xorg but during compilation it would check for a wayland environment and then fail). Pretty sure there was an xorg port floating around somewhere though.
- xcambar 5y agoAlacritty, Kitty, Darktile. How do they compare? Are there significant differences or are they just marginally different one from the other?
- gladoskar 5y agoThere's also wezterm, which is also GPU accelerated, supports ligatures and is written in rust, so it's probably faster than kitty/darktile as well
- saladuh 5y agoOn Linux, I found it to be super slow. TUI apps like neovim were sluggish in certain contexts. I couldn't figure out how to increase text throughput either. The developer seems more focussed on maintaining MacOS performance (I'm not complaining, just warning any linux users).
- minhmeo753 5y agoSo wezterm written in Rust will faster than Kitty written in C?
- galkk 5y agoAlacritty still doesn't have ligatures support, per their doc Kitty has fully featured window management built in, also kittens Darktile seems to be simpler.
- flakiness 5y agoSo the GL backend is actually using a tile-based 2D game engine (ebiten [1]) ? Probably good choice since, after all, terminal graphics is simple enough for the engine to be capable to render. It's a bit disappointing to me who was expecting some kind of (likely to be excess) rocket science, but I know that's not a fair complaint :-) [1] https://github.com/hajimehoshi/ebiten https://github.com/hajimehoshi/ebiten
- rbanffy 5y agoAll I want from a terminal is built in support for double width and double height. Sixel and Tektronix would be nice too. Extra points if it can do line drawing, PETSCII and Teletext mosaics without font support. Oh… and overlines, so tmux can have a proper status bar.
- GekkePrutser 5y agoXterm does all this :) By the way what apps do you have that still use double width and height? I have a vt520 here and I'd love to try that but I don't think any currently popular terminal UI Apps support that Most don't even read termcap or termdb anymore and just pump out xterm no matter what display is set to :(
- rbanffy 5y agoI use it on my own CLI apps. It’s nice to see my colleagues gasp when I’m screencasting and an error message pops up in red 2x2 type. Most people don’t know Apple’s Terminal.App does a near-perfect VT emulation. Double width and height are tricky - they are line-based and that makes using them tricky in full-screen apps. Tmux and other screen managers filter them out.