This documents the changes made while installing OpenSUSE LEAP 15.3 on the Framework Laptop (1st edition).
During the guided install, there are some minor changes that will make things smoother later.
There is an option to enlarge swap to support hibernation, but it still fails to create a partition large enough.
- Use the guided setup, then the expert partitioner, based on the guided setup
- Delete the root and swap partitions
- Add a new swap partition that is at least 200MiB larger than your physically installed memory
- Add your remaining partitions
- Note: LUKS encryption is still supported
- CPU Mitigations (optional):
Auto + No SMT
- Check that the installer has automatically populated
resume=
- Add
mem_sleep_default=deep
- Add
acpi_osi="Windows 2020"
- Set hostname (optional)
Your laptop may freeze during reboot. The caps lock might flash rapidly. This is expected and will be resolved be the Post-Install changes. Hold down the power button until the laptop stops.
Once the base system is installed, you will need to install and configure the necessary components.
To make use of the newest features of the laptop, you'll need the newest backported kernel.
sudo zypper ar --priority 50 --refresh https://download.opensuse.org/repositories/Kernel:stable:Backport/standard/Kernel:stable:Backport.repo
sudo zypper ref
sudo zypper up --allow-vendor-change
I found that the best way to configure the trackpad was with xorg.
/etc/X11/xorg.conf.d/99-framework.conf
Section "InputClass" Identifier "Framework Clickpad" MatchProduct "Touchpad" MatchDriver "synaptics" # Enable clicking Option "ClickPad" "true" Option "EmulateMidButtonTime" "0 Option "ClickMethod" "clickfinger" Option "ClickFinger1" "1" Option "ClickFinger2" "3" Option "ClickFinger3" "2" # Disable tapping Option "TapButton1" "0" Option "TapButton2" "0" Option "TapButton3" "0" Option "MaxTapTime" "0" Option "SoftButtonAreas" "0 0 0 0 0 0 0 0" # Prevent Accidental Clicks Option "PalmDetect" "1" Option "PalmMinWidth" "5" Option "PalmMinZ" "40" # Calm the pad down while clicking Option "VertHysteresis" "5" Option "HorizHysteresis" "5" # Natural (reverse) scrolling Option "VertTwoFingerScroll" "1" Option "VertScrollDelta" "-90" Option "HorizTwoFingerScroll" "1" Option "HorizScrollDelta" "-90" # Smooth movement Option "MinSpeed" "1" Option "MaxSpeed" "2" Option "AccelerationProfile" "2" Option "ConstantDeceleration" "4" #Option "PressureMotionMinZ" "15" EndSection
Touchegg is available in most repos, but you'll want the newest. There is one available in the X11:Unity reposity where you can grab the latest and install it manually.
Once installed, you can configure it:
~/.config/touchegg/touchegg.conf
false qdbus-qt5 org.kde.kglobalaccel /component/kwin invokeShortcut 'Expose' begin false qdbus-qt5 org.kde.kglobalaccel /component/kwin invokeShortcut 'ExposeClass' begin false qdbus-qt5 org.kde.kglobalaccel /component/kwin invokeShortcut 'Switch to Previous Desktop' begin false qdbus-qt5 org.kde.kglobalaccel /component/kwin invokeShortcut 'Switch to Next Desktop' begin false XF86Back begin false XF86Forward begin
And you'll need a systemd user service to ensure it's stable across all power states
~/.config/systemd/user/touchegg.service
[Unit] Description=Touchegg User Service [Service] ExecStartPre=/bin/sh -c 'killall -qw touchegg || true' ExecStart=/usr/bin/touchegg Restart=always RestartSec=1s [Install] WantedBy=default.target
Finally you can enable the services:
sudo systemctl enable --now touchegg.service
systemctl enable --now --user touchegg.service
/etc/systemd/logind.conf
HandleLidSwitch=suspend-then-hibernate
/etc/systemd/sleep.conf
HiberateDelaySec=60min
/etc/systemd/system.conf
RebootWatchdogSec=0
- System Settings
- Power Management
- Energy Savings
- On Battery
- While asleep, hibernate after a period of inactivity
- On Low Battery
- While asleep, hibernate after a period of inactivity
- On Battery
- Energy Savings
- Power Management
The laptop may freeze again. Hold down the power button until the laptop shuts off. This should be the last time it freezes during shutdown / reboot.
Regarding the extra 200MiB for swap. Do we have any pointer to a technical document explaining why it would be needed?
I'm asking because, when we decided to rewrite the YaST storage stack (codename storage-ng), we made an strong commitment to only introduce that kind of adjustments if they are backed by a link pointing to some technical specification or any other authorized source. The old storage stack was full of adjustments, logic and numbers that were introduced because "John Doe says this is required" or "Mike Someone needed this for his system to work". We agreed that would be a no-go in the new code - no technical evidence, no code change. ;-)
On the other hand, I find strange the requisite of 200 extra MiB because is the first report we got about that being needed. We have been using swap == RAM for years and it seems to work to hibernate most systems out there. Does this happen consistently or only when the system is on heavy load (ie. with the RAM already full)? Is there something different in this hardware compared to the typical laptop that may explain that?
That being said, we left an open door for this kind of adjustments when we designed the volumes specification that the different products and system roles can use to define which partitions should be created. See
adjust_by_ram
at the description of a volume. We predicted that the RAM == swap rule would not be enough for everyone in the future and left the possibility of adding different behaviors specified byadjust_by_ram_mode
. Adding 200 MiB (or a size specified in another parameter) could be one of those modes. But to be honest it still sounds quite arbitrary and I don't know whether is something we should do for all computers out there just because it worked for one person in one laptop.