Schlagwort-Archive: Linux

Resolve display flicker on the InfinityBook Pro 14 Gen6 by tuxedo

The guide by tuxedo tells you how to disable `PSR` which stands for panel-self-refresh.

But psr is a very useful feature to conserve.

Thanks to the reddit user 909876b4-cf8c I went down the rabbit hole to figure out what tuxedos custom solution actually does. They force psr version 1. link

I'm booting with i915.enable_psr=0

And after calling $ echo 0x3 > /sys/kernel/debug/dri/0/i915_edp_psr_debug

my display is still working fine and psr is enabled

cat /sys/kernel/debug/dri/0/i915_edp_psr_status 
Sink support: yes [0x03]
PSR mode: PSR1 enabled
Source PSR ctl: enabled [0x81f00ee6]
Source PSR status: IDLE [0x04010000]
Busy frontbuffer bits: 0x00000000

Optional: For a flicker free experience follow the guide in https://bennis-blog.de/2021/11/19/pop_os-nvidia-on-the-infinitybook-pro-14-gen6/ to add the kernel parameter `i915.enable_psr=0`

The actual fix

Create a systemd unit file to enable psr version 1.

$sudo nano /etc/systemd/system/infinitybook_psr_fix.service

# ---
[Service]
Type=oneshot
ExecStart=bash -c 'echo 0x3 > /sys/kernel/debug/dri/0/i915_edp_psr_debug'
[Install]
WantedBy=graphical.target
# If graphical.target doesn't work for you
# WantedBy=multi-user.target
# ---

$sudo systemctl daemon-reload
$sudo systemctl enable infinitybook_psr_fix.service
$sudo systemctl start infinitybook_psr_fix.service

# Confirm that it worked by calling 
sudo cat /sys/kernel/debug/dri/0/i915_edp_psr_status 

This fix might resolve the screen flickering for all HDPI displays on Alder Lake (12th gen Intel)

Pop!_OS (nvidia) on the InfinityBook Pro 14 Gen6 by tuxedo

Summary of what I did.

Added the kernel parameter i915.enable_psr=0 using sudo kernelstub -a i915.enable_psr=0 to resolve the screen flicker issue. Even better: https://bennis-blog.de/2022/05/14/resolve-display-flicker-on-the-infinitybook-pro-14-gen6-by-tuxedo/

Installed:

  • tuxedo-control-center
  • tuxedo-keyboard
  • tuxedo-touchpad-switch (touchpad-led support – also add to startup applications)
  • tuxedo-pinfix-tgl-dkms (not sure if required)

For power tuning, I installed tlp and mostly adjusted

/etc/tlp.conf L0319: RUNTIME_PM_DRIVER_BLACKLIST="" so that runtime_pm is enabled for the nvidia card (it sometimes turned on [maybe after sleep]).

As the touchpad sometimes stops to work (mostly on login), I created a simple script that fixes the issue.

 #!/bin/bash
sudo rmmod i2c_hid_acpi
sudo modprobe i2c_hid_acpi

Maybe: set deep sleep: (I didn’t do that because the Nvidia card wakes up after standby)

sudo kernelstub -a "mem_sleep_default=deep"



Accelerated video playback. https://wiki.archlinux.org/title/Hardware_video_acceleration

I failed to get va-api working with firefox (seems to be a known bug), but chrome is working fine following the arch wiki or https://www.linuxuprising.com/2021/01/how-to-enable-hardware-accelerated.html

For some reason `vdpau-va-driver_0.7.4-7_amd64.deb` is missing from the ubuntu repos. You can simply install it from here (debian). It enables va-api with nvidia.

[not required after 22.04] I also installed https://pipewire-debian.github.io/pipewire-debian/ with wireplumber.

WARNING: OPAL boot currently doesn’t work, as the SSD is power cycled on reboot.

Further notes:

gnome-shell extensions:

https://extensions.gnome.org/extension/3628/arcmenu/
https://extensions.gnome.org/extension/904/disconnect-wifi/
https://extensions.gnome.org/extension/1319/gsconnect/
https://extensions.gnome.org/extension/307/dash-to-dock/
https://extensions.gnome.org/extension/1401/bluetooth-quick-connect/
https://extensions.gnome.org/extension/779/clipboard-indicator/
https://extensions.gnome.org/extension/36/lock-keys/
https://extensions.gnome.org/extension/906/sound-output-device-chooser/
https://extensions.gnome.org/extension/1287/unite/
https://extensions.gnome.org/extension/1485/workspace-matrix/
https://extensions.gnome.org/extension/1276/night-light-slider/

disabled:
Cosmic Dock
Pop COSMIC
Pop Shell

Patched Nautilus for better search: https://www.linuxuprising.com/2020/06/how-to-install-nautilus-with-type-ahead.html
simply: https://launchpad.net/~lubomir-brindza/+archive/ubuntu/nautilus-typeahead

How to setup zero overhead full disk encryption with S3 sleep support

Background

Modern (NVMe) SSDs encrypt all data by default. Also called self-encrypting drive (SED). They just don’t require a password to access the data. Instead of adding an additional layer of encryption e.g. using LUKS (additional power usage), I opted to use the capabilities of the device to secure access to the stored data.

Disclaimer:
I use this setup for my installation of Pop! OS 21.04 – This guide is mostly for my own memory.

More information:

I use a fork of sedutil as that supports newer systems and for S3 sleep support
https://github.com/ChubbyAnt/sedutil, https://github.com/ratcashdev/sedutil/tree/badicsalex-s3-sleep-support
WARNING:
This fork of sedutil is not compatible with the original one, as it uses a different hashing algorithm

Very high level overview of the boot process

Cold boot:
The self encrypting device (SED) presents a (strangely) named read only ShadowMBR.
Those 128MB of memory contain the pre-boot authentication image (PBA) with tools to unlock the drive and after that chain-boot (or restart) to boot your real system. It is currently based on syslinux, but can hopefully be replaced by systemd-boot sometime in the future https://github.com/systemd/systemd/issues/16089.

S3 sleep:
Switching into S3 sleep shuts down the drive, locking it.
A systemd service is setup to store the unlock key in the kernel and unlock the drive on resume.

Preparations

Backup all your data!

Download the rescue image from https://github.com/ChubbyAnt/sedutil/releases/tag/1.15-5ad84d8

(For S3 sleep support) Checkout and build sedutil-cli from https://github.com/ratcashdev/sedutil/tree/badicsalex-s3-sleep-support, or use my self-compiled version

Setup full disk encryption

Follow: https://github.com/ChubbyAnt/sedutil#encrypting-your-drive

EFI Setup

Create and rearrange the following boot entries (I did this from within my EFI settings)

  1. The EFI boot file in the ShadowMBR
  2. Your normal EFI boot entry

Setup S3 Sleep Support

Based on https://github.com/ladar/sedutil/issues/4

Install sedutil-cli with S3 sleep support (see preparations).

Get your hashed password

sedutil-cli --printPasswordHash <password> /dev/nvme?

Create the systemd service file /etc/systemd/system/seds3sleep.service

(adjust the password hash and /dev/nvme0n1)

NOTE: The additional n1 is no error

[Service]
Type=oneshot
ExecStart=/opt/sedutil-1.15.1-87/sedutil-cli -n -x --prepareForS3Sleep 0 <Admin1 password hash> /dev/nvme0n1

[Install]
WantedBy=multi-user.target
Enable this service. # systemctl enable seds3sleep.service && systemctl start seds3sleep.service