So, I recently broke my computer by spilling tea unto it, so I needed a new computer, and found the Lenovo Yoga 710, which is pretty lightweight and yet strong. As the resources on installing Linux (ArchLinux specifically) on this machine are barely existing, I thought I had to make this post, explaining various critical thing about the installation.
Bear in mind that all this is made from notes and what I recall from when I installed it (yesterday), so there might be minor inaccuracies.
The goal is to get started with a system, which is fully encrypted, supports wifi, sounds and is usable in general.
There might be things, which I will not cover. In that case, the ArchLinux wiki is your friend.
Creating the Arch USB flash media
Booting to the flash media
You will likely initially have Windows installed on the machine. Due to fastboot, you must do some special steps to close it. In particular, you need to hold down shift while clicking "shutdown".
Before we boot to our flash, you must enable legacy booting. This is done by entering the UEFI menu, by holding down F2 while you start the computer. An interface should appear, navigate to the tab that says something like "Boot". Then enable all the options with "legacy booting" or "legacy USB" or similar.
Now, you can save the settings and restart the computer with the USB flash in it. While you start the computer, hold down F12, which will cause a menu of bootable devices to show up.
Hopefully, the flash drive should appear. Select this, and you should start up.
Getting internet connection
To get any further, you need to connect to the internet. You can either use Ethernet cable (assuming you have an adapter, as the machine in question has no ethernet port) or use Wifi, as I explain below.
wifi-menu and you should get a TUI-like interface allowing you to
choose your network. This should etablish connection to the internet.
To test the internet connection, do
Setting up the partitions
Now, we want to set up the disk, which we will install ArchLinux on. This disk must first be properly partitioned for the usage.
I will assume your disk is
/dev/sda for now. If not, substitute this with the
disk, you want to install Arch on (if you don't know which disk, try to run
fdisk -l and see if that solves your question).
To create the partitions, we use the cgdisk utility:
This should give you a TUI. Delete all the existing partitions, and create the following:
- 128 MB¹ partition named "EFI" with type "EFI partition" (hex code
- 256 MB partition named "boot" with default type (just press enter when it asks for type).
- The rest (press enter to fill out the rest) forming a partition named "fs" with default type (again, just press enter).
The utility will probably ask for where to start and end. Just press enter and let it fill out the values.
Don't be freaked out if the highest row contains some small space, that you can't use. This space is usually reserved, and we won't touch it.
Now click "Write" to write the new partition table to the disk.
¹Note that the utility takes units, so you don't need to calculate the number of sectors yourself.
Setting up the file system
Now, we want to initialize the file system of the two first partitions (important: do not touch the last partition yet!):
mkfs.vfat -F32 /dev/sda1 mkfs.ext2 /dev/sda2
Don't change the FS types. These are for the bootloader and thus only support a limited collections of file systems.
Next, we want to set up our main partition (
/dev/sda3), which is going to be
encrypted at block-level:
cryptsetup -c aes-xts-plain64 -y --use-random luksFormat /dev/sda3
This will prompt you for a password, which you will have to remember. Use a strong password.
Next, we want to mount this partition:
cryptsetup luksOpen /dev/sda3 luks
Now that we have this going, we are going to set up some logical/virtual volumes within this physical partition:
pvcreate /dev/mapper/luks vgcreate vg0 /dev/mapper/luks # This is the swap partition, change the size (8G) if necessary. lvcreate --size 8G vg0 --name swap # This is the rest of the disk, which will be used to store the root of the filesystem. lvcreate -l +100%FREE vg0 --name root
We will now set up the swap logical volume:
Now we can create the filesystem. I choose btrfs because it's the best the Linux kernel has IMO:
Bootstrapping the system
Now, first we want to mount it to
/mnt, which we can do like this:
mount /dev/mapper/vg0-root /mnt mkdir /mnt/boot mount /dev/sda2 /mnt/boot mkdir /mnt/boot/efi mount /dev/sda1 /mnt/boot/efi
Next, we will install ArchLinux on the disk!
pacstrap /mnt base base-devel efibootmgr grub-efi-x86_64
The disk should have Arch now, but it can't boot yet. First, let's chroot into it:
Set the locale:
echo LANGUAGE=en_US >> /etc/locale.conf echo LANG=en_US.UTF-8 >> /etc/locale.conf echo LC_ALL=C >> /etc/locale.conf
Set the hw clock:
rm /etc/localtime ln -s /usr/share/zoneinfo/America/Chicago /etc/localtime hwclock --systohc --utc
Set the root password:
Creating your user
Next, you probably want to create a user:
useradd -m -g users -G wheel YOUR_USERNAME_HERE
-G wheel ensures that you can do
Next, set the password for this user:
Configuring the kernel
/etc/mkinitcpio.conf in your editor of choice.
lvm2 to the
HOOKS line, but BEFORE
filesystems, so it looks something like this:
HOOKS="base udev autodetect modconf block encrypt lvm2 filesystems keyboard fsck"
Enable nouveau and btrfs
nouveau is the open-source NVIDIA driver, which I found to work better than
btrfs is needed because of our file system.
MODULES so the line reads:
Generate the initial ramdisk image
mkinitcpio -p linux
Setting up a bootloader
We'll choose GRUB as our bootloader.
First, install it:
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id="Red Hat Enterprise Linux" --recheck --debug
Note that the "Red Hat Enterprise Linux" is necessary on the hardware, we use, due to some weird whitelist of bootloader IDs.
This step is important. Without this, you won't be able to boot.
Since there are issues with ACPI IRQs on our computer, we will disable those.
that the line looks something like
GRUB_CMDLINE_LINUX_DEFAULT="acpi=noirq quiet splash"
Next, we want to tell the initial Linux kernel that our disk is encrypted. We
can do so by adding
cryptdevice=/dev/sda3:luks:allow-discards in the
GRUB_CMDLINE_LINUX variable, so it looks something like this:
Finally, we can generate the config:
grub-mkconfig -o /boot/grub/grub.cfg
You need to be careful not to destroy anything here, as the initial unmounting can contain all sorts of weird operations setting up stuff etc., so do:
exit cd umount -R /mnt swapoff -a reboot
You should now boot up to an ArchLinux system.
Again, unless you have Ethernet, use
Disableing the beep sound
First, disable to module
Then blacklist the module, so you won't have to repeat on reboot:
echo "blacklist pcspkr" > /etc/modprobe.d/nobeep.conf
I tried a bunch of things, but found that installing
pulseaudio and co. worked the best:
pacman -S pulseaudio pulseaudio-jack pulseaudio-alsa
Audio should now work.
Power management and CPU frequency scaling
TLP is a deamon that manages battery and power for you. It's pretty simple and works very well:
pacman -S tlp
To avoid having the machine getting too hot, we install
thermald, which will
control the fans based on the CPU usage:
pacman -S thermald systemctl start thermald
Setting up Xorg
Next, we want to set up Xorg, which can be done by simply:
pacman -S xorg-server xorg-apps xorg-xinit
Next, install the window manager or desktop environment of your choice. I personally like i3, but pick what you want.
I recommend installing a display manager, like
pacman -S slim
In order to get QT to use GTK's style, add this to your
pacman -S xf86-input-synaptics
It can be a little bothersome, because the touchpad is super sensitive and will sometimes click when writing. Therefore, go to
/etc/X11/xorg.conf.d/70-synaptics.conf and set:
Option "FingerLow" "50" Option "FingerHigh" "70"
If you dislike this driver, try
Basic desktop necessities
We need a tray icon for battery, network, and volume. We also want to be able to control the volume through the respective keys. For this, install these utilities:
pacman -S volumeicon networkmanager network-manager-applet cbatticon
Make these run when you start your desktop environment or window manager.
Fixing the font size
For unknown reasons, the fonts seem to be screwed up, but adjusting the DPI doesn't work. If you find a good solution, please leave a comment, but until then, I found a working, but ugly solution (visually it looks just like).
First, go to
.Xresources and set:
Then adjust the cursor size to something like this:
~/.config/gtk-3.0/settings.ini, and set the font like this:
gtk-font-name="DejaVu Sans 13"
(if you haven't already, install
Although most GTK applications should work fine now, Firefox is still kinda
messy with super small UI. I found that going to
about:config and setting
1.5 fixed this.
If you use Thunderbird, repeat the instructions for Firefox. You can find
Preferences -> Advanced -> Config Editor.
If you think the font in websites looks small in Firefox, go to
Content and adjust the size to what you like.
For security, you might want to install a firewall. I recommend
ufw, which is
simple and nice. Simply do:
pacman -S ufw ufw enable
And it should work. Refer to the UFW docs to information on adding rules etc. if necessary.
snapper like this:
pacman -S snapper snapper -c root create-config /
Then set up the systemd timer to take snapshots hourly (not necessary if you have a cron deamon):
sudo systemctl start snapper-timeline.timer
You can uninstall
wifi-menu if you want to.
and hopefully you computer won't explode.
I ran into one problem, which took me a while to fix. When I booted, it kept
saying something like
a start job started by dev-disk-by.... I ended up
fixing it by booting to the USB stick and doing:
# Mount the disk cryptsetup luksOpen /dev/sda3 luks mount /dev/mapper/vg0-root /mnt mkdir /mnt/boot mount /dev/sda2 /mnt/boot mkdir /mnt/boot/efi mount /dev/sda1 /mnt/boot/efi # Install necessary utilities pacman -S efibootmgr # Reconstruct initrd pacman -S linux mkinitcpio -p linux # Reinstall GRUB grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id="Red Hat Enterprise Linux" --recheck --debug grub-mkconfig -o /boot/grub/grub.cfg # Remake the swap mkswap /dev/mapper/vg0-swap # Cleanup pacman -Rncs efibootmgr
If you get problems with booting, run the above lines in
bash and try to
Things I haven't figured out
- Touchscreen. No idea on how to get it working, but I haven't tried much either, since I don't really use it.
The authors of the ArchLinux wiki deserves a huge "thank you". That wiki is an absolutely amazing resource, for not only ArchLinux but Linux in general.
Follow me on Twitter or Github.