Welcome to Linux InstallFest!

Tux

Welcome to our guide on getting Linux up and running!

This is a step-by-step guide, with detailed explanations on how to install Linux, start with the README section, then check out the Install Methods page to find which way of installing Linux suits you best, make sure you carry out the pre-install checks and away you go!

If you're new to Linux and this is your first time installing it, we would recommend you go for an Ubuntu dual boot setup. Ubuntu is stable and a dual boot will help you learn the Linux environment, whilst keeping your Windows install intact.

This isn't meant to be an entirely standalone guide, however, it should be a pretty good collection of our understanding of how to install Linux. We use it for the yearly InstallFest event, but it's available all year-round 🙂

You will need to have a phone/tablet to read the guide.

Don't forget to backup any important data you don't want to lose!

For technical questions about Linux and support after install, join the #tech-support channel in the CSS Discord and/or the AFNOM Discord.

Enjoy and welcome to the world of Linux! 🥳

Also: Special shoutout to UoB's "Missing Semester" which is a series of courses we're running starting this year (2023) which will cover a lot about how to use your new linux system! Please register and join us!

README before anything else!

Introduction

The Linux InstallFest is a guided session where UoB students from AFNOM and CSS help other students install Linux on their personal computers. A few key points.

  • After the in-person InstallFest, a Discord channel will be shared for troubleshooting / asking followup questions.

  • InstallFest is a way of introducing people to Linux, and as such we aim not to overwhelm people with information as that would do them a disservice. To that end, this is a very streamlined process which is by nature overly simplified. If you want to explore further on your own you're more than welcome to!

  • Choosing a Distribution: Much ink (eg here and here) has been spilled on how to choose the right Linux distribution. Linux is extremely customizable and different distributions offer different combinations of software versions, update schedules, startup mechanisms, security features, graphical environments etc etc. In particular, the graphical environment might actually be more important than the distribution in terms of how you interact with the OS. However, per the prior point, we strongly recommend using Ubuntu Linux for the InstallFest, especially if you've never used Linux before or are a beginner.

PLEASE NOTE

There are many different Linux distributions and graphical environments to try; we certainly don't discourage people from exploring what's out there. But for the purposes of helping the most people in parallel, we're only going to include instructions for Ubuntu in this document.

Install Modes

A key choice to be made is how to install Linux; briefly:

  • As a Virtual Machine (VM)
    • Your Linux installation runs alongside / on top of your existing operating system.
    • This is the least disruptive to the system but often has bad performance and experience.
  • Replacing the existing OS entirely
    • Get rid of Windows and run Linux exclusively.
  • Set to 'dual boot' with your existing OS
    • Choose at startup whether to boot into Windows or Linux.
    • A nice compromise between the first two options.

More information is available about these choices in the install methods section.

Depending on which you choose, you'll want to follow slightly different parts of the guide. Note also that there's a special section for Apple Silicon Macs.

Recommendation

Our recommendation (for PCs) is to go for dual boot or full install over setting up a VM:

  • A slow clunky VM doesn't paint any OS in a good light
  • VMs yield an inferior Linux experience (but with better safety)
  • Based on last year, setting up a VM seems just as complicated as setting up dual boot!
  • Having to boot into Linux will help force you to get accustomed to it

Preinstall Checklist

Regardless of which method you choose, you'll want to do the following time consuming steps before the InstallFest. In previous years, people have not done these steps ahead of time and then spent most of the InstallFest doing this prep work!

  • Skim the guide you'll be following
  • Download the installation media for Ubuntu
  • If you are installing Linux as a replacement OS or via dualboot
    • You will also need a USB drive of at least 4 GB
    • A drive imager. The Raspberry Pi foundation keeps an up-to-date list of imagers for Windows, however, we'd recommend Etcher.
    • If needed, decrypt your boot volume (Bitlocker) before the InstallFest starts
  • Backup your data! Yes, really!
    • Warning! Please make sure you have a backup of any data you do not want to lose. We are providing the instructions as they are, and we are not responsible for any data loss that might occur. By using them you agree you are assuming your own risk.
    • This is less important but still a good idea for the VM approach.

Install methods

If you're here its probably because you'd like to begin working with and using Linux <3.

But there are a few different ways to install Linux depending on what you want to end up with.

Here we'll outline the different ways you can install Linux, and which might suit you best.

Pure Linux

This is where you fully replace your current OS with Linux. This means bye-bye to Windows and only Linux.

Dual boot

Probably the most popular option, this is where you get to have multiple operating systems on your device at once. You'll do this by partitioning your hard drive into a Windows section and a Linux section, then each time you turn on your device you get to choose which to use. This means you can have the best of both worlds.

Virtual Machine (VM)

A Virtual Machine is a simulation of a computer, on a computer. It's a great way of playing around with an OS you want to try out but you're not sure about, or for performing experiments on.

Operating systems definitely run slower and on virtual machines than on the bare metal, but if you don't want to switch your main operating system, but still be able to have a Linux machine to do experiments / projects on, this might be a good option.

Distributions

Linux comes in different flavours or "Distributions" (aka distros). While it's the same kernel (core of an operating system) they can each work differently on top e.g. how software gets installed, how networking works, how it looks. There are endless distros out there if you want, but to make things simpler we've chosen to write this guide for just one: Ubuntu.

Ubuntu

Maybe the most popular distribution out there, Ubuntu is a really great distro. It looks great and is easy to use, it's kept up to date and has great support for packages and software. Just because it's "good for beginners" doesn't mean it's any less advanced / capable than any other distro, remember they're all built on the same underlying kernel, it's just how things get done on top of that that changes.

Before proceeding with installation

Please don't forget to make a backup of any important data!

Bitlocker disk encryption

Many laptops enable Bitlocker encryption by default. However, it is impossible to resize partitions when they are encrypted, so Bitlocker must be disabled before installing Linux.

To disable, go to the "Manage Bitlocker" page in Windows, and then choose "Turn off Bitlocker". You will have to wait for the drive to decrypt. This may take a long time if the drive has a lot of data on it.

What is the BIOS and why do we care?

The BIOS is the part of your computer responsible for managing hardware and booting other operating systems.

BIOS diagram

The BIOS is where we configure some of the lowest level hardware to make sure it's compatible before we mess around with our operating systems, so we're going to need to interact with it when preparing to dual boot.

Since the vast majority of laptops come with Windows preinstalled, their BIOSs are often preconfigured with settings developed explicitly for Windows. Therefore when dual booting some if these settings can be incompatible with installing Linux and we need to tweak them.

How to access the BIOS

The BIOS is only really accessible when you boot your PC so you can't adjust its settings while running an OS. You're going to have to restart your device. There are 2 ways to access the BIOS: you can trigger it from Windows OR restart your computer and enter manually.

The way its entered manually is a bit manufacturer specific in terms of which key to press whereas the Windows method is longer but more standardised.

From Windows:

1: Open Settings
2: Go to Update & Security
3: Open the Recovery tab
4: Under "Advanced Settings" restart your device using the Restart Now button
5: When your device restarts and you're presented with a menu select Troubleshoot
6: Select Advanced Options
7: Select UEFI Firmware settings
8: Click Restart

Your device will now restart and take you straight to the BIOS.

Manually:

Restart your device. Before you enter Windows you will see an icon of your laptop manufacturer e.g Lenovo, Dell etc.

At this screen press the F1 key and you should be brought to the BIOS.

If not don't worry it's just that the manufacturer has changed the button to press.

There might also be a message, for example Lenovo shows: "To interrupt normal startup press Enter". Press the key it says and you should be brought to a menu with several options, one of which will either say "adjust BIOS settings" or something similar, use the arrow keys to select this and press Enter.

How to do stuff in the BIOS

The BIOS is very low level, hence why it looks simple and works simply. You can move around the menu with the arrow keys, maybe the Tab key and selecting submenus using the Enter key, and perhaps readjusting the ordering using the +/- keys.

Hopefully it will have a handy guide of which keys do what, but if in doubt Google how to navigate your manufacturer's BIOS.

It's a bit difficult to give a general guide since the BIOS is specific to every manufacturer's motherboard but it will have all the settings you need somewhere and hopefully organised fairly logically.

In general they have several tabs, each with a different category of settings; you use the arrow keys to move selection and the Enter key to change things. There will probably be a BOOT/Startup tab that's important to us.

It's important that you make sure to SAVE the settings before leaving the BIOS, make sure when you exit you select whichever option is "Save and Exit" not just "Exit". Otherwise, guess what, all the changes you made won't stick.

Here are a few common things you should configure in the BIOS before going ahead:

Boot order

Boot order is very important to actually be able to boot to the installation media, like a USB!

By default, the system will try and boot off the first hard drive/solid state drive available, however, modern computers can boot off of many different media types, including network, cd drives, usb drives, etc.

In your BIOS, locate a section for "Boot Order", and rearrange them to place USB at the very top, before any other method. It's possible that your BIOS doesn't have this setting - which is very sad. If it doesn't, then when you try to boot your installation media, you need to interrupt the boot process and manually select the USB drive.

Fast Boot

Fast Boot is a Windows-only technology that enables faster booting where instead of "properly" shutting down, the computer enters a state similar to hibernation which allows faster loading of the Windows kernel and drivers. Disabling Fast Boot will make your Windows boot times slightly slower, but probably only by a few seconds at worst. In some cases having it on may cause problems accessing your Windows partition from Linux, or problems booting Linux altogether. If so you can disable it.

To disable it, first disable fast startup in Windows, and perform a full shutdown before rebooting into the BIOS. Then disable it in the BIOS.

Fast Startup

Then, you can set Fast Boot to Disabled, usually found under the BOOT tab.

Intel RST

You may or may not need to do this step. Please read the following paragraphs to understand what RST is and to learn how to identify whether you will need it.

Intel Rapid Storage Technology can generally speed up your system and make it feel more responsive, however, because of a lack of drivers on Linux, it's quite common that your installer will not detect your hard drive if you have it enabled.

You can disable it, usually, by modifying your hard drive to use plain AHCI instead of Intel Optane in the "Devices" section of the BIOS. However, before you do this, be aware that you may take a small performance impact and notice your hard drive speeds a bit slower than before. Also, note that if you're planning on keeping Windows around, you'll need to do some prep before making the change.

The Ubuntu installer will prompt you if changes to Intel RST are required. It's easy to determine as you won't see your disk in the installer list, when you reach the partitioning step in the guide. If this happens, come back here and follow the guide below.

To avoid the chance of something going wrong, follow the guide on the Ubuntu discourse here, taking special note of the required instructions on the Windows side of things.

Virtual Machine Pre-install

If you're looking to install Linux in a Virtual Machine, you need to make sure of two things:

  • Virtualisation is enabled in BIOS
  • Installing VirtualBox

You will need:

This guide will tell you how!

Enabling virtualisation in BIOS

Intel CPU users:

Reboot your computer and go into your BIOS/UEFI. You usually need to press F1, but check for your specific key. Google is your friend :-) Your BIOS/UEFI might look different than the images below, but they all have these functions!

Once you are in the BIOS/UEFI navigate to the Security tab. You probably don't have mouse, so just use the arrow keys.

./images/bios-security.png

Once in the Security Settings, navigate to the Virtualisation settings and press Enter. Enable both Intel Virtualisation Technology and Intel VT-d Feature.

./images/virt-enabled.png

Then press F10 to save and exit. Confirm you want to save the settings.

./images/bios-confirm.png

Done! You're ready to get started on your VM journey!

AMD cpu users:

Reboot your computer and go into your BIOS/UEFI. The key you will need to press varies, but it should be F1, F2 or DEL. Check for your specific key (you can google it if you know your motherboard manufacturer, or look for a prompt on screen when booting).

Your BIOS/UEFI might look different than the images below, depending on your motherboard, but you will need to find the configuration items related to the CPU/processor. They might be under Processor, Chipset, Advanced CPU configuration or Northbridge.

./images/amd_bios_overview.png

Here, you will need to locate the virtualisation option. It might be labelled SVM mode, AMD-V, AMD IOMMU, VT-x or Vanderpool. Make sure that it is set to enabled.

./images/amd_bios_svm.png

Save changes and exit (press F10).

Installing VirtualBox

Download VirtualBox from the above link and run it. Make sure all the features are enabled.

./images/vbox-features.PNG

Proceed by clicking Next and confirm installation when notified network might disconnect while VirtualBox is installing.

You will be prompted to install drivers for it, proceed their installation.

./images/vbox-drivers.PNG

Congrats! You can now start VirtualBox!

Installing VirtualBox Extension Pack

VirtualBox Extension Pack will add some extra functionality to the VM, which you might find convenient, most important being support for virtual USB 2.0/3.0 controllers.

Open VirtualBox, then go to File -> Tools -> Extension Pack Manager. Click the + button (on the right hand side of the window) to add the extension. Navigate to where the Extension Pack was saved and select it.

You will be prompted that you are about to install an extension pack. Confirm by pressing Install, then Agree with the T&C.

Upon successful addition you should see the pack in the list:

./images/vbox-extpack.PNG

That's it! Now head over to here.

Install instructions

In the following sections you will find info on how to install Linux. You've chosen your install method, now let's talk a bit about Linux distributions. You should choose one, but if this is your first encounter with Linux, we recommend you go for Ubuntu.

Linux comes in different flavours or "Distributions" (aka distros). While it's the same kernel (core of an operating system) they can each work differently on top e.g. how software gets installed, how networking works, how it looks. There are endless distros out there if you want, but to make things simpler we've chosen to write this guide for Ubuntu.

Ubuntu

Maybe the most popular distribution out there, Ubuntu is a really great distro. It looks great and is easy to use, it's kept up to date and has great support for packages and software. Just because it's "good for beginners" doesn't mean it's any less advanced / capable than any other distro, remember they're all built on the same underlying kernel, it's just how things get done on top of that that changes.

Ubuntu install

Ubuntu is one of the go-to first installs for newcomers to Linux. It's easy to setup, easy to maintain, and has excellent support for third-party programs, as well as some of the best driver setup and support out there.

The following section will give you the instructions on how to install Ubuntu on your computer.

Please choose the appropriate method of installation.

Warning! If you are installing it as a replacement OS or dualboot, please make sure you have a backup of any data you do not want to lose. We are providing the instructions as they are, and we are not responsible for any data loss that might occur. Use at your own risk.

Choose from:

  • Just Ubuntu -- replace your current OS with Ubuntu; this will completely erase data on your computer; backup anything you need.
  • Dualboot -- install Ubuntu alongside an existing Windows install; backup any important data, in case something goes wrong
  • VM -- install Ubuntu in a Virtual Machine; there will be no data loss; instructions are for Windows

Replacing current OS with Ubuntu

Warning: This method will delete your Windows partition. Please make sure you have made a backup of all the data you do not want to loose.

Step 1 (Preparation)

Before starting, download Ubuntu Desktop LTS 22.04 from https://ubuntu.com/#download or get it directly from here. LTS stands for Long Term Support, so this system will be supported for at least the next 5 years without an upgrade to the next version.

You'll get an ISO file, which is a disk image. You need to flash this to a USB drive, using an imager tool. The Raspberry Pi foundation keeps an up-to-date list of imagers for Windows, however, we recommend Etcher. Rufus is another good ISO burner.

In Etcher:

  • Select your ISO file
  • Select your USB drive (plug it in!)
  • Then flash!

Etcher

Step 2 (Boot)

To boot into the live installation media, plug your USB into your computer/laptop, and reboot - you should be able to boot off it with no problems.

Once boot has finished, you should be presented with the installer!

Installer

Click "Try Ubuntu" to be able to play around with a live preview (or need to use one of the bundled tools to help with installation), otherwise, go direct to "Install Ubuntu".

If you click "Try Ubuntu", you can find the installer later by clicking the icon on the desktop:

Start Installer

Step 3 (Installation)

Select your language

Installer Language

Select your keyboard layout

The auto-detect keyboard should walk you through finding out exactly what layout you have if you're not sure.

Installer Keyboard

Connect to the internet

Choose the wifi you want to connect to:

Wifi

If you're on campus it's recommended to setup Eduroam now.

Select software

In most cases you want a "Normal installation" with all the utilities - however, if you're working with less disk space, or want to manually install only the tools you want later, then go with a "Minimal installation".

If you have an internet connection, then select "Download updates" - it makes the install process a little longer, but ensures that everything will be properly up to date.

The "Install third-party software" is slightly more complex. In most cases, you should tick it, and attempt an install - if something breaks and doesn't work, for issues related to drivers, then you can try again, disabling this step, and instead trying to install the drivers and codecs after the install is fully complete.

Installer Software

Remember to configure secure boot. When you reboot after installing, you will need this password to enrol your key.

Choose installation type

Be careful at this step! After you click "Install Now" the install process will begin!

For a pure install, click "Erase disk and install Ubuntu".

Installer Type

At this step, you can also choose to encrypt your disk, by selecting "Advanced features" and selecting both "Use LVM" and "Encrypt the new Ubuntu installation". However, this is optional, and requires you to input your password at each boot.

Installer Encrypt drives

After you click "Install Now", you'll be asked if you want to proceed with the partitioning layout you've selected:

Installer Partitioning

Verify the changes, and then click "Continue". Note that your partitions will look different depending on your setup.

Select your timezone

Installer Location

Setup your account

You need to pick:

  • Your name (used in the display manager to greet you, etc)
  • Your computer's name (the hostname used on networks, pick something unique and recognizable)
  • Your username (used to login, appears in shell prompts, etc)
  • Your password (standard password guidelines apply, if you want something easy to remember and secure, try diceware)

Installer Account

Wait!

Now just wait for the installer to complete!

Installer Wait

Once it's completed, follow the prompts to shutdown, remove the installation media, and restart your computer. When you startup, you should be booted into Ubuntu!

Now head over to the Post Installation guide to update your system and install some useful software.

Ubuntu Dualboot

Warning: Please make sure you have made a backup of all the data you do not want to loose.

If you haven't checked out the Dualboot preinstall checks, go back and go through them.

Please make sure you have a backup of any data you do not want to lose. We are providing the instructions as they are, and we are not responsible for any data loss that might occur. Use at your own risk.

This guide will walk you through how to install Ubuntu as dual boot, alongside your existing Windows OS.

Step 1 (Preparation)

Before starting, download Ubuntu Desktop LTS 22.04 from https://ubuntu.com/#download or get it directly from here. LTS stands for Long Term Support, so this system will be supported for at least the next 5 years without an upgrade to the next version.

You'll get an ISO file, which is a disk image. You need to flash this to a USB drive, using an imager tool. The Raspberry Pi foundation keeps an up-to-date list of imagers for Windows, however, we recommend Etcher. Rufus is another good ISO burner.

In Etcher:

  • Select your ISO file
  • Select your USB drive (plug it in!)
  • Then flash!

Etcher

Step 2 (Boot)

To boot into the live installation media, plug your USB into your computer/laptop, and reboot - you should be able to boot off it with no problems.

Once boot has finished, you should be presented with the installer!

Installer

Click "Try Ubuntu" and play around with the system. Make sure everything works (keyboard, trackpad). Otherwise, go direct to "Install Ubuntu".

If you click "Try Ubuntu", you can find the installer later by clicking the icon on the desktop:

Start Installer

Step 3 (Installation)

Select your language

Installer Language

Select your keyboard layout

The auto-detect keyboard should walk you through finding out exactly what layout you have if you're not sure.

Installer Keyboard

Connect to the internet

Choose the wifi you want to connect to:

Wifi

If you're on campus it's recommended to setup Eduroam now.

Select software

In most cases you want a "Normal installation" with all the utilities - however, if you're working with less disk space, or want to manually install only the tools you want later, then go with a "Minimal installation".

If you have an internet connection, then select "Download updates" - it makes the install process a little longer, but ensures that everything will be properly up to date.

The "Install third-party software" is slightly more complex. In most cases, you should tick it, and attempt an install - if something breaks and doesn't work, for issues related to drivers, then you can try again, disabling this step, and instead trying to install the drivers and codecs after the install is fully complete.

Remember to configure secure boot. When you reboot after installing, you will need this password to enrol your key.

Installer Software

Choose installation type

Be careful at this step! After you click "Install Now" the install process will begin!

For a dual boot install, choose install alongside. Click continue.

Installer Type

Then, choose how much space to allocate Ubuntu. As a minimum, Ubuntu should have at least 30GB.

The installation will start.

Select your timezone

Installer Location

Setup your account

You need to pick:

  • Your name (used in the display manager to greet you, etc)
  • Your computer's name (the hostname used on networks, pick something unique and recognizable)
  • Your username (used to login, appears in shell prompts, etc)
  • Your password (standard password guidelines apply, if you want something easy to remember and secure, try diceware)

Installer Account

Wait!

Now just wait for the installer to complete!

Installer Wait

Once it's completed, follow the prompts to shutdown, remove the installation media, and restart your computer. When you startup, you should be booted into Ubuntu!

Neofetch

Now head over to the Post Installation guide to update your system and install some useful software.

Installing Ubuntu in a Virtual Machine

This guide will help you install Ubuntu in a Virtual Machine. It is written under the assumption you are using Windows. The VirtualBox installation for MacOS should be pretty much the same. For Linux distributions, install VirtualBox through your package manager.

You will need:

This guide assumes you have VirtualBox installed. If you don't, it means you skipped the Virtual Machine Pre-install post! Head back there and follow those steps.

Installing Ubuntu

In VirtualBox, go to Machine -> New (or just press CTRL+N). Input the name you want for your VM (good practice is to include what OS it is), select the type as Linux and the version as Ubuntu (64-bit).

../../images/ubuntu/vm-create-os.png

Next, you'll be asked to select the memory size. This depends on what specs your machine has. Ubuntu recommends a minimum of 4 GB RAM (4096 MB). You can allocate it more, but don't worry too much, these settings can be modified later too!

../../images/ubuntu/vm-create-mem.png

We are then going to create a virtual hard disk now (default option), and the Hard disk file type should be VDI (VirtualBox Disk Image). Choose to have the disk dynamically allocated. Next, choose the size of the hard disk. Ubuntu recommends at least 25GB.

../../images/ubuntu/vm-create-hdd.png

Done! You should now see your new VM in the list:

../../images/ubuntu/vm-created.png

Selecting the new VM (called Ubuntu in this example), click Settings (or press CTRL+S) and go to the Storage option. Under Controller: IDE, click the Empty disk. Click the blue disk next to the Optical Drive dropdown, and select Choose a disk file. Navigate to where you saved the Ubuntu ISO and open it.

To simulate having a graphics card, VirtualBox allows you to set the amount of Video RAM given to the VM. It defaults to really low, so if you're going to use the GUI of the VM a lot it's recommended to boost it to max so the VM is nice and smooth. To do this go into the machine settings, select the display tab and drag the slider all the way to the right.

Display Settings

../../images/ubuntu/vm-insert-iso.png

Back to the list of VMs, select the Ubuntu VM and press Start. Your VM should start. You may be asked to confirm the startup disk, select the Ubuntu ISO and press Start.

Note: If your VM gets stuck in a boot loop and the error message is related to VMSVGA, you need to change the graphics controller. In Settings, go to the Display option and change the graphics controller to be VBoxSVGA.

../../images/ubuntu/vm-display-settings.png

Back to the VM booting -- the Ubuntu installer should greet you:

../../images/ubuntu/vm-ubuntu-installer.png

Click "Install Ubuntu" and follow the steps through.

Select your language

Installer Language

Select your keyboard layout

The auto-detect keyboard should walk you through finding out exactly what layout you have if you're not sure.

Installer Keyboard

Select software

In most cases you want a "Normal installation" with all the utilities - however, if you're working with less disk space, or want to manually install only the tools you want later, then go with a "Minimal installation".

If you have an internet connection, then select "Download updates" - it makes the install process a little longer, but ensures that everything will be properly up to date.

The "Install third-party software" is slightly more complex. In most cases, you should tick it, and attempt an install - if something breaks and doesn't work, for issues related to drivers, then you can try again, disabling this step, and instead trying to install the drivers and codecs after the install is fully complete.

Installer Software

Choose installation type

Be careful at this step! After you click "Install Now" the install process will begin!

For a pure install, click "Erase disk and install Ubuntu".

Installer Type

At this step, you can also choose to encrypt your disk, by selecting "Advanced features" and selecting both "Use LVM" and "Encrypt the new Ubuntu installation". However, this is optional, and requires you to input your password at each boot.

Installer Encrypt drives

After you click "Install Now", you'll be asked if you want to proceed with the partitioning layout you've selected:

Installer Partitioning

Verify the changes, and then click "Continue". Note that your partitions will look different depending on your setup.

Select your timezone

Installer Location

Setup your account

You need to pick:

  • Your name (used in the display manager to greet you, etc)
  • Your computer's name (the hostname used on networks, pick something unique and recognizable)
  • Your username (used to login, appears in shell prompts, etc)
  • Your password (standard password guidelines apply, if you want something easy to remember and secure, try diceware)

Installer Account

Wait!

Now just wait for the installer to complete!

Installer Wait

Installing Guest Additions

Guest Additions from VirtualBox will allow you to enable some very useful features, such as bi-directional shared clipboard (i.e. you'll be able to copy-paste between you host and the VM) and shared folders. Let's get started!

With the VM powered off, go to Settings -> Storage. Select the CD with a plus button next to Controller IDE.

Note: if you still see the Linux ISO under the Controller IDE, remove it! If you fail to remove the ISO, the VM will boot from the Live CD, not from the VM disk!

./images/insert-ga-disk_1.png

From the list, select VBoxGuestAdditions.iso. Press Choose, then OK. Start the VM.

./images/insert-ga-disk_2.png

Open up a terminal and install gcc, make and perl:

`sudo apt install gcc make perl~

Go to the Guest Additions folder. Replace [user] with your own as needed. (Note that the GA version might have changed meanwhile)

cd /media/[user]/VBox_GAs_6.1.14

./images/cd-ga.png

Run the Linux GA:

sudo ./VBoxLinuxAdditions.run

Provide your user password and confirm you want to install by typing yes. It will then finish.

./images/ga-done.png

Next, let's make sure to add our used to the vboxsf group, such that we can do shared folders (replace neko with your own username).

sudo usermod -a -G vboxsf neko

Reboot! (You can optionally now remove the Guest Additions ISO from Settings -> Storage)

Bi-directional clipboard

It's very useful to be able to copy between the guest VM and the host. I usually use the browser on my host machine, and often times I find myself copying stuff from the host to the VM. In order to enable the clipboard, just do to Devices -> Shared Clipboard and choose which one suits you best. I always go for Bidirectional :-) All done, it should just work now!

Shared folders

It's also super useful to have a shared folder between your VM and host. This means you don't have to copy across text or files, they can be seen by both the VM and the host!

In order to setup a shared folder, we'll start with the VM powered off. Now go to Settings -> Shared Folders. Click the folder with plus icon on the right hand side. For the Folder Path box, click the dropdown button -> Other... and navigate to the folder you want to share! In my case, I'll share a folder called docs in my Documents. You can leave the Folder Name as it defaults to, or you can give it a different name. This is how the folder will be named in the VM! You can also make it auto-mount, and give it the path in the VM it will appear under. Remember, in Linux, your home directory is always /home/[your username]. In my case, I chose to mount under the docs directory my home directory. Click Ok until you exit Settings. Now start your VM!

./images/ga-shared-folder.png

Now you should see your shared folder in your home directory! Congrats!

./images/ls-shared-folder.png

Enjoy your new Ubuntu VM!

Now head over to the Post Installation guide to update your system and install some useful software!

Installing Linux on Apple Silicon

This guide will help you install Linux on newer Apple hardware that uses an Apple Silicon (ARM) CPU.

The Apple Silicon processors have very impressive performance for their energy consumption; no need for fans, all day battery life, great speed etc...but as they don't use the same CPU architecture as most desktop/laptop computers, a bit of extra work is required to get Linux working on them.

The main thing to keep in mind is that there's a difference between virtualization (running another OS designed for the same CPU architecture) and emulation (running an OS designed for a different CPU architecture).


Table of Contents


Installation methods

Bare Metal (NOT RECOMMENDED)

With incredible technical prowess, the small team over at Asahi Linux have gotten Linux to run on Apple Silicon hardware. However, though it's technically possible to run Linux 'bare metal', it's not really usable yet; while Asahi 'runs' it does not represent a really usable 'daily driver' setup (especially for beginniners!) and thus we don't recommend it at this time.

If you're curious about what's currently possible, check out their Feature Support Matrix. (Note the many 'WIP' cells...)

Dual Boot (NOT RECOMMENDED)

Because there is no bare metal Linux OS that's ready yet, this option is not really viable either.

Virtual Machine (VM) (RECOMMENDED)

The remaining option, running Linux in a VM, is our recommendation.

The options are

  • VirtualBox Beta (Still in testing, emulates x86, not yet recommended)
  • Parallels Desktop (non-free, though there's a free trial available)
  • UTM (donationware, recommended)

Setting up a Linux VM with UTM

Prep

  1. Download the install media (an .iso file) from here (Note: this might take 20-30 minutes! Best to download ahead of time!) or grab one of the USB keys floating around that has the .isos on them.
  2. You should also download the UTM app from here and then install it as any other Mac app.
  3. We're going to install Ubuntu in 'server' mode and then install a desktop environment at the end to make it graphical. Just follow the steps!

UTM setup

  1. Open UTM and click the “+” button to open the VM creation wizard.
  2. Select “Virtualize”.
  3. Select “Linux”.
  4. Click “Browse” and select the Ubuntu Server ISO downloaded from the link above. Press “Continue” to continue.
  5. Pick the amount of RAM (recommended: 4096MB) and CPU cores (recommended: default) you wish to give access to the VM. Don't Enable Hardware OpenGL acceleration. Press “Continue” to continue.
  6. Specify the maximum amount of drive space to allocate (recommended: more is better, 16 GB minimum). Press “Continue” to continue.
  7. If you have a directory you want to mount in the VM, you can select it here. Alternatively, you can skip this and select the directory later from the VM window’s toolbar. The shared directory will be available after installing SPICE tools (see below). Press “Continue” to continue.
  8. Press “Save” to create the VM and press the Run (play) button to start the VM.
  9. Go through the Ubuntu installer.

Ubuntu Installer

You can mostly accept the defaults the installer offers without any problems. Remember you can use the tab key to move between menu items. Here are the steps:

  1. Hit enter on 'Try or Install Ubuntu Server'
  2. Wait for a bit until 'display output is not active' clears
  3. Choose language
  4. Select 'continue without updating' on the 'installer updates' page.
  5. Choose the keyboard configuration
  6. For 'type of install' select the default "Ubuntu Server"
  7. Accept the defaults for network connections
  8. No proxy -- leave blank.
  9. Wait for a second but then accept the default mirrors once they load.
  10. On the guided storage configuration, accept the defaults by tabbing to "done" and hitting enter.
  11. Accept the Stroage Configuration summary.
  12. Confirm the destructive action of wiping the contents of the virtual drive that's been created.
  13. Enter your name, username and user password for logging into the machine.
  14. Skip upgrade to 'ubuntu pro' (the default).
  15. Don't install the openSSH server for now (the default).
  16. Don't install any server snaps (the default).
  17. The installation will now start and takes 5-10 minutes! Wait a bit!
  18. Eventually "Reboot Now" will appear at the bottom. Hit enter
  19. ...This reboot will fail however so after 30 seconds of black screen you should manually close the VM's window, unmount the installer ISO, and start the VM again to boot into your new installation.

Post-install: Installing Ubuntu Desktop

After booting into your Linux setup, you will not have a graphical environment.

To upgrade to the full Ubuntu Desktop, log in and run:

sudo apt update
sudo apt install ubuntu-desktop

When the purple screen titled "Daemons using outdated libraries" pops up just tab to 'ok'.

Once it finishes, run:

sudo apt upgrade
sudo reboot

You should now reboot into a full graphical Linux setup!

Post-install: Graphical Setup Wizard

Finally, click through the graphical startup wizard:

  • Ubuntu Pro: "skip for now"
  • Help Improve Ubuntu: "No, don't send system info"
  • Privacy: Leave disabled

Done!

Enjoy your new VM!

If you like, you can head over to the Post Installation guides to find some additional tips for software/configuration but be advised that not all of that content will be relevant to your Mac / UTM-based setup!


Here are a few other odds and ends:

IDEs

  • You can install VS-Code from the snap store with sudo snap install codium --classic
  • You can install Eclipse from their offcial installer for aarch64 which is found on their website.

Troubleshooting

Follow the guide here

Expanding your UTM VM's storage

If you want to expand your VM's storage after installation and don't want to re-install from scratch, you can use this process to expand your disk. However it is a bit of a pain so ideally you get this right the first time!

Ubuntu 20 uses the LVM system for managing disks, volumes and partitions; while this system is a bit complicated, it does make this sort of operation fairly straightforward. For more information about LVM and resizing, see this guide.

NOTE: This process works but can be quite error prone; PLEASE PLEASE PLEASE make a backup as explained in step 4!

  1. Setup / Information gathering

    • Start your VM, run a shell and run lsblk /dev/vda
      NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      vda                       252:0    0   20G  0 disk 
      ├─vda1                    252:1    0  512M  0 part /boot/efi
      ├─vda2                    252:2    0    1G  0 part /boot
      └─vda3                    252:3    0 18.5G  0 part 
        └─ubuntu--vg-ubuntu--lv 253:0    0 18.5G  0 lvm  /
      
    • There are three important parts of this output:
      • The 2nd line (vda) is the size of the 'virtual' disk.
        • It is 20GB, the size of the virtual disk from when the VM was initially set up.
      • The 5th line (vda3) is the size of the LVM VG or Volume Group
        • It is 18.5G, most of the 20GB disk.
      • The 6th line (ubuntu--vg-ubunut--lv) is the size of the LVM LG or Logical Volume.
        • It occupies the full 18.5GB of the VG.
    • We're going to need to resize all three one after another before we can expand our filesystem to take advantage of the space.
    • Now power down your VM; This is very important!
  2. Install qemu on your Mac

    • Under the hood, UTM is a nice GUI around the open source qemu emulator/virtualizer.
    • On your Mac, install the homebrew package manager.
    • Using homebrew, install the qemu tools suite with brew install qemu
  3. Find your VM's data:

    • Right-click on your vm in the UTM sidebar and click Show in Finder
    • Quit UTM
    • In the finder window that pops up, find <VM NAME>.utm. This 'file' is really a bundle.
    • Right-click the file and select "Show Package Contents" to go inside the bundle.
  4. Make a backup

    • Within the images directory, you'll see a qcow2 file that is your VM's virtual hard disk.
    • IMPORTANT: Make a duplicate (backup) of this file now in case the disk expansion fails.
    • If your VM stops booting at any point, simply quit UTM, and replace your qcow2 disk image with a copy of the backup you just made.
  5. Resize Part 1: Expand the disk

    • On your Mac, open terminal and run qemu-img resize $PATH +$SIZE where:
      • $PATH is the path to the qcow2 image
      • $SIZE is the amount to add eg 20G
      • Don't forget the plus sign!
    • For example, this will add 10GB to the size of my disk:
      • qemu-img resize disk-0.qcow2 +10G
    • Note that this won't change the size of the qcow2 file from macOS' perspective.
    • You're now done on the Mac; all subsquent commands should be run in the VM.
    • Relaunch UTM, boot up your VM, open a shell and rerun lsblk /dev/vda:
      NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      vda                       252:0    0   30G  0 disk 
      ├─vda1                    252:1    0  512M  0 part /boot/efi
      ├─vda2                    252:2    0    1G  0 part /boot
      └─vda3                    252:3    0 18.5G  0 part 
        └─ubuntu--vg-ubuntu--lv 253:0    0 18.5G  0 lvm  /
      
    • This should confirm the larger size of the vda disk (20GB --> 30GB); however our vda3 VG and our LV have not changed in size.
  6. Resize Part 2: Expand the Volume Group

    • Install gparted with sudo apt-get install gparted.
    • Run gparted with sudo gparted.
    • You should get a popup message "Not all of the space available to /dev/vda..."
      • Click "fix".
    • Note the grey box of unallocated space to the far right of the disk visualization.
    • Next, select the /dev/vda3 partition in the list, right click it and select "Resize/Move"
    • In the popup, slide the right edge of the graphical bar at the top all the way to the right to expand the partition to use that space and hit "Resize".
      • There may be a small amount of unallocated space left after this; don't worry!
    • Hit the green checkmark icon to apply the changes; in the popup, click apply to confirm.
    • After this completes, rerun lsblk /dev/vda:
      NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      vda                       252:0    0   30G  0 disk 
      ├─vda1                    252:1    0  512M  0 part /boot/efi
      ├─vda2                    252:2    0    1G  0 part /boot
      └─vda3                    252:3    0 28.5G  0 part 
        └─ubuntu--vg-ubuntu--lv 253:0    0 18.5G  0 lvm  /
      
    • Now we can see that the vda3 partition has been expanded however our Logical Volume is still 18.5GB.
  7. Resize Part 3: Expand the Logical Volume

    • We now can grow our logical volume (LV) to fill the full volume group
    • This should be as simple as sudo lvextend -L+10G /dev/ubuntu-vg/ubuntu-lv
      • Note that the size (eg: the 10G on the line above) must match the size you expanded your disk image by in step 5.
    • Confirm the resize:
      NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      vda                       252:0    0   30G  0 disk 
      ├─vda1                    252:1    0  512M  0 part /boot/efi
      ├─vda2                    252:2    0    1G  0 part /boot
      └─vda3                    252:3    0 28.5G  0 part 
        └─ubuntu--vg-ubuntu--lv 253:0    0 28.5G  0 lvm  /
      
    • Looking good!
  8. Resize Part 4: Expand the filesystem

    • The final step -- now that we've created extra space in our logical volume, we need to expand our filesystem to use that space.
    • Run df -h to get information on how much space is available for each filesystem.
    • For the default ext4 fs, the resize2fs command allows you to expand the allocation:
      • sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
    • re-run df -h to confirm the new space; hopefully the filesystem has grown!
  9. Reboot, for good measure!

    • Does the VM boot?
    • Confirm everything (lsblk /dev/vda, df -h) look good.

Post installation

Things you might want to do after installing Linux, common software choices, etc.

Adjusting your default boot order

Now you've installed Linux you might find that it boots straight into Windows without giving you a chance to select Linux. If this is the case, read on. Otherwise skip this section.

If you've dualbooted you'll now have two possible partitions to boot into at startup: Windows or Linux, as well as USB etc.

Importantly: if the BIOS boots into Windows it'll startup Windows straight away, but if you set it to boot to Linux it will actually go to GRUB from which you can select your OS.

So restart your device, press the key to enter BIOS and go back to the "Boot Order" menu. Move Linux to the top and Windows to second place. You can safely remove the installation media now. The order should now look something like this:

BIOS boot order

Then when it boots from now you will end up in a menu such as:

GRUB boot selection

See how you can now choose between Linux and Windows every time you boot.

Bitlocker

If you disabled Bitlocker earlier, you probably want to re-secure your Windows install by re-enabling Bitlocker. Visit the Bitlocker page again and follow the instructions to enable. Again, encrypting the drive is likely to take a while.

Nvidia drivers

Nvidia drivers may be needed to gain full performance, or screen resolution, on machines with Nvidia GPUs.

Open the "Additional Drivers" application, and then install the Nvidia driver.

Secure boot and laptop considerations

Reboot your machine after the installation. If your drivers do not load, you may need to review your secure boot key enrolment (or disable secure boot).

Laptop users: please note that the Nvidia GPU will be on all the time, thus, battery life may be affected. There is a tool to turn off the GPU when not needed (Optimus technology), called "Bumblebee", but the setup is not user friendly. Feel free to experiment with it, but things may break!

Firewalling

Linux doesn't come with any preinstalled firewalls, this means devices on a shared network might be able to access any webservers you accidentally leave running, as well as SSH. SSH is probably the one listening service that will run by default on a Linux server and if you have poor passwords this is a risk. Note that desktop Linux installs generally do not run an SSH server out of the box.

So it's a good idea to install a super simple firewall that just stops anything connecting to your machine, don't worry it won't stop outgoing connections, just incoming attempts.

Follow the short UFW guide to get this set up.

Customise GRUB (Advanced)

For a personal touch, you can customise the bootloader you see for choosing the OS.

Gnome-look.org has a lot of nice themes. Don't ask us how to do this, you'll have to learn it on your own! We're just giving you ideas. Google is your friend :-)

Fallout theme GRUB Fallout theme

Plasma Dark theme GRUB Fallout theme

Updating

You should keep your system up-to-date, and try and run updates every so often. Updates aren't as naggy as in Windows, so you may find yourself needing to remember to install them.

Notice: Make sure to be connected to an active internet connection, and *prepare for the command to take a while to finish executing.

sudo apt update && sudo apt upgrade

Installing software

sudo apt install <package>

Note: you may see both apt and apt-get around. apt is the new form *of apt-get and should be preferred in general (though not for scripts).

Change your default shell

Lots of us tend to prefer zsh over bash. It's faster, more customizable, and usually has fewer pain points.

To install it:

sudo apt install zsh

Then:

chsh -s /bin/zsh

Theming

One of the best things about using Linux is the awesome levels of customisability!

How you customize the look and feel depends on what desktop environment you've chosen, for Ubuntu, it's most likely GNOME.

Check out the settings menus in both!

GNOME

For GNOME, you can install GNOME Tweak Tool to be able to change themes:

sudo apt install gnome-tweak-tool

Useful packages

  • Chromium Web Browser - Chromium is an open-source web browser.
  • Java Development Kit (JDK) - Java is a is a general-purpose programming language that is taught in first year Computer Science at UoB.
  • Neofetch - Neofetch is a command that lists information about your Linux distribution and the machine you are running on.

UFW

UFW means Uncomplicated FireWall and don't worry, it is uncomplicated. With UFW you simply describe firewall rules in the simplest possible way and it applies them, permanently. By default it applies to all protocols and interfaces, you can be more specific but the default is the safest, this means it protects you via wifi, ethernet and over VPNs (it doesn't affect the local interface however).

Installation

sudo apt install ufw

Checking the status

To see what firewall rules you have running run the command:

sudo ufw status verbose

It will tell you it's inactive for now.

To permanently activate the firewall run:

sudo ufw enable

Check the status again and it should be running.

Basic "Deny all" Rule

The simplest security model here is simply to deny every incoming connection attempt. Unless you have a very good reason for why you / someone else needs to be able to connect to your laptop remotely over a local network this will be fine.

So all we're going to do is write a single rule that sets the default to do this:

sudo ufw default deny incoming

Now any connection attempts to your ports will be rejected.

Adding exceptions

In special circumstances you might want to allow specific services to be reached throught the firewall, for example maybe you want someone to test a server running on your laptop.

Here you simply add a rule on top of the default that says "allow connections for this port number", and now you've got a nice precise hole in your firewall.

So to do this you can run the command:

sudo ufw allow in <PORT NUMBER>/tcp

You can switch TCP for UDP if that's what you need.

It's good practice to disable tis after you stop needing it, in case in the future you run something less secure on the same port and forget to reenable the firewall.

To do this you can simply run the same command as above but with the delete keyword after ufw: this will tell UFW to delete the rule described.

sudo ufw delete allow in <PORT NUMBER>/tcp

Finally and Further Reading

Now you're good to go! Remember to check the status after each new rule just to check that it did what you want.

This is a good guide to UFW: it goes over many of the same steps but some others as well if you're interested: DigitalOcean UFW Guide

And remember man ufw is your friend and will help you out with how to write complicated commands.

Chromium

Chromium is an open-source web browser.

Installation

sudo apt install chromium-browser

Running

You can either run Chromium by searching it in the applications menu (by pressing the Super (Windows) key and typing Chromium), or by running the following command:

chromium

Removal

sudo apt remove chromium-browser

Connecting to Eduroam

This guide will help you get the eduroam connection working. It assumes you are using NetworkManager for handing your network connections (which if you've been following our install guides, should be true).

GUI Setup

Both GNOME and KDE will allow you to set up eduroam entirely with the built in network management GUI

You need to configure the following in the security tab of the network manager

  • Enable 802.1x security
  • Set the authentication mode to PEAP (Protected EAP)
  • When prompted for the CA certificate, it is located at /etc/ssl/certs/Comodo_AAA_Services_root.pem
    • You may need to click on "Other Locations" or "Root" to see the etc folder
  • Set the inner authentication to MSCHAPv2
  • If requested, set the domain to bham.ac.uk (the option to set the domain may not exist, ignore this step if it's not there)
  • Set the username to [student username]@student.bham.ac.uk, for example ABC123@student.bham.ac.uk
  • Set the password to your UoB account password
  • Leave the anonymous identity blank

A completed setup may look something like this

Eduroam

CLI setup

If for some reason you do not want to use the network setup GUI, you may also do it manually from the command line. However, NetworkManager is quite complex and generally the setup GUI is a more reliable way to add a new network.

You will only need wget as extra software. Install it:

sudo apt install wget

From the terminal:

Download the connection configuration:

wget https://linux.afnom.net/files/eduroam.nmconnection

You have to edit this file. Open it with gedit:

gedit eduroam.nmconnection &
  • Replace [computer user] (the whole thing, [] included!) with your username. You can find it out by running whoami in the terminal. where [computer user] is your username (like I explained above).
  • Replace [student username] with your UoB student username. They look something like abc123
  • Replace [UoB password] with your UoB account password.

Save and close the window.

Copy the file in the configurations directory of Network Manager (you must use sudo):

sudo cp eduroam.nmconnection /etc/NetworkManager/system-connections

Reload Network Manager:

sudo systemctl restart NetworkManager

You should now be able to see eduroam in your WiFi list and, when in range, connect to it.

Java Development Kit (JDK)

Java is a is a general-purpose programming language that is taught in first year Computer Science at UoB. The development kit is the package you need in order to compile and run Java applications.

Notice: Java and JavaScript are two very different languages - it has as much in common as a Car and a Carpet.

Installation

sudo apt install default-jdk

Running

In order to verify that Java has been installed correctly, run the following command.

java --version

This should produce the following (or similar) output if working correctly. ../images/java-version.png

Multiple Java Versions

The first year CS course at UoB requres submissions compatible with Java 11, and so recommend that this is what's used for assignments. In general though it is a good idea to have the latest version available. In this case it's useful to be able to manage multiple installed java versions on one PC. It may well be that the latest version of Java that comes with your distriubtion is Java 11 (as with Ubuntu 20.04), in which case you can ignore this section.

Assuming you've already installed the latest JDK as above, install JDK 11:

sudo apt install openjdk-11-jdk

Once the new version is installed, you will be able to see all installed versions like this:

update-alternatives --list java

And switch between them like this:

sudo update-alternatives --config java

Removal

sudo apt remove default-jdk

Installing Eclipse

You may want to install Eclipse, the IDE recommended by the School. The easiest way to do this, is to install it through snap.

To install Eclipse:

sudo snap install eclipse --classic

After Eclipse is installed, you might want to check for updates. From Eclipse, go to Help -> Check for updates. Select the updates you want to do, click Next, confirm, agree with the Terms and Conditions and click Finish.

You may want to install other software/plugins. Can do this from Help -> Install New Software. Select the URL corresponding to the Eclipse version you have and the list will get populated with possible software you may want to install.

Eclipse Software

Eclipse on Apple Silicon Linux

This works but must be done via the offcial downloader here.

Neofetch

Neofetch is a command that lists information about your Linux distribution and the machine you are running on, it also provides an ASCII art that differs based on the flavour of Linux you are running. An alternative command to neofetch is screenfetch, which you can install and run in exactly the same way, just replacing each instance of neofetch with screenfetch in the following commands.

Installation

sudo apt install neofetch

Running

In order to run Neofetch simply execute the command via the terminal.

neofetch

Here are some example outputs, the messages will differ based on the version of Linux installed and your system's specifications. ../images/neofetch-arch.png ../images/neofetch-ubuntu.png

Uninstallation

sudo apt remove neofetch

Troubleshooting

For technical questions about Linux and support after install, join the #tech-support channel in the CSS Discord and/or the AFNOM Discord.

Note that these discord servers are only available to current UoB CS students.

Learning

Now that you've gotten setup with Linux, you might want to learn a bit more about the system you're using and customize it a bit!

Special shoutout to UoB's "Missing Semester" which is a series of courses we're running starting this year (2023) which will cover a lot of this material! Please register and join us!

Shell

One of the most powerful tools to get to grips with is the Linux shell. With the shell you can easily and powerfully perform many operations that are really difficult in a graphical interface. It's quite easy to get the hang of quickly, but you'll find that as long as you make an attempt to use it regularly, you'll continue to pick up skills.

Here are a few places to get started:

If you like interactive tutorials a bit more, then try out:

  • Learn Shell
    • Standard interactive tutorial to introduce you to Bash
    • Very similar in style to tutorials on programming languages
  • Linux Survival
    • Linux command line taught as a visit to the Zoo :)

Practice

If you do some reading, you might find you might want to do some practice!

Here's a few sites you can try out:

  • OverTheWire - Bandit
    • One of the best wargames out there to practice learning the shell
    • Comes at it from a hacking point of view 🎉
  • Commandline Challenge
    • Quiz-style game to test your knowledge of interactice shell usage
    • Also has a really fun variant where all the programs on the system have been removed, and you have to try to perform basic operations.

However, one of the best ways to properly learn bash, is to just use it regularly. Instead of opening up a graphical UI, try and learn how to do things in the terminal. If you recognize yourself doing something repetitive, notice, and try and automate it. Read other people's shell scripts. Customize your prompt. Write your own shell even!

Essentially, just practice!

"Ricing"

There's an awesome community on /r/unixporn that is dedicated to building beautiful Linux desktops (which they call "ricing").

It's a really neat way to learn more about how to build and install lots of different pieces of software, learn some configuration, as well as discover more about display servers.

Here's some common terminology:

  • Desktop Environment
    • A full and complete set of tools that make up "a desktop"
    • Usually includes a window manager, common applications, integrated settings manager, etc.
    • The big ones are GNOME and KDE
  • Display server
    • Piece of software to display windows onto a screen
    • Two choices, the older (and more reliable) X11, and the newer Wayland
  • Window manager
    • Manages windows, layouts, etc
    • Can be grouped into:
      • Stacking, windows are stacked on top of each other, very traditional
      • Tiling, windows are tiled around each other, very flexible
      • Dynamic, a bit of both!
    • Some window managers also include a compositor!
  • Compositor
    • Provide fancy effects
    • Fix common issues like vsync/tearing problems
    • Only really applicable to X11
  • Graphics toolkit
    • Provides widgets, buttons, inputs
    • Two main choices (but others exist), GTK or QT