Everything In A Linux Terminal

Here at Hackaday Central, we fancy that we know a little something about Linux. But if you’d tasked us to run any GUI program inside a Linux terminal, we’d have said that wasn’t possible. But, it turns out, you should have asked [mmulet] who put together term.everything.

You might be thinking that of course, you can launch a GUI program from a terminal. Sure. That’s not what this is. Instead, it hijacks the Wayland protocol and renders the graphics as text. Or, if your terminal supports it, as an image. Performance is probably not your goal if you want to do this. As the old saying goes, “It’s not that the dog can sing well; it’s that the dog can sing at all.”

If, like us, you are more interested in how it works, there’s a write up explaining the nuances of the Wayland protocol. The article points out that Wayland doesn’t actually care what you do with the graphical output. In particular, “… you could print out the graphics and give them to a league of crochet grandmas to individually tie together every single pixel into the afghan of legend!” We expect to see this tested at an upcoming hacker conference. Maybe even Supercon.

We generally don’t like Wayland very much. We use a lot of hacks like xdotool and autokey that Wayland doesn’t like. We also think people didn’t understand X11’s network abilities until it was too late. If you think of it as only a video card driver, then you get what you deserve. But we have to admit, we are humbled by term.everything.

49 thoughts on “Everything In A Linux Terminal

  1. I’ve used X11 since 1988 and I know almost all the tricks at this stage (good and bad). X11 > Wayland in many many many ways, but it does have it’s problems (none of which I am going to list!). I say that even though I own a full set of the X11 manuals (~13 books, at on average 1 kg per book).

    Wayland was basically designed as a single user GUI. Long ago I hung about 8-10 cheap diskless clients of a single server and had them network boot and run all their OS and applications over a 10 Mbit/sec half duplex link. Try doing something like that with Wayland today and it would be much much much slower even with 1 Gbit/sec full duplex links, there is just too much bloat. Low networking overhead was not even factored into the design at all.

    1. Try doing that today with X11 and you would have exactly the same problem, except now with the lease useful form of “network transparency” designed for the laziest concept of the 1980s. X11 is brain damage that Wayland does an excellent job of moving the Unix world beyond.

      Let cancerous tumors, like X11, drown in chemotherapy.

      1. To be fair, you didn’t objectively point anything wrong about X11. I don’t understand why x11/wayland debates tend to turn into passionate disputes, instead of technical discussions…

        1. Yeah, idk which one I have on my desktop, but I know it’s the correct one because it hasn’t been enough of a PITA for me to learn its name.

          I’m pretty sure it’s x based on seeing it in top, but again, I don’t care, and I don’t care what anyone else uses lol.

          Unless it’s libre x11.

      2. I certainly hope you learn to see beyond your own viewpoints. Everything has it’s use case and as “Truth” pointed out, Wayland is geared toward a single user architecture. From the very foundation of the X window system, it’s been a server based system, which isn’t merely an opinion but and objective fact.

    2. Yes. X11 was really something. As was the vision of that project. But I do wonder if the world has changed priorities, constraints, goals though. I personally still value the goals of X11, but in an age where a laptop is now more powerful than a super computer of the time, maybe the way problems need to be solved has changed as well. OTOH… or not… but perhaps HTTP/HTML has filled a niche similar to X11, making X11 less vital as a tool. — I haven’t thought about it deeply enough to have a strong opinion. I’m just asking open ended questions.

      1. They are O’Reilly Manuals, I did not actually buy them. A department in one of the companies I worked at was dumping them because of a global policy change where no software was allowed to be deployed globaly (no matter how good) if it was developed by an individual programmer at any of the company offices (Management fear of the individual employee dying or leaving and having no official means of support/updates). Technically I got them by dumpster diving, in reality they never landed in the dumpster.

    3. i like X11, and i have significant reservations about Wayland. but i’m not sure the basis for saying Wayland would be too slow for thin clients over ethernet?

      i have used X11 DISPLAY=remote:0.0 a lot, and it usually works well for me. but it’s always a little bit laggy. for some applications, it doesn’t matter, or it’s worth the overhead. but i’ve actually almost completely abandoned X11 remote display. i run my browser on my basement PC and access it over VNC (using the x11vnc server), which is surprisingly fast for most purposes even when i’m using public wifi when i’m not home. i sometimes like graphical diff, so i used to use mgdiff remotely but i got frustrated with that and now i have a little script that scp’s the files to my laptop and runs mgdiff locally on the laptop. and i have a separate x11vnc running all the time on my PC that i use for remotely-running demanding apps like view3dscene (STL viewer) and stellarium.

      my impression is that Wayland doesn’t have a single standardized network transparency mechanism? so i don’t know how i would criticize its performance. if i ever switch to Wayland, wouldn’t i still use VNC? i don’t think the network performance would be any different at all. unless something about the wayland architecture makes it impossible to implement a decent VNC server?

      1. X11 was originally used primarily in palletized modes (with small palettes). In this configuration, i’ve successfully run it with KISS-encoded ethernet frames over a barbed-wire fence for a couple of miles. Due to the hardware, it was an odd baud rate, but was below 9600 baud, and was … usable. We did have to modify the hardware xterms to boot from a jury-rigged local boot server, though. Given that we were abusing whatever hardware was available on hand, the solution was far from well-engineered, but it worked long enough.

        As an aside, I worked with VNC for a time, a decade later. It’s useful for a different set of things (namely, it’s a LOT simpler to turn a microcontroller into a clock, gauge, or virtual instrument face that you can view remotely, because it’s just a framebuffer, with all the positives and negatives that implies). Sadly, it does require a LOT more bandwidth for usable results. We prototyped a nav compass display to work over multidrop 115200 baud serial. It was a LOT more laggy than the barbwire fence hack, and (fatally for our needs) left the serial bus totally occupied, ensuring that the other multidrop equipment on that bus failed to function as designed… Still, vga-resolution framebuffers running in palletizable color depths could handle high framerate small-area updates (changing a label, moving a pointer, slightly growing or shrinking a bargraph) at well above 30 updates per second. 10 megabit lan (hub, not switch) supported several full-vga displays at 256 colors doing basically full screen updates at 15-30 fps (nearly every pixel dirty every update) without totally saturating the LAN.

        This was a short-term pragmatic hack done a long time ago, so I remember few of the details, but it solved a time-critical catastrophic need with hardware-on-hand, such that the project was successfully concluded before the next hardware shipment would have arrived.

        There are lots of warts on the x11 protocol, many of which make our lives more difficult today, but ever since that point, I’ve had a soft spot for it.

        But, most of the things that x11 lets you do easily (display-side font rendering or “multiple displays as windows on to one remote display”, as opposed to framebuffer-side) would have required much heavier lifting with VNC than with X11. (Many of those x11 protocol warts are there for a reason: some of that crap was once VERY useful, and still is, in some cases).

        And, x11 is very suitable for an evolutionary improvement; there was no need for a revolutionary redesign just to solve the pain points that originally triggered the interest in a revolutionary redesign… But some people don’t want to be the nameless guy who stood on the shoulders of giants and made a couple of quiet improvements that benefit people for 50 years. They’d much rather reinvent the wheel, with their name attached…

        … Eh, whatever floats their boat. I have no problem with that. I don’t need to control other people’s choices. But, you’ll never convince me to use their new wheel, simply for pragmatic reasons: it scratches no itch I have. And so far, they’ve been insufficiently successful at purging all traces of alternate solutions, so they can’t compel me to have the itch they want to scratch.

    4. I ran CADD/CAM for a steel R&D shop from a HP server using xclient workstations. So everything over relatively slow networking with all of the processing on the server and all user I/O and display at the clients. X natively does that, Wayland does not. I like both, but Wayland lacks the networking pieces, and that is a GOOD thing IFF you do not need them. We have other ways to do that kind of work today.

      1. “Wayland lacks the networking pieces, and that is a GOOD thing IFF you do not need them.” Every other operating system has found it necessary to add remote desktop services to their platforms. So just who does not need them?

  2. “you could print out the graphics and give them to a league of crochet grandmas to individually tie together every single pixel into the afghan of legend!”

    I feel like they’re hazy on how crochet works, when it’s something hackers should respect IMO.

  3. “you could print out the graphics and give them to a league of crochet grandmas to individually tie together every single pixel into the afghan of legend!”

    Now I am thinking about using a knitting machine as a printer.. something about starting a new thread!

    1. I’m going to draw attention to that pun that might have been missed. It was perhaps half baked, but had promise.

      This was just a brief yarn about the loose ends in this thread.

  4. Another way to develop a GUI application that can run in a terminal window is the curses library for Python. You can accept keyboard and mouse events and act on them however you like. Which means that at least in principle, you can make a multi-windowed user interface within a terminal window. I used this to produce a user interface that would generate scoreboard and time clock text to use on a live stream. The challenge was that it had to work on institutional MacBooks that were locked down so you couldn’t install an app on them. This sounds like an impossible constraint, BUT you could still run Python.

  5. Most of these “in the terminal” hacks miss the whole point. They require you to be in a GUI, to do something you can already do in a GUI, but display it poorly in a terminal window.

    Why? That isn’t remotely useful.

    If I need a browser in a console, I ACTUALLY need a browser in a console. Like, I’m not running a window manager or GUI at all.

    Modern “web” is basically unusable at this point with something like Lynx.
    Trying to look something up on a forum, get a driver, or download a package from a website is becoming impossible to do from a console connection.

    I have had to resort to using my phone, to find a download URL, then type it in manually when I don’t have GUI access on that box…

    This is a neat art project, but that is what it is, art. It’s a model car carved from butter just to prove you can. No actual use.

    1. Suggestion: If you have the skills, start your own project that does what Lynx does not. You would not be the first to consider it, but you might be (one of?) the first to actually do it. If you pull the trigger, please comment here to let us know.

        1. A good thinking guide for this kind of thing is “if I could do it over only a serial port console, it’s got promise.”

          And some of that kind of thing is even useful if doing it to a hard terminal (actual clattering teletype)

          It’s not so much the retro nostalgia or the hardware. It’s that this only requires very simple, very limited apis, and they in turn, can be implemented without presuming much in the way of hardware, memory, io, or anything else.

          yet the results serve as a foundation for extremely overall-capable solutions.

          It’s not so much “would I use this as my daily driver?” It’s more about “what can I do when I can’t shove an entire GPU in?” “what can I do if it has to be mounted in an enclosed uncooled steel shop building in Texas, where I need it to run reliably all year long, and I don’t want to make a 3 hour drive to reboot it?” “what can I do if I can only power it from a non-invasive power tap (coil taped to the building’s power feeder)” etc.

          A surprising amount of really relevant stuff isn’t your laptop. Not everyone has the same problems, and it’s okay (and perfectly reasonable) if other solutions exist. For everyone who disagrees, I have a proposal. You can prescribe your pet solution, and I’ll caucus. But in exchange, the only editor you can use, for anything, EVER, is TECO :)

    2. “This is a neat art project, but that is what it is, art. It’s a model car carved from butter just to prove you can. No actual use.”

      Much of HaD is a 10:1 scale model 555 carved from Bavarian beaver cheese butter just to prove you can. And goshdarn it, that’s why I read HaD.

      1. I think you missed my point.

        I ACTUALLY want the thing that the title describes, not just an art project with no use.

        I WANT a functional and useful in 2025 console based browser.

        I can appreciate the effort the maker put into this ‘art’, I just wish they had put that effort toward a useful version instead of an objectively useless one.

    1. The Linux console doesn’t support anything this fancy. What you can do though is use the framebuffer device to draw graphics on top of the text, or if the graphics hardware supports it, use a drm overlay plane. w3m supports the framebuffer for drawing just images, for example

  6. Hmmm…. the X vs Wayland debate again.

    Ok. Let me ask this.

    Why is Linux so inferior to Windows when it comes to remote GUI access???

    Now that I pissed you all off I’ll repeat. Why is Linux so inferior to Windows when it comes to remote GUI access???

    I love the SSH terminal. I’m going to try term.everything but the article makes it sound more like neat toy than practical tool. I guess I will see.

    I loved remote X back in 1997 when I first saw it. Back then the only remote access I was aware of in Windows was PC-Anywhere, a 3rd party add on that was out of my student-at-the-time price range. Between that and telnet (1997) Linux seemed awesome! It was actually made to use in a networked world while Windows was a standalone PC with networking awkwardly bolted on.

    Then came Windows XP with it’s “Remote Desktop”. You turn it on once. Then it just works. You don’t have to log on first with a text terminal and start it like you do with 99% of VNC installations.

    And you know what else it does… IT DOES F*****G SOUND! Sure… if you are accessing it from another Linux box you can with half a dozen complex commands that have to be redone EVERY TIME you connect you might get lucky and manag to redirect your audio to the client machine. And if the client is Windows? Well maybe with WLS. If it’s anything else????

    Ok, well, there is an XRDP server that mimics windows. But the project primarily exists to implement the client, not the server. Try to find documentation on configuring the server… yah right! So you do manage to get it working… Well, in my experience some desktop managers work. Some do not. Trial and error to find which ones work. Great! Connect to it via an Android app… the ‘<‘ mysteriously does not funciton! Both ‘<‘ and ‘>’ result in ‘>’! That’s great fun when coding!

    Then there is RealVNC… ok, a pay service. Welcome back to Win9x! Fine, I break down and decide to try it.. nope, it’s distro-specific. They will let you try other distros but it does not work!

    And a bunch of internet posts swear by NoMachine. Have any of them actually tried NoMachine?? I think not. Talk about heavy!

    And that’s just remote desktop solutions. How about an actual multi-user terminal setup? I’d love a remote terminal (WITH SOUND and USB port forwarding) in my workshop. How does one get sound with LTSP… oh yah, back to typing half a dozen long commands manually at every login.

    So…. seriously? This was the platform that was supposed to be proudly network and multi-user friendly. WTH happened?!?!

    1. it seems like your complaint is that you have to start the vnc server before it serves vnc connections?

      i use a combination of shell scripts and keyboard shortcuts and i find vnc with linux to be very convenient. shrug

    2. I really don’t know what you are talking about. I’ve tried RDP in the past and it was so annoying.

      I’m at work and I can open the browser that’s on my computer at home with one command. It does audio. I don’t do anything special. I can just open the browser. I can open that browser and connect to my home assistant machine through the browser. I can even open jellyfin and play a video.

      Linux is incredibly user friendly. So much so that if you put me behind a Windows machine that I’m just getting angrier and angrier the more I work with it. Everything keeps changing around and things randomly stop working. Good luck getting a printer to operate for a longer period of time. And Windows updates, the horror. It’s 2025 and Windows updates still don’t work right. And why do I have to do all sorts of weird commands before I can run a script? I can’t even.

      1. User friendly? It doesn’t even have a standard file system browser. Every application that uses a different GUI toolkit uses different file open and save dialogs.

        Some people say, “the great thing about Linux is that there is more than one way to do anything.”
        I say, “the terrible thing about Linux is that you have to know more than one way to do everything!”

  7. this sort of ascii art interface is so common these days. back in 1997, i discovered aalib, and i made a thin layer that acted like svgalib but rendered through aalib. i shared my hack and bobz made a convenient installer so people could run ascii art quake. so i feel like i got in on the ground floor of this.

    but i was not ready when one day i was reading an html attachment on an email, using mutt. i hit ‘enter’ on the attachment, expecting it to launch lynx to view it. but i accidentally picked the wrong attachment, and instead it used some ascii art image viewer to render the sender’s corporate logo! i stared at it for 10 seconds before i could even believe what had happened.

    and i’m a big fan of SDL for my own development…i still use SDL 1.2 for a lot of projects. and the SDL team keeps updating it even though SDL 2 has been mature for years. so one day i run my bespoke PDF viewer on a terminal where DISPLAY isn’t set…and it renders my PDF to (unintelligible) ascii art! it’s everywhere now but it still surprises me every time it happens

  8. So what, I still can’t load a simple Mint or Ubuntu distro, even in dual boot, that works. Installation instructions are garbage, especially YouTube videos with non-native English speakers talking fast, skipping around with a mouse and offering less that complete instructions. Get with it, I want to switch to Linux, but can’t trust it yet. Be thorough, but clear!

    1. Try Zorin OS.

      We have converted all the remaining family & friends machines this year and have not gotten a single HELP! call since – unlike all the Windows help calls before.

    2. It’s really an uphill battle. It’s usually the BIOS that makes Linux installations fail, and it seems like the PC world (using security as the excuse) insists on making it difficult to boot anything but the manufacturer’s chosen and signed OS.

      Nowadays, it’s fairly simple to install Ubuntu or Mint on a thumb drive or even an SD card, BUT you have to get into your BIOS and disable Secure Boot on most BIOSs.

  9. I’d like to point out that a Linux machine might be even more powerfull in text mode (no graphics) if the application is well designed for the specific task. For example: an old PC which lacks good graphic card, has low memory, will perform network and computation tasks better when the X11 is not started. That will reduce the power consumption and other utilization of unnecessary resources, improving even the temperature management or noise. My POV…

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.