Skip to content

Instantly share code, notes, and snippets.

@timlinux
Last active April 10, 2024 19:28
Show Gist options
  • Star 26 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save timlinux/dfcc773be7db435a8a79b8253de69b1b to your computer and use it in GitHub Desktop.
Save timlinux/dfcc773be7db435a8a79b8253de69b1b to your computer and use it in GitHub Desktop.
Linux on Lenovo Thinkpad P14s with AMD Processor

Thinkpad P14s AMD Edition Review (Running Fedora)

These are my installation etc. notes for running Linux on my new Thinkpad P14s laptop with 32GB RAM, 1TB SDD and 8 Core, 16 Thread AMD CPU.

Detailed specs

Here is what they quoted as the specs after I confirmed my order:

Processor  -  Processador AMD Ryzen 7 Pro 4750U (1,70 GHz, aumento máximo até 4,10 GHz, 8 núcleos, 8 MB de cache)
Operating System  -  Sem sistema operacional
Operating System Language  -  Sem idioma do sistema operacional
Onboard Memory  -  DDR4 de 16 GB 3.200 MHz integrado
Selectable Memory  -  SoDIMM de 16 GB DDR4 3.200 MHz
Total Memory  -  DDR4 de 32 GB (16 GB integrado + 16 GB SoDIMM) 3.200 MHz
Solid State Drive  -  Unidade de estado sólido de 1 TB, M.2 2280, PCIe Gen3x4/Gen4x4 NVMe, OPAL 2, TLC
Display  -  FHD de 14,0 pol. (1.920 x 1.080), IPS, antirreflexo, 400 nits, sem toque, estreito, 72% NTSC, baixo consumo de energia
Graphic Card  -  Placa gráfica integrada
Camera  -  Câmera HD IR e 720p com microfone
Pointing Device  -  Impressão digital
Keyboard  -  Teclado retroiluminado preto – Português
Wireless  -  Intel Wi-Fi 6 AX200 2x2 AX, Bluetooth versão 5.0
WWAN Selection  -  WWAN
Integrated Mobile Broadband  -  WWAN sem cartão com antena
TPM Setting  -  Habilitado para TPM2.0 discreta
Absolute BIOS Selection  -  BIOS Absolute ativado
Battery  -  Bateria interna de polímero de lítio com 3 células, 50 Wh
Power Cord  -  Adaptador de energia CA de 45 W PCC (3 pinos) – UE (USB Tipo C)
Display Panel  -  FHD de 14,0 pol. (1.920 x 1.080), IPS, antirreflexo, 400 nits, sem toque, estreito, 72% NTSC, baixo consumo de energia, câmera IR, microfone, WWAN, FreeSync
Language Pack  -  Publicação – Português/Inglês
Warranty  -  3 anos de serviço de transportadora/transporteÀ

Or from NeoFetch:


 timlinux  crest  ~/Downloads  neofetch
          /:-------------:\          timlinux@crest 
       :-------------------::        -------------- 
     :-----------/shhOHbmp---:\      OS: Fedora release 34 (Thirty Four) x86_64 
   /-----------omMMMNNNMMD  ---:     Host: 20Y1CTO1WW ThinkPad P14s Gen 1 
  :-----------sMMMMNMNMP.    ---:    Kernel: 5.12.8-300.fc34.x86_64 
 :-----------:MMMdP-------    ---\   Uptime: 17 hours, 3 mins 
,------------:MMMd--------    ---:   Packages: 2331 (rpm), 26 (flatpak) 
:------------:MMMd-------    .---:   Shell: bash 5.1.0 
:----    oNMMMMMMMMMNho     .----:   Resolution: 1920x1080 
:--     .+shhhMMMmhhy++   .------/   DE: GNOME 40.1 
:-    -------:MMMd--------------:    WM: Mutter 
:-   --------/MMMd-------------;     WM Theme: Adwaita 
:-    ------/hMMMy------------:      Theme: Adwaita [GTK2/3] 
:-- :dMNdhhdNMMNo------------;       Icons: Adwaita [GTK2/3] 
:---:sdNMMMMNds:------------:        Terminal: gnome-terminal 
:------:://:-------------::          CPU: AMD Ryzen 7 PRO 4750U with Radeon Graphics (16) @ 1.700GHz 
:---------------------://            GPU: AMD ATI 07:00.0 Renoir 
                                     Memory: 6576MiB / 31386MiB 

Distro

When I bought the laptop, Fedora 34 was in Beta and I decided to be adventurous and run the beta on my new laptop.

Partitioning

First install

When I set up the machine I opted for a manual partition layout with BTRFS because in previous installs of Fedora I have had issues with how it splits up the disk causing me to run out of space for docker containers on the root partition.

[timlinux@fedora ~]$ sudo fdisk -l /dev/nvme0n1
Place your finger on the fingerprint reader
Disk /dev/nvme0n1: 953.87 GiB, 1024209543168 bytes, 2000409264 sectors
Disk model: SKHynix_HFS001TDE9X081N                 
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A963DEA0-3EB4-4C86-8E79-3E3BA669E8D2

Device              Start        End    Sectors   Size Type
/dev/nvme0n1p1       2048    1001471     999424   488M EFI System
/dev/nvme0n1p2    1001472    8812543    7811072   3.7G Linux filesystem
/dev/nvme0n1p3    8812544 1866190847 1857378304 885.7G Linux filesystem
/dev/nvme0n1p4 1866190848 2000408575  134217728    64G Linux swap

Initially I had actually set up only the first three partition since it has been so long since I had a Linux laptop that I forgot that you need swap for suspend / hibernation and I didn't plan on needing swap for when I am working on the machine given that I have a nice chunk of 32GB RAM.

After wondering why suspend and resume wasn't working I read about needing swap for suspend and resume with the recommendation being to have at least double your RAM for the swap partition size.

The gnome disks tool doesnt seem to support resizing, so I installed gparted (gui) and used that to resize the main partition, adding a 64ish GB partition at the end of the drive and enabling the swap by adding it to /etc/fstab and running swapon.

[timlinux@fedora ~]$ cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Tue Apr  6 10:43:59 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=f74f0a3e-367e-49c5-9b80-6da95503c074 /                       btrfs   subvol=root,compress=zstd:1 0 0
UUID=7c63c991-6018-4e4d-8c39-62f3f5de3810 /boot                   ext4    defaults        1 2
UUID=3137-CB2C          /boot/efi               vfat    umask=0077,shortname=winnt 0 2
/dev/nvme0n1p4 swap swap defaults 0 0

Second install

One issue with the above is that it didnt offer a full disk encryption, which is honestly an essential to do for a mobile device with lots of private info on it. This month (Jan 2022) I decided to forgo hibernate in favour of reformatting the drive and running btrfs inside of LUKS - and without a swap partition. Because of that you can find info below about hibernate, splash screens etc. that I don't actually use any more.

Grub Tweaks

Getting rid of the Lenovo logo during boot

I followed the advice on this page: https://hansdegoede.livejournal.com/20632.html

In particular, I edited my

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
# Tim added video clause below to get rid of Lenovo logo in the after grub menu grub bootup
GRUB_CMDLINE_LINUX="video=efifb:nobgrt rd.luks.uuid=luks-45646bdc-26c4-4135-adf0-94027a01dd07 rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

Then to save my changes, I did:

grub2-mkconfig -o /etc/grub2-efi.cfg

Grub tweaks (old notes, note used anymore)

After doing the above partition tweaking, hibernate and suspend still wasn't working so I added the following to my /etc/default/grub:

# resume and mem_sleep added by Tim
# Then I ran sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
GRUB_CMDLINE_LINUX="rhgb quiet resume=UUID=ddeb7e7f-2f53-43c3-a81c-3c93e4890049"

The UUID above is the swap disk partition. You can find out the UUID from the Gnome Disks tool.

I also found the LENOVO big red logo during boot very irritating (what happened to the nice grub themes from times gone by?). I know I have a Lenovo, I bought a Lenovo, there is no need to market to me during boot up. To address this I added this to my grub conf:

fbcon=nodefer video=efifb:nobgrt $vt_handoff

I also removed the quiet option so my final boot line looked like this:

GRUB_CMDLINE_LINUX="fbcon=nodefer video=efifb:nobgrt $vt_handoff rhgb resume=UUID=ddeb7e7f-2f53-43c3-a81c-3c93e4890049"

Splash screen tweaks based on:

Booting up I now get:

  • LENOVO logo
  • Grub Menu
  • Kernel boot messages with a row of tux penguin icons along the top
  • Lenovo logo again with fedora logo beneath and an animated throbber

Basically still a hot mess. What happened to those nice bootsplahes from times gone by...still something to figure out in the future....

The original line had just rhgb quiet as options. Then I ran sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg.

One last thing I did was to edit /etc/systemd/sleep.conf and set the following options before I rebooted:

[Sleep]
AllowSuspend=yes
AllowHibernation=yes
HibernateMode=shutdown

Suspend

Now suspend seems to work if I close the lid. Leaving the laptop unattended with the lid closed and a 100% battery when closing, it wakes up 6 hours later at 74% battery which is ok but not great.

I can verify suspend actually happens using this little script I found

[timlinux@fedora OpenSource-GIS-Stack]$ ./suspendtime.sh 
Journal file /var/log/journal/21151f1f3c5d41febf7d1382f98d3f68/user-1000@0005bfa5aac1207a-cba3ef42bc348ad3.journal~ is truncated, ignoring file.
17 10:04:42 to 17 10:05:11 lasting 29 seconds
17 10:05:11 to 17 10:05:46 lasting 35 seconds
17 10:06:12 to 17 10:06:12 lasting 0 seconds
17 10:08:24 to 17 10:32:55 lasting 1,471 seconds

Linux uptime 	2,956 seconds ( 49 minutes, 16 seconds)
4x Suspend 	1,535 seconds ( 25 minutes, 35 seconds)
Real uptime 	1,421 seconds ( 23 minutes, 41 seconds)


Note I also used gnome tweaks to enable the lid action to suspend so that the laptop automatically goes into suspend when I close the lid.

Also in the bios under power I set the profile from 'windows 10' to 'Linux'.

With all those options done, suspend seems to work pretty well.

Hibernate

When I programme the power button to hibernate it seems to reset the device rather than hibernate - still investigating that

After further googling I followed the steps in this article

https://www.ctrl.blog/entry/fedora-hibernate.html

Initially this was not working for me, but I carefully refollowed the steps in the above article and now

One thing to make sure you don't miss is the step to recreate your initramfs using:

dracut -f 

After doing that (and the other steps laid out in the article above), I am able to successfully hibernate my machine by doing:

systemctl hibernate

The first time I used hibernate I was usure what the expected bahaviour on boot would be so let me also say: When hibernation is enabled, booting from hibernation mode will still present you with the grub boot selector. Selecting the same kernel as you normally boot from will then boot you to the lock screen, from where you can log in and you should find all your previously running apps open and ready for action.

Battery Management

There seem to be two main options out there:

  • TLP
  • auto-cpufreq

You can use them both together. In installed TLP but later removed it because it seems to throw lots of SELinux errors and seemed pretty complicated. I wil keep my notes below but I hope at some point to return to it at some point since I believe it can somewhat improve the number of years of useful life I can get out of the battery.

TLP

I installed TLP which is an open source battery tuning app:

dnf install tlp tlp-rdw

You can see the status of your battery like this:

upower -i /org/freedesktop/UPower/devices/battery_BAT0
  native-path:          BAT0
  vendor:               LGC
  model:                5B10W139
  serial:               4317
  power supply:         yes
  updated:              ter 22 mar 2022 21:16:38 (108 seconds ago)
  has history:          yes
  has statistics:       yes
  battery
    present:             yes
    rechargeable:        yes
    state:               discharging
    warning-level:       none
    energy:              46,58 Wh
    energy-empty:        0 Wh
    energy-full:         51,48 Wh
    energy-full-design:  50,5 Wh
    energy-rate:         8,074 W
    voltage:             12,46 V
    time to empty:       5,8 hours
    percentage:          90%
    capacity:            100%
    technology:          lithium-polymer
    icon-name:          'battery-full-symbolic'
  History (charge):
    1647983798	90,000	discharging
  History (rate):
    1647983798	8,074	discharging

Then I tried to set the charge threshold max to 80% and min to 30% using this:

https://linuxhint.com/keep-laptop-battery-healthy-when-using-linux/

But I had an error message like this:

[root@crest ~]# echo 80 > /sys/class/power_supply/BAT0/charge_stop_threshold
-bash: echo: write error: Invalid argument

Then I install TLPUI

git clone https://github.com/d4nj1/TLPUI.git
cd TLPUI
python3 -m tlpui

To get the charging status, I ran

timlinux  crest  ~  sudo tlp-stat -b
Place your right index finger on the fingerprint reader
--- TLP 1.4.0 --------------------------------------------

+++ Battery Care
Plugin: thinkpad
Supported features: charge thresholds
Driver usage:
* natacpi (thinkpad_acpi) = active (charge thresholds)
* tpacpi-bat (acpi_call)  = inactive (kernel module 'acpi_call' not installed)
Parameter value ranges:
* START_CHARGE_THRESH_BAT0/1:  0(off)..96(default)..99
* STOP_CHARGE_THRESH_BAT0/1:   1..100(default)

+++ ThinkPad Battery Status: BAT0 (Main / Internal)
/sys/class/power_supply/BAT0/manufacturer                   = LGC
/sys/class/power_supply/BAT0/model_name                     = 5B10W139
/sys/class/power_supply/BAT0/cycle_count                    =    181
/sys/class/power_supply/BAT0/energy_full_design             =  50500 [mWh]
/sys/class/power_supply/BAT0/energy_full                    =  51480 [mWh]
/sys/class/power_supply/BAT0/energy_now                     =  48640 [mWh]
/sys/class/power_supply/BAT0/power_now                      =   9372 [mW]
/sys/class/power_supply/BAT0/status                         = Charging

/sys/class/power_supply/BAT0/charge_control_start_threshold =     95 [%]
/sys/class/power_supply/BAT0/charge_control_end_threshold   =    100 [%]

Charge                                                      =   94.5 [%]
Capacity                                                    =  101.9 [%]

+++ Recommendations
* Install acpi_call kernel module for ThinkPad battery recalibration

I looked around for ways to reliably to install acpi_call but so far I havent been able to. I am as yet uncertain as to whether the battery thresholds work without it installed.

Old TLP Notes (don't use)

Running tlp-stat the first time shows this:

+++ Battery Features: Charge Thresholds and Recalibrate
natacpi    = active (data, thresholds)
tpacpi-bat = inactive (kernel module 'acpi_call' not installed)
tp-smapi   = inactive (ThinkPad not supported)

+++ ThinkPad Battery Status: BAT0
/sys/class/power_supply/BAT0/manufacturer                   = LGC
/sys/class/power_supply/BAT0/model_name                     = 5B10W139
/sys/class/power_supply/BAT0/cycle_count                    =     26
/sys/class/power_supply/BAT0/energy_full_design             =  50500 [mWh]
/sys/class/power_supply/BAT0/energy_full                    =  51480 [mWh]
/sys/class/power_supply/BAT0/energy_now                     =  45400 [mWh]
/sys/class/power_supply/BAT0/power_now                      =   4686 [mW]
/sys/class/power_supply/BAT0/status                         = Discharging

/sys/class/power_supply/BAT0/charge_start_threshold         =     95 [%]
/sys/class/power_supply/BAT0/charge_stop_threshold          =    100 [%]

Charge                                                      =   88.2 [%]
Capacity                                                    =  101.9 [%]

+++ Recommendations
* Install acpi_call kernel module for ThinkPad battery recalibration

Note the last line recommending the installation of the acpi_call kernel module. I struggled to find any way to install this on Fedora 34 so for now I have left it. I wanted to mention this great write up that has a detailed analysis on how to reduce boot times (second half ot the article):

https://austingwalters.com/increasing-battery-life-on-an-arch-linux-laptop-thinkpad-t14s/

The article was written against a T14s (as opposed to my P14s) and the author uses Arch Linux but I believe a lot of the suggestions apply and I will go through some of them to shave down my boot and restore times.

auto-cpufreq

https://github.com/AdnanHodzic/auto-cpufreq/#auto-cpufreq-installer

I did the manual install rather than using the snap since that seems to be the recommended route for using it on RedHat derived distros. After installing I set it to run in daemon mode:

sudo auto-cpufreq --install

It did some nice things like setting bluetooth off on boot etc. I guess you can configure that...

It leaves you with this parting message after install:

----------------- auto-cpufreq daemon installed and running -----------------

To view live stats, run:
auto-cpufreq --stats

To disable and remove auto-cpufreq daemon, run:
sudo auto-cpufreq --remove

-------------------------------------------------------------------------------

What works?

Everything! Suspend and hibernate took a bit more effort than I would of liked - though maybe it was something to do with my initial setup with no swap partition, or the fact that I started on a beta of fedora 34 and not everything was ironed out yet. But now I can really say it all 'just works!'. I will make a few other notes here:

Fingerprint Reader

The model I configured included the fingerprint reader. Under Gnome the fingerprint reader is straight forward to set up and it is really nice being able to use my fingerprint for sudo commands! One thing I will note is that, coming from a MacBook with a fingerprint reader, the Lenovo Fingerprint Reader is not as good at recognising my fingerprint. I suspect this is due to the fingerprint enrolment process: On a mac you need to collect many impressions of your fingerprint during enrolment, whereas on Gnome only 4 or so are required. This makes it likely that your impression may not match one of your enrolled impressions. To test my theory, I enrolled a bunch of 'fingers' using the same physical finger, effectively making many impressions for the same finger. Having done that, the fingerprint reader is much better at recongnising my finger.

Screen Hinge

The screen hinge looks very robust (good!) but also a little stiff. So no one handed lid opening. It sounds trivial, but coming from my MacBook where I used to open the lid with one hand all the time, I realised how useful it is to be able to open the lid with one hand, and I really miss this capability.

Webcam

I love the privacy shutter! The picture quality of the webcam is a bit 'meh' though but probably ok for a bit of occasional zooming.

Sound

The speakers fire downward. The sound is not particularly loud or rich but quite usable for watching the odd YouTube clip or Video Conference meeting.

Battery Life

I haven't exhsustively tested the battery, but I reckon I might be able to eek out a full day at the office with it if I am not pushing the computer too hard.

Screen

The screen is quite servicable for me, slightly matt and not prone to lots of distracting reflections. I haven't tried it out in sunlight yet...

The Keyboard

The keyboard is frikking wonderful. Coming off a MacBook, it is a definate upgrade. Key travel is great and it is a dream to type on.

Trackpad and pointer nipple

The trackpad is ok, though you have to press really hard to generate a physical click. Maybe I just need to get used to it.... MacBooks really are the gold standard here and this trackpad is not in the same league but getting more usable as I get used to it.

I am still trying to dial in the sensitivity of the pressure settings for the pointer nipple, so it is not my go-to pointer device yet, but I hope to figure that out because I used to love using the pointer nipple on my Thinkpads of days gone by.

Ethernet port

I love having a built in ethernet port on the laptop - one less dongle to carry about! Ethernet is absolutely plug & play, no issues.

SD card reader

This was something I didn't think I needed but turns out it is quite handy to pull imagery from my Mavic Mini 2 RPAS. SD card reader just works, no problem.

Docking port & Docking station

I haven't purchased a docking station yet, but I do plan to soon. I expect it will all just work too, but I will report back when I have tested it.

HDMI Port

There is a full size HDMI port on the laptop, which I have yet to test.

3D Acceleration

Look you didn't buy this laptop for mindblowing 3D graphics. I am using the stock kernel drivers. Maybe later I will install the AMD drivers for the onboard graphics, but I am not in too much of a rush.

Fans and Fan Noise

Under heavy loads the laptop gets a little warm underneath, but not unconfortable to use on your laptop. My experience of hte machine so far is that operation is silent or near silet. There is alarge fan vent on the right side of the case and you may occassionally feel warm air venting there, but again not at uncomfortable levels.

What is it like to use?

Really this laptop is an absolute pleasure. It is small and light with a lot of grunt for its size and price. I would say as a so called 'mid range' laptop, this 16 core wonder is a great developer maching - I love compiling QGIS with -j16 and watching the build fly along!

So nearly one month into owning this maching I am thrilled with my choice and hope to get many years of productive use from this machine.

Cost

You might be wondering what I paid for the laptop. When I bought it, Lenovo Portugal was offering a great discount on this machine - something like 15% if I recall. Here is my invoice:

lenovo

Additional Installation Notes

Automatic install of security updates

Equivalent of sudo apt install unattended-upgrades on Fedora:

sudo dnf install dnf-automatic

Fractional Scaling

I'm getting older and my eyes aren't so good any more, so I like all the UI elements to be a bit bigger than most. I enabled fractional scaling by using this command in terminal:

gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"

After restarting the computer, I could choose fractional scaling amounts in gnome settings for displays and set it to 125% and rebooted. When logging in again, the display was nicely scaled and I found it much more comfortable to use.

Further update on this: The scaling approach above works well for all cases except taking screenshots with Flameshot which is a bit of a deal breaker for me. A bit of reading around in the flameshot issue tracker found a workaround for the issue:

flameshot-org/flameshot#564 (comment)

So I turned off fractional scaling and rather used font scaling. Which works well for all applications except Only Office which still has dismally small icons....

Fan noise during video watching

I use the tips from here to reduce the fan noise during video playback.

Gnome Screen Recorder

It is very convenient to use the built in screen recorder in Gnome using the Ctl+Alt+Shift+R keyboard shortcut, but for unfathomable reasons, the maximum recording time is set to 30s max which is never going to be enough. I made it really long by doing:

gsettings set org.gnome.settings-daemon.plugins.media-keys max-screencast-length 14400

You dropped the ball on this one gnome!

Logitech Trackball

I have a 20 year old trackball which I like to use as an alternative to the built in mouse when I am at home. It is nice to have one of the buttons switch the mode of the ball to a scrollwheel. You can do this with the following as :

gsettings set org.gnome.desktop.peripherals.trackball scroll-wheel-emulation-button 8

Which sets the small left button to lock the wheel into scroll mode. The effect will be immediate, no need to restart your wayland session.

Note the button mappings for the device are:

  • 1 = big button left
  • 8 = small button left
  • 9 = small button right
  • 3 = big button right

Note if you are still using Xorg you can find detailed config options here:

https://wiki.archlinux.org/title/Logitech_Marble_Mouse#Assigning_buttons

Nextcloud client

I tried the flatpack and RPM packages for Nextcloud. The RPMs seem to work better:

crest$ rpm -qa | grep next
nextcloud-client-libs-3.2.2-2.fc34.x86_64
nextcloud-client-3.2.2-2.fc34.x86_64

The experience is still not great on Gnome - the sync app often does not run and it doesn't appear in the systray a lot of the time. One rememdy that seems to work is to install kde plasma, login to a plasma shell, run NC client, then log out and continue with Gnome. Then it seems to run stably, actually syncs properly and the tray icon doesnt disappear after starting.

sudo dnf install nextcloud-client

Syncthing install

The second two lines below will ensure synthing runs on login for the current user

sudo dnf install syncthing
systemctl --user enable syncthing.service
systemctl --user start syncthing.service

Docker Install

I removed podman and replaced with docker following this tutorial:

https://computingforgeeks.com/how-to-install-docker-on-fedora/

I had some problems after running upgrades that docker complains like this:

setting cgroup config for procHooks process caused: cannot fetch program from id: get program by id: permission denied: unknown

I followed the suggestions in this thread to downgrade to cgroups 1:

sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=0"

Then reboot.

DNF Tweaks

sudo vim /etc/dnf/dnf.conf

Then add these lines:

fastestmirror=True
max_parallel_downloads=10
defaultyes=True

Bash Prompt Theming

I really like the theme described here: https://www.youtube.com/watch?v=iaXQdyHRL8M

But there is a nicer project that provides that and more here:

https://github.com/andresgongora/synth-shell

image

Wireguard Install

I installed the wireguard VPN client using these instructions:

https://fedoramagazine.org/build-a-virtual-private-network-with-wireguard/

For the VPN server side, running on Ubuntu, I followed this process:

https://www.cyberciti.biz/faq/ubuntu-20-04-set-up-wireguard-vpn-server/

And from my iPhone I set up using the hints provided here to create a QR code:

https://grh.am/2018/wireguard-setup-guide-for-ios/

Lastly a nice Fedora focussed installation guide:

https://fedoramagazine.org/configure-wireguard-vpns-with-networkmanager/

PostgreSQL

The fedora wiki has an excellent guide on running a local install of postgresql, available here:

https://fedoraproject.org/wiki/PostgreSQL

It includes notes on logging etc. which is useful. One thing it omits is where the logs get written to if you enable logging following their guide. You can find the logs in e.g.:

sudo tail -f /var/lib/pgsql/data/log/postgresql-2021-09.log

Post install setup of software

Here is a complete log of all the software I install after setting up the laptop:

From Software Store:

Deja dup
Blender
Gimp
Audacity
color picker
draw.io
peek

Add flathub

flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

Element matrix client:

https://flathub.org/apps/details/im.riot.Riot

Add markets app for stock tracking

flatpak install flathub com.bitstower.Markets

Add telegram:

sudo flatpak install org.telegram

Add Gnome ExtensionManager:

sudo flatpak install ExtensionManager

Xournal (great for signing pdf's etc)

https://flathub.org/apps/details/com.github.xournalpp.xournalpp

From Websites:

https://www.google.com/chrome https://www.microsoft.com/en-us/edge

Pip3 packages

Installed as user:

pip3 install sphinx

From DNF:

sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install telegram flameshot wireguard-tools gnome-tweaks vim powerline-fonts qrencode zbar gnome-themes-extra clearlooks-compact-gnome-theme bluecurve-gnome-theme syncthing java-latest-openjdk keepassxc

zbar - qr code decoder (use in conjunction with qrencode)

After above use gnome tweaks to set icon theme to kora-grey-light-panel. For flameshot after installing, go to settings and make ctl-4 a shortcut to flameshot gui

Streaming fixes to reduce fan noise:

sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
sudo dnf groupupdate multimedia --setop="install_weak_deps=False" --exclude=PackageKit-gstreamer-plugin
sudo dnf groupupdate sound-and-video
sudo dnf install ffmpeg libva libva-utils

Now follow config steps described here to make firefox use these updates.

In about:config you have to set two parameters to true and restart firefox:

gfx.webrender.enabled = True
media.ffmpeg.vaapi.enabled = True

App images

Pool app is an app image launcher. You just download your app images to ~/Applications and run them from in the downloaded section of pool

flatpak install io.github.prateekmedia.appimagepool

Cyrpto portfolio manager:

https://rotki.com/

Trezor appimage:

https://suite.trezor.io/

Manual

Jstock (a java stock portfolio tracking app) See https://www.xmodulo.com/stock-portfolio-management-software-linux.html

cd ~/bin
wget https://github.com/yccheok/jstock/releases/download/release_1-0-7-13/jstock-1.0.7.13-bin.zip
unzip jstock-1.0.7.13-bin.zip
cd jstock
chmod +x jstock.sh
./jstock.sh

Install QGIS

sudo dnf copr enable dani/qgis
sudo dnf install qgis python3-qgis qgis-grass
sudo dnf install qgis-server python3-qgis

From Gnome Extensions:

https://extensions.gnome.org/local/

I run these extensions:

Dash to Panel - gives a windows style panel along the bottom of the screen
Clipboard Indicator - stores clipboard history
No overview at start-up - as the name implies ...

Other configuration tweaks:

Enable fractional scaling

gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"

BTRFS Snapshots

sudo btrfs subvolume list /
sudo btrfs subvolume list /home

From there you can make snapshots as you need to:

sudo btrfs subvolume snapshot / /btrfs-snapshot-root-120122022
sudo btrfs subvolume snapshot /home /btrfs-snapshot-home-120122022

And then if needed mount the snapshot if you want something back that you lost.

[Interface]
## This Desktop/client's private key ##
PrivateKey = <Replace with Client's private key>
## Client ip address ##
Address = 192.168.6.2/24
## PiHole DNS
DNS = 192.168.6.1
[Peer]
## Ubuntu 20.04 server public key ##
PublicKey = Crpr2agEQeptSJJvn3SQjXosPr1wOnNT2yUBtcXyXXM=
## set ACL ##
#AllowedIPs = 192.168.6.0/24 # Forward only traffice on the VPN to the server
AllowedIPs = 0.0.0.0/0, ::/0 # Forward all traffic through NUC in my office
## Your Ubuntu 20.04 LTS server's public IPv4/IPv6 address and port ##
Endpoint = <replace with server public ip>:41194
## Key connection alive ##
PersistentKeepalive = 15
[Interface]
## This iphones /client's private key ##
PrivateKey = <Replace with Client's private key>
## Client ip address ##
Address = 192.168.6.3/24
## PiHole DNS
DNS = 192.168.6.1
[Peer]
## Ubuntu 20.04 server public key ##
PublicKey = Crpr2agEQeptSJJvn3SQjXosPr1wOnNT2yUBtcXyXXM=
## set ACL ##
#AllowedIPs = 192.168.6.0/24
AllowedIPs = 0.0.0.0/0, ::/0 # Forward all traffic through NUC in my office
## Your Ubuntu 20.04 LTS server's public IPv4/IPv6 address and port ##
Endpoint = <replace with server's public ip>:41194
## Key connection alive ##
PersistentKeepalive = 15
[root@fedora wireguard]#
# Save as /etc/wireguard/wg0.conf
#
# See https://serverspace.io/support/help/set-up-wireguard-vpn-server-on-ubuntu/
#
# https://www.cyberciti.biz/faq/ubuntu-20-04-set-up-wireguard-vpn-server/
#
[Interface]
## My VPN server private IP address ##
Address = 192.168.6.1/24 # Internal IP address of the VPN server.
#
## My VPN server port ##
ListenPort = 41194
## VPN server's private key i.e. /etc/wireguard/privatekey ##
PrivateKey = COPYHEREFROMPRIVATEKEY
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp2s0 -j MASQUERADE
[Peer]
## Lenovo Laptop VPN public key ##
PublicKey = Kimironw1r21/RH3jbd97HTwtXjlUJFJAOXmBKuB+hg=
## client VPN IP address (note the /32 subnet) ##
AllowedIPs = 192.168.6.2/32
[Peer]
## iPhone VPN public key ##
PublicKey = Nmy0+6RJzIscPZZtt2PtjKZs3Q8XcE5J1iBJpx1Q/x8=
## client VPN IP address (note the /32 subnet) ##
AllowedIPs = 192.168.6.3/32
@linderd
Copy link

linderd commented Aug 1, 2021

Thanks for these useful tips, also work on P14s Gen2

To get full battery-functionality for TLP I used this guide.
I got it to work with the akmod-acpi_call-package.

To get hibernate/sleep to work, I only had to set the Energy-Options in the BIOS from Windows 10 to Linux.

@linderd
Copy link

linderd commented Aug 4, 2021

@timlinux
Copy link
Author

@linderd thanks so much for your comments above and I will check out the links you shared!

@friedgreenrepos
Copy link

Hi, thank you for the detailed guide. I was wondering, did you try to use the IR camera?

@timlinux
Copy link
Author

timlinux commented Feb 5, 2023

Hi, thank you for the detailed guide. I was wondering, did you try to use the IR camera?

@friedgreenrepos my model does not include the IR camera so nothing I can tell you for that, sorry.

@teufelweich
Copy link

I've always had issues with the SD Card readers in my ThinkPads. When no /dev/mmcblk0 device shows up after inserting a SD card try these commands to reload the kernel module:

modprobe -r sdhci_pci
modprobe sdhci_pci

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment