Without a GUI -- How to Live Entirely in a Terminal
Sure, it may be hard, but it is possible to give up graphical interfaces entirely -- even nowadays.
The following articled was originally published in the July, 2019 issue of Linux Journal magazine. Since Linux Journal has been formally closed down, I am republishing this here — on The Lunduke Journal — as it is just as applicable to 2021 as 2019… and would be a shame to lose.
About three years back, I attempted to live entirely on the command line for 30 days—no graphical interface, no X Server, just a big-old terminal and me, for a month.
I lasted all of ten days.
Why did I attempt this? What on Earth would compel a man to give up all the trappings and features of modern graphical desktops and, instead, artificially restrict himself to using nothing but text-based, command-line software, as if he were stuck in the early 1980s?
Who knows. Clearly, I make questionable decisions.
But you know, if I'm being honest, the experience was not entirely unpleasant. Sure, I missed certain niceties from the graphical side of things, but there were some distinct benefits to living in a shell. My computers, even the low-powered ones, felt faster (command-line software tends to be a whole lot lighter and leaner than those with a graphical user interface). Plus, I was able to focus and get more work done without all the distractions of a graphical desktop, which wasn't bad.
What follows are the applications I found myself relying upon the most during those fateful ten days, separated into categories. In some cases, these are applications I currently use over (or in addition to) their graphical equivalents.
Quite honestly, it is entirely possible to live completely without a GUI (more or less)—even today, in 2019. And, these applications make it possible—challenging, but possible.
Web Browsing
Plenty of command-line web browsers exist. The classic Lynx typically comes to mind, as does ELinks. Both are capable of browsing basic HTML websites just fine. In fact, the experience of doing so is rather enjoyable. Sure, most websites don't load properly in the "everything is a dynamically loading, JavaScript thingamadoodle" future we live in, but the ones that do load, load fast, and free of distractions, which makes reading them downright enjoyable.
But for me, personally, I recommend w3m.
w3m supports inline images (via installing the w3m-img
package)—seriously, a web browser with image support, inside the terminal. The future is now.
It also makes filling out web forms easy—well, maybe not easy, but at least doable—by opening a configured text editor (such as nano or vim) for entering form text. It feels a little weird the first time you do it, but it's surprisingly intuitive.
Email
Email is another one of those things you simply can't live without. Luckily, people were emailing each other from UNIX/Linux machines long before modern graphical email clients (or webmail) even existed.
There are a few quality options for sending mail from the comforts of your terminal (including Mutt and Notmuch), but for my money, it doesn't get much better than Alpine. It is, by far, the most approachable and learnable. Common hot-keys are displayed right on screen (such as press r to reply to a selected email), and the overall layout and interface is going to be immediately recognizable to anyone who has used a graphical email client or webmail.
Some other clients (like Mutt) also are quite excellent, but they have a bit steeper of a learning curve.
Instant Messaging
Wouldn't it be great if there was something like Pidgin, but entirely command-line based? Something that supports multiple chat protocols (like IRC, XMPP and so on) and lets you have chats with multiple people at once?
It turns out there is. It's called Finch, and it's made by the Pidgin folks.
It even has a nice TUI (Text User Interface) that somewhat mimics the GUI of Pidgin. Navigating around that interface without a mouse can be a bit confusing at first (Alt-N goes to the next "window", Alt-P to the previous and so forth), so taking a few minutes to learn the keyboard commands will save you much frustration.
It's not a perfect solution, mind you. Some of the protocols that Finch supports are either dead or dying (such as AOL Instant Messenger), but the support that is there works surprisingly well.
Word Processing
WordGrinder is the terminal-based word processor you've been looking for.
WordGrinder has a simple interface (press Escape to bring up a global menu with all the functions and feature available), is fast as heck, and is just downright delightful to write in.
The darn thing even supports writing to ODT, HTML and Latex, and it can import ODT, HTML and text. There's even some basic formatting options (italic, bold, underline, margins), which is a bit surprising for a terminal-based word processor.
Spreadsheets
Text-based spreadsheet programs are nothing new. Heck, the fabled VisiCalc had an entirely text-based user interface, as did most spreadsheet programs built for a decade after that point.
Just the same, the spreadsheet options when running in Linux terminal are...limited.
The most commonly used option is known as sc (for Spreadsheet Calculator). It's been around for a good long time and works wonderfully well—for what it does. Enter text into a cell? Check. Enter numbers into a cell with some computation options? Double check.
Want to open a spreadsheet created in something like LibreOffice? Well, you're going to be plum out of luck there. sc uses a custom file format. Why not simply default to using CSV or some other standardized, text-based format for spreadsheets? I couldn't tell you. That confuses me too.
But luckily, the sc file format isn't too far off from CSV, and folks around the internet have created a variety of scripts to help convert between the two. It's not a seamless workflow, but sc is usable—once you learn the key bindings and get some supporting scripts in place to convert files.
Presentations
Yes! You can create and give presentations entirely from the terminal! It really works! I mean, there's not going to be any images, but who needs pictures in this day and age?
The program is called "tpp" (Text Presentation Program), and it's in just about every repository on the planet. It has a bit steeper requirements than many terminal applications, as it relies on Ruby, but it's still lighter and faster than any graphical presentation program out there.
Presentations are created, in whatever text editor you choose (I'm a nano man, myself), and they're saved in a simple sort of markdown language. It has a very low learning curve.
So, maybe you won't be giving a presentation using tpp to a bunch of folks who expect copious clip art on your slides, but for a nice, nerdy audience? A purely text-based presentation will, if nothing else, win you a few high fives.
File Management
Copying files around in the terminal isn't exactly difficult once you learn a few commands (like cp
, mv
and rm
), but having a nice interface to browse and copy files in bulk is simply a must.
And the very best option, in my humble opinion, is Midnight Commander, which is also known as simply mc. An open "clone" of the famous Norton Commander file browser, mc is one of the first applications I install on a new Linux system. It's simply the king of terminal file management.
Music
cmus is the music player you want to be using. It's light. It's fast. It's easy to use. It supports just about any audio format you could ever want (everything from MP3s and Oggs to MOD and SHN), plus streaming formats and playlists. It's just...the best.
Window Management
Just because you're living in a terminal doesn't mean you need to give up running (and looking at) multiple applications at the same time.
What one would call a window manager in a graphical desktop, in terminals is called a terminal multiplexer—same idea, more or less.
There are three terminal multiplexers that most people tend to use: GNU Screen, tmux and Byobu.
GNU Screen and tmux are, for most people, fairly interchangeable. Once you figure out the keyboard shortcuts for creating new "windows" and moving between them, you're all set.
Byobu (which actually utilizes Screen and tmux behind the scenes) aims to be a bit more full featured, emulating aspects of a traditional desktop environment and providing just a bit more visual information. Although it does tend to be slightly more finicky than the others.
Personally, I love tmux and use that one almost exclusively. Just do yourself a favor and really read through the man page first. Otherwise, you might end up pulling out a fair bit of hair as you learn how to switch between applications.
Really? No GUI? In 2019?
Seriously, it's doable. Sure, there are pain points—some pretty big ones at that. But, there's also something magical about it. Then again, maybe that's just the nostalgia centers of my brain talking.
Regardless, having these sorts of tools available (even if just to use when SSHing into a server) is downright handy.
Resources
The Lunduke Journal is made possible entirely through the generosity of nerds just like you. No advertisements, no corporate sponsorships. If you haven't subscribed yet, you can do so and get some fun perks, right here on Substack or over at Lunduke.Locals.com.
Have you ever had a play with Gemini? https://gemini.circumlunar.space I think it's something you would enjoy. I have a capsule in "Geminispace" which I set up some time back, but then did not do much with. I have now spent some time on it and it's looking more like I wanted to. Loving using the "net in terminal". Have a look if you like the sound of it.