Guide to Linux Desktop - for Windows Power Users
This guide is aimed at Windows power-users like myself looking to use Linux as their daily operating system to completely replace Windows.
Most of it applies to any Linux distro except where specifically stated (I use Ubuntu 22.04, and previously Kubuntu), and should be useful for any user, beginner to advanced.
Advantages of Linux
- Options/freedom. For nerds, the choices are endless. Choose your base distro, spend weeks customizing and tweaking it to infinity. Think of it as building your own OS.
- Constant evolution. Popular open source is vibrant and ever changing. Its always exciting to use software that is actively developed.
- Stays out of your way. No in-your-face monetization. No features-in-disguise nagware to “link your phone and make your experiences consistent across all devices”, “Use Edge Browser, IT’S THE BEST FOR WINDOWS 10“, “Your files are not safe without One-Drive” etc.
- Updates don't suck and genuinely improve your experience. You install them when you want or even choose to never install them, and generally restarts are either not required or optional. They actually fix bugs and add good features. Windows updates in comparison are now forced, nearly always forcing a restart often without permission, tend to re-install crapware (good old Candy Crush), add more spy features (like a 'new' Cortana that can no longer be switched off), and “security updates” that forever band-aid fundamental flaws in the OS architecture and gradually slow the computer over time.
- It's a power-user/nerd paradise.
- Actual TERMINAL. Need I say more?
- OPEN SOURCE. Don't like something? The only option in Windows is complaining to the deaf ears of a faceless corporation. Now you can fork it, change it yourself, and share it.
- Customization. There are dozens of “distros” to choose from some catering to specific styles of user, try each out in a virtual machine and see which suits you best.
- Security. A far more secure architecture than Windows. Most SW is open source and can be audited for spyware and backdoors.
- No drivers to install, most devices "just work". NVIDIA is a notable exception due to their closed model and licensing issues.
- Truly free and ownable. Most proprietary apps you pay for these days are software as a service, which means you DO NOT OWN it. Even though most closed OS are also free or low-cost now, they contain annoying monetizations and crapware built in. However using Open Source is NOT about free-loading! I still donate money to projects I love, and you should too.
- Often incorporates advanced features not yet available in other OS.
- Runs faster. Some distros such as Linux Mint are specifically designed as lightweight, but in general all Linux versions work better than Windows, particularly on old PCs. It is common for the sound of the PC to become quieter due to less CPU usage, and/or the battery life to improve.
- Does its best for the user, not investors. Proprietary software is often deliberately limited due to the fact that they have investors to please and follow a certain business model. They don't need to please users because users are either unaware/afraid of alternatives or the company has other ways to establish a monopoly. Software free of a these forces is truly free to be however the user wants it. Examples of features that are in the best interest the users and not investors:
- Open file formats
- Being able to own a copy of the software and all its data, rather than a subscription
- Absence of dark-patterns, including nag-ware, forcing apps to open on an addiction-feed (exploitative recommendations algorithms), and feature/settings obfuscation (e.g. forced entry of credit-card details for a "free" trial and putting hurdles in front of finding the unsubscribe button).
- Unlimited extensibility
- Ability to enable/disable any feature including tracking
- Community and developers. Proprietary software have tech support departments and we all know how "helpful" they are. Open source typically has no official tech support but instead they have a bright community that you can turn to for help. Developers and users of active/popular software can be happy to help or implement any suggestions you have, and you are invited to help others, which is its own reward. You have the option to support developers with direct donations which feels better than forking over cash for proprietary monopolistic crapware you dont even own. I have never found a problem that I couldnt just google and at least have a few people talking about some solution or work around, no matter how tweaky and obscure. In proprietary land, very often googling advanced issues either gives no results or a message from the tech support saying "sorry we wont be having that feature.. this thread is now locked".
Downsides of Linux
- Too many Options/freedom. For some people this is overwhelming. Simply learning the different options is a huge learning curve.
- Too much Constant evolution. While it is exciting, for some it can be annoying for a tool they use to keep changing and even become stale if the developer stops working on it, then you may need to do some research to switch to an active fork or find the latest replacement.
- New OS to learn. For a decades long Windows power-user there is much to re-learn going into Linux. You instantly go from Windows guru to Linux newbie - this can feel time-consuming at first, and both exciting and frustrating for the average techie. But dont fear, this document is aimed at helping the more advanced users to transition from Windows to Linux with minimal hassle.
- Potentially Unstable software. This can be avoided by sticking to stable releases but sometimes the allure of new features can pull the user down the unstable rabbit hole.
- Application compatibility. This is far better than it was, and there are far more acceptable alternative choices for popular apps. But there are still notable apps that don’t work on Linux, including Adobe, newer versions of MS Office and Skype for Business. Most newer proprietary software tends to be cross platform with Mac and Linux. Many modern games don’t work on Linux, however if you use Steam you will be happy to find many working games there. On the plus side, you will be surprised by the number of non-linux apps that have a reverse-engineered open source version, that is far better than the original and 100% compatible with it.
- Hardware compatibility. Again vastly improved due to generic driver models, But there are a few devices that are not well supported due to manufacturers neglect. Some webcams built into laptops may not work, but there is ongoing work to support them.
- Some aspects may be behind the curve. While Linux is often the first to receive advanced features, on rare occasion it is not if the feature relies-on, or was discovered by, proprietary means (e.g. closed file format support, big-data driven features, lack of open driver support from manufacturers).
- Occasional quirks. Some advanced functionality may require some working around. But again this is a give and take, there will be aspects of Windows which have really bad usability but everyone just got used to them and now they are “standard”.
- Personal tech support harder to come by. This applies more to non-tech-savvy users who would call their kids/techie-friend for PC help, who are far more likely to know about Windows than Linux.
- Can lack sane defaults. Often you see screenshots or videos of people with EPIC Linux setups that work exceptionally well. That is because they spent weeks tweaking and configuring it that way. By default, many tools have massive potential but are let down by not so great defaults, or leaving the configuration entirely up to the user instead of a decent setup out of the box. You will often need to tweak, script, and configure it into a polished diamond of a tool. Although this is improving a lot lately, with distros and forks of powerful tools which are UX focused and have much saner defaults.
A Linux Desktop Journey
I wrote this section to give you an idea of what you may be in for. This is what becoming a Linux power-user was like for me. Each of these stages could be a day or more so be prepared to invest some time depending how far you want to go.
- Install Ubuntu along side dual-boot Windows, Install some apps through package manager... wow this is way better than Windows.
- Actually... that's SO confusing why cant it be more like Windows?
- How do I make this more like Windows/Mac? Hours tweaking to make it work like Windows/Mac
- Researching different distros and figuring out the best one (actually just different DEs for Ubuntu). Every time I try a new one: OMG this is so much better. Actually not really.
- Thinking I am an elite hacker... by copy/pasting terminal commands
- Constantly googling: Best GUI tool for {CLI tool name}?
- Installs awesome theme and Icon set. Thinks: This is THE REASON to use Linux.
- I need a work-around to get dark-mode/some-theme/icon working for this one must-have app I installed that I will probably never will use. EPIC procrastination material.
- Opens a config file in Vim... OMG how do I edit? OMG the text just randomly moved around and lines disappeared. OMG how do I even exit? Closes terminal window, finds nano, ah ok can use this.
- Installing dozens of extensions and tray applications for DE. Just about breaks the whole DE in the process.
- Hours installing work-arounds for tweaky cosmetic stuff that doesnt matter.
- Realises there are multiple ways to install most apps with different tradeoffs. Damnit Snap packages!
- OMG How am I going to run Office/Skype/Adobe? Hours of failed workarounds later > boots back to Windows for a while.
- The next quite weekend available, boots back into Linux: researches FOSS alternatives to Windows-only apps or runs them in a Windows VM. At this point I could spend 99% of my time in Linux.
- Starts to notice other peoples cool looking terminals... Installs a better terminal app with tiling, installs tmux, powerline for bash, cmatrix, fish. Starts posting RICE screenshots.
- Decides to take another look at Vim after seeing it in RICE screenshots... Actually reads a tutorial about it, installs some plugins... and mind is blown. New default text editor.
- At this point I got more comfortable in the terminal than in the GUI > THE TIPPING POINT.
- Constantly googling: Best CLI tool for {GUI tool name}?
- No going back to Windows now.
- Tiling Window Manager as daily driver.
- Installs Arch/Manjaro.
- Writes a book about Linux.
Which Linux Distro to Install?
There are a lot of opinions about distros. Ultimately its your choice. I stick with fairly standard distros as I am willing to take the time to customize it how I want. If you dont and would rather have a specific look and feel out-of-the-box, then I have described a few distros below in this way. This guide is mostly around Ubuntu variants I use, namely Ubuntu Gnome and Kubuntu, but will work for Arch variants if you replace apt
commands with pacman
. My suggestion is first select either a Ubuntu/Debian based distro (mainstream and stability) or an Arch based distro (better package manager, rolling-release, more cutting edge). If its all too much, go with regular Ubuntu (Gnome) for the best support. Detailed recommendations follow:
Ubuntu/Debian variants:
- Ubuntu (Gnome) The popular Ubuntu standard UX (My current everyday favorite)
- Kubuntu (KDE) Easily customizable, fancy animation, lighter (Previously I used it on an older PC)
- UbuntuDDE (Deepin DE) Uses the DE from Deepin Linux distro, which is rapidly gaining popularity due to having a great out-of-the-box experience
- Ubuntu Budgie A Thoughtful Linux UX
- Zorin OS The Windows 10 UX (Newbie friendly, switch between 6 types of UX, includes Lite version - I installed this on an old PC for my parents to use)
- Elementary OS The Mac OSX UX
- Linux Mint The Windows 7 UX (Most lightweight, several different desktop styles) and user friendly
- POP OS A new very user-friendly distro with optional tiling window manager for effecient workflow for creatives, engineers, and the like.
Arch variants:
Arch linux is a base-distro, taking a different apprach to Ubuntu/Debian, which was started from scratch for advanced users. Advantages include, friendlier HW detection and support (e.g. switching NVIDIA GPUs, and Kernels), a more modern package manager (AUR) and rolling-releases rather than LTS, and the option to control and customise every aspect of your own distro from scratch during installation for absolute minimal bloat.
Arch users are often thought of as the "vegans of the Linux world"... "How do you know if someone is a an Arch user? They will tell you." Make of that what you will.
- Arch Linux Super-custom advanced install, minimalist power-user UX, rolling release, lightweight
- Manjaro Popular user-friendly distro based on Arch linux. Lightweight XFCE is the default experience, but you can also download official Gnome or KDE versions of Manjaro.
Glossary
CLI | Command Line Interface: a text-only user interface |
GUI | Graphical User Interface: a visual user interace with windows, buttons, mouse input etc |
DE | Desktop Environment: a graphical environment for interacting with a Linux-based OS (e.g. Gnome, KDE, XFCE) |
RICE | Race Inspired Cosmetic Enhancement: Term adopted from superfluous aesthetic customisation to cars made by enthusiasts, in the Linux world refers to elaborate aesthetic customisation to the DE |
OS | Operating System |
Distro | A distrubution of Linux, which you can consider to be an OS in its own right, such as Ubuntu or Manjaro. Usually has its own website, includes a repository of thousands of software packages, a default DE and installation program or image |
FOSS | Free and Open Source Software |
Key Differences between Windows and Linux
- Keyboard shortcuts. Of course you can customize them all in Linux system settings.
- All command/file/folder names in Linux are CASE SENSITIVE vs Windows is NOT.
- Everything in Linux is split up into small libraries/programs created by different many people/companies. This gives you enormous choice and customization power for every tiny detail of your OS. You could be using a specific Kernel 5.4, Gnome as DE (desktop environment), Adwaita as theme, Tilix as terminal, Dolphin for browsing files, FSearch for searching files, Latte-dock as taskbar, Arc as your "start menu", and some other app as an applicaiton switcher. In contrast, Windows and MacOS are clearly intended as a single piece of software where the OS provider builds in these functions tightly (though there are various "hacks" that allow some level of customisation).
- Everything in Linux is mapped to a file, including serial ports, settings, hardware devices, drives, partitions, processes and networks. This makes it very simple for software and scripts to interoperate, particularly through a command line. In Windows these are clearly different types of things with their own unique interfaces.
- Forward slash
/
MUST be used as the separator in Linux paths, vs in Windows most of the time both / and \ will work. - In general, a logged in Linux user is clearly delineated, only has user-privileges and can only edit files in their user home directory, and must use special administrator commands to edit anything else system-wide. By default, in Windows, a logged in user is a “fuzzy” definition and is often able to make many system-wide changes, sometimes requiring clicking on an admin popup, sometimes not. This lack of clarity combined with the largest user-base is a key reason Windows is the target of the vast majority of virus and malware attacks.
- Linux Drivers are generally compiled into the kernel (either directly or using modules loaded during runtime), unlike Windows which has separately running drivers.
- If you are a power-user you MUST learn to use the terminal. Think of it as using "text" to communicate to your computer directly - a chat window where you can only talk to one person: your PC. Ultimately it will allow you to extend much further into power-user territory than Windows or Linux GUI allows and fully harness your PC. This might seem scary or time-consuming at first, and you will be compelled to Google for GUI version of this and that, but after some time you will come to see the advantages of terminal and embrace it. There are good reasons to prefer a GUI in some instances, if only to provide comfort. However, after some customisation/beautification and learning, you will feel right at home on the terminal, you will likely end up not wanting to leave it! One suggestion is to keep notes, such as a google doc or markdown file, containing snippets of useful terminal commands. In fact that is how this document started off.
- When everything turns to crap in Windows you hit
Ctrl+Alt+Del
and try to troubleshoot running processes. In Linux, if your DE GUI hangs or crashes, the steps will depend on which DE you are using. For Gnome and KDE you can hitCtrl+Alt+F2
to bring up a plain text terminal where you can log in and runhtop
to examine and kill running processes.
Summary of other equivalents/differences:
Windows | Linux |
---|---|
C:\ | / |
C:\Program Files\ | Multiple. See Linux Directory Map below |
C:\Users\mcfly\ | /home/mcfly/ or ~ (if logged in as mcfly) |
My Documents | /home/mcfly/Documents/ or ~/Documents/ |
Desktop | /home/mcfly/Desktop/ or ~/Desktop/ |
.exe file | No specific file extension but executable files must have the execute (+x) file attribute |
.dll file | .so file (dynamically linked Shared Object) Also .a file (statically linked) |
.bat file | .sh file |
COM1 (COM ports) | /dev/ttyUSB0 (To list available ports, type: ls /dev/tty* ) |
Add to PATH environment variable: setx path "%path%;c:\directoryPath" | export PATH="$PATH:/path/to/app/bin" To make it persistent for user, add it to: ~/.profile Or make it persistent system-wide, add to /etc/bash.bashrc |
Administrator | Root or super-user (su) |
Windows Registry | No equivalent exists (thank God). Application and system config is stored in individual files e.g. in /etc/ folder. A few shared OS settings are also stored in the dconf database (aka GSettings in Ubuntu) located in ~/.config/dconf/user |
Virtual Memory: Pagefile or swapfile Windows actually uses 3 files: C:\pagefile.sys - Normal pagefileC:\swapfile.sys - For new type AppsC:\hiberfil.sys - Hibernation state | Modern linux uses /swapfile file which you can check using swapon -s. You can easily change its size. Hibernation state is also saved here, so can be 0.5x - 2x RAM size. Recommend: 1.5x RAM |
Device Manager | Try hwinfo for a GUIOr various commands: lspci , lshw , lsusb |
Shortcuts: Right click on file/folder to create shortcut. Right click and go to properties to edit. | Create and edit a .desktop file (see section below). Shortcuts are more commonly referred to as Launchers in Linux |
Symbolic Links (NOT shortcuts): Use mklink in command prompt OR install GUI context-menu tool: Link Shell Extension | Use ln -s command in terminal OR in Gnome, hold Ctrl+Shift while dragging file/folder to destination, or hold Alt while dragging to get context-menu options at destination. |
Hidden files: Set file attribute flag | Hidden files: any file name beginning with a dot . |
File systems: NTFS (Default) FAT32 extFAT | File systems: Ext4 (Default) NTFS FAT32 extFAT ZFS |
File naming limitations (NTFS) Can’t use any of: ? " / \ < > * |: {NULL} Windows GUI prevents naming files starting with dot “.” and various reserved device names e.g. COM1 CON LPT etcFile extensions are almost always present (The only way for Windows GUI to distinguish file type) | File naming limitations (extFAT) Can’t use any of: / {NULL} Some characters have special use and while they can be used, may require escape character ( \ ) : < > | : & File extensions are optional and sometimes not used (OS can often distinguish file type by first line of content) |
Linux Directory Map
Credit: Daniel Li
More:
File Hierarchy Standard (FHS)