linux ubuntu 22.04 thinkpad

TLP

sudo add-apt-repository ppa:linrunner/tlp
sudo apt update
sudo apt install tlp tlp-rdw

проверка настройки батарей


sudo tlp-stat -b
/sys/class/power_supply/BAT0/charge_control_start_threshold =     62 [%]
/sys/class/power_supply/BAT0/charge_control_end_threshold   =     87 [%]
/sys/class/power_supply/BAT1/charge_control_start_threshold =     63 [%]
/sys/class/power_supply/BAT1/charge_control_end_threshold   =     86 [%]

sudo apt install acpi-call-dkms
sudo nano /etc/tlp.conf

Разрешение дисплея

Если gpu не держит 4k/60Hz, придется снижать герцовку
расчитывалка настроек таймингов видео
curl https://raw.githubusercontent.com/kevinlekiller/cvt_modeline_calculator_12/master/cvt12.c --output cvt12.c

gcc -v
gcc cvt12.c -O2 -o cvt12 -lm -Wall
./cvt12 3840 2160 25 -r
./cvt12 3840 2160 30 -b
cat .xprofile
xrandr --newmode "3840x2160_30.00_rdb2"  257.66  3840 3848 3880 3920  2160 2177 2185 2191 +hsync -vsync
xrandr --addmode HDMI-1  "3840x2160_30.00_rdb2"
sudo autorandr --change

ШИМ

Взято из https://github.com/edio/intelpwm-udev


user@x240:~$ cat intelpwm.sh
#!/usr/bin/env bash
function usage() {
  cat << EOF
intelpwm FREQ [PCH_RAWCLK_FREQ_REG [BLC_PWM_PCH_CTL2_REG]]
  FREQ                  desired PWM frequency in Hz
  PCH_RAWCLK_FREQ_REG   PCH raw clock register name or offset
  BLC_PWM_PCH_CTL2_REG  backlight control register name or offset
EOF
}
function reg_check() {
  # If the register is a mnemonic name and not an offset, make sure that it is
  # known to intel_reg utility. Unknown mnemonic likely means, that we are on a
  # different generation of hardware that may have different registers layout
  printf "%d" "$1" 1>/dev/null 2>&1  || \
    intel_reg list | grep "$1" 1>/dev/null 2>&1 || \
      (>&2 echo "Register $1 is not defined on this hardware" && false)
}
function reg_read() {
  # this assumes fixed position of the value in intel_reg output
  # so far this has been the case though
  intel_reg  read "$1" | cut -c51-60
}
FREQ=$1
PCH_RAWCLK_FREQ_REG=${2:-PCH_RAWCLK_FREQ}
BLC_PWM_PCH_CTL2_REG=${3:-BLC_PWM_PCH_CTL2}

if [ -z "$FREQ" ]; then
  usage
  exit 1
fi

reg_check "${PCH_RAWCLK_FREQ_REG}" || exit 1
reg_check "${BLC_PWM_PCH_CTL2_REG}" || exit 1

PCH_FREQ="$(reg_read ${PCH_RAWCLK_FREQ_REG})"
BLC_CTL2="$(reg_read ${BLC_PWM_PCH_CTL2_REG})"
CYCLE="${BLC_CTL2:6:4}"
HEX=$(printf "0x%08x" $((1000000*PCH_FREQ/128/FREQ)))
PERIOD="${HEX:6:9}"

>&2 echo "Writing 0x${PERIOD}${CYCLE} to register ${BLC_PWM_PCH_CTL2_REG}"
intel_reg write "${BLC_PWM_PCH_CTL2_REG}" "0x${PERIOD}${CYCLE}"

sudo apt install intel-gpu-tools
chmod +x intelpwm.sh
./intelpwm.sh 2000

Чтобы не запускать вручную, настроить вызов скрипта через udev
Скрипт закинуть в /usr/bin без расширения
и выставить права
chown root:root intelpwm.sh


user@x240:~$ cat /etc/udev/rules.d/99-intelpwm.rules
KERNEL!="intel_backlight", SUBSYSTEM!="backlight", ACTION!="change", GOTO="backlight_pwm_rules_end"
RUN="/usr/bin/intelpwm 2000"
LABEL="backlight_pwm_rules_end"