华为Matebook 16s 2022在Deepin v23下的声音、硬盘、电池等系统问题的解决

  手头上的Matebook 16s 2022款笔记本配备的是Intel i5-12500H,手动替换了原装的512固态硬盘为致钛的PC005 1TB,系统环境是Deepin V23 RC2。

  安装系统之后,主要有3个问题需要解决:

1.笔记本没有声音,通过安装github上的项目huawei-linux-sound-fix解决,需要注意的是,Deepin V23的软件仓库里面缺少依赖项alsa-tools,必须先从Debian12的仓库安装alsa-tools再运行声音修复补丁。

如果github无法访问,可以从蓝奏云下载:https://thesats.lanzout.com/iUrwJ232p6gf

# 从Debian12仓库下载并安装alsa-tools包
wget http://ftp.cn.debian.org/debian/pool/main/a/alsa-tools/alsa-tools_1.2.5-3_amd64.deb -O  /tmp/alsa-tools_1.2.5-3_amd64.deb &&  sudo apt install /tmp/alsa-tools_1.2.5-3_amd64.deb

2.笔记本在睡眠唤醒之后,直接掉盘,系统只能强制断电。这貌似是由于APST机制,睡眠的时候硬盘进入了P4深度省电状态,导致系统唤醒的时候,无法唤醒硬盘,结果掉盘,这可以通过在grub配置文件中添加参数解决,修改之后的参数为:

GRUB_CMDLINE_LINUX_DEFAULT="nvme_core.default_ps_max_latency_us=2000 splash quiet "

bash脚本如下: 

#!/bin/bash

# 问题:在安装有致钛PC005-1TB硬盘的Matebook16s-2022中,Deepin v23 RC2(Linux Kernel 6.6.25-amd64-desktop-hwe)在睡眠唤醒之后,硬盘掉盘。
# 该脚本在/etc/default/grub的GRUB_CMDLINE_LINUX_DEFAULT参数中,添加nvme_core.default_ps_max_latency_us=2000,让硬盘不处于P4状态(深度省电状态)。
# 参考链接:
# https://wiki.archlinux.org/title/Solid_state_drive/NVMe
# https://www.tekbyte.net/fixing-nvme-ssd-problems-on-linux

# 以下是致钛PC005硬盘支持的电源状态
# sudo smartctl -c /dev/nvme0n1 | grep -A7 "Supported Power States"
#
# Supported Power States
# St Op     Max   Active     Idle   RL RT WL WT  Ent_Lat  Ex_Lat
#  0 +     9.00W       -        -    0  0  0  0        0       0
#  1 +     4.60W       -        -    1  1  1  1        0       0
#  2 +     3.80W       -        -    2  2  2  2        0       0
#  3 -   0.0450W       -        -    3  3  3  3     2000    2000
#  4 -   0.0040W       -        -    4  4  4  4    15000   15000

echo "matebook16s解决NVME硬盘睡眠唤醒掉盘的问题-root.sh"

# 检查脚本是否以sudo权限执行
if [ "$EUID" -ne 0 ]; then
    echo "请以sudo权限执行此脚本"
    exit 1
fi

# 检查系统中是否存在NVMe硬盘
NVME_DISKS=$(ls /dev/nvme*n1 2> /dev/null)

if [ -z "$NVME_DISKS" ]; then
    echo "系统中不存在NVMe硬盘,退出"
    exit 1
fi

# 显示每个NVMe硬盘的信息
for DISK in $NVME_DISKS; do
    echo -e "\033[35m硬盘信息:$DISK\033[0m"
    sudo smartctl -c $DISK | grep -A7 "Supported Power States"
done

# 读取GRUB_CMDLINE_LINUX_DEFAULT的值
GRUB_CMDLINE=$(grep -oP '^GRUB_CMDLINE_LINUX_DEFAULT="\K[^"]+' /etc/default/grub)

# 检查nvme_core.default_ps_max_latency_us参数是否存在
if [[ $GRUB_CMDLINE =~ nvme_core.default_ps_max_latency_us=([0-9]+) ]]; then
    # 如果存在,检查其值是否为2000
    if [ ${BASH_REMATCH[1]} == 2000 ]; then
        echo "nvme_core.default_ps_max_latency_us=2000"
        echo "grub参数已正确设置,无需调整..."
        exit 0
    else
        echo "当前参数nvme_core.default_ps_max_latency_us=${BASH_REMATCH[1]},将其改为2000"
        # 替换参数值
        GRUB_CMDLINE=${GRUB_CMDLINE//nvme_core.default_ps_max_latency_us=${BASH_REMATCH[1]}/nvme_core.default_ps_max_latency_us=2000}
        # 更新/etc/default/grub文件
        sudo sed -i "s/^GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT=\"$GRUB_CMDLINE\"/" /etc/default/grub
        # 更新grub配置
        sudo grub-mkconfig -o /boot/grub/grub.cfg
        echo "请重启系统,来让参数生效..."
    fi
else
    echo "参数nvme_core.default_ps_max_latency_us=2000不存在,添加该参数"
    # 备份grub文件
    sudo cp /etc/default/grub /etc/default/grub.bak
    echo "已备份原始grub文件为grub.bak"
    # 添加参数
    GRUB_CMDLINE="$GRUB_CMDLINE nvme_core.default_ps_max_latency_us=2000"
    # 更新/etc/default/grub文件
    sudo sed -i "s/^GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT=\"$GRUB_CMDLINE\"/" /etc/default/grub
    # 更新grub配置
    sudo grub-mkconfig -o /boot/grub/grub.cfg
    echo "请重启系统,来让参数生效...."
fi

 3.笔记本充电没有开启电池保养功能,需要安装tlp来设置,电量高于81%时停止充电,低于75%时充电。设置上限是81%而不是80%,是因为设置到80%停止充电时,系统会一直显示“电量79%”,对强迫症不友好。

bash脚本如下: 

#!/bin/bash

echo "matebook16s设置电池保养功能-root.sh"

# 检查用户是否具有root/sudo权限
if [ "$(id -u)" != "0" ]; then
   echo -e "\033[31m请以root/sudo用户身份运行此脚本。\033[0m" 1>&2
   # 按任意键退出
   echo "按任意键退出..."
   read -n 1
   exit 1
fi

sudo apt install tlp -y

# 定义文件路径
FILE="/etc/tlp.conf"

# 显示电池信息
clear
echo -e "\033[31m电池详情如下:\033[0m"
tlp-stat -b
echo "-------------------------------------------------"

# 复制文件
cp /etc/tlp.conf /etc/tlp.conf.bak

# 检查是否已经存在修改后的这两行
if grep -Fxq "START_CHARGE_THRESH_BAT0=75" /etc/tlp.conf && grep -Fxq "STOP_CHARGE_THRESH_BAT0=81" /etc/tlp.conf
then
    echo -e "\033[31m电池保养功能已开启,电池将在低于75%时充电,高于80%时停止充电\033[0m"
else
    # 修改文件
    sed -i 's/#START_CHARGE_THRESH_BAT0=75/START_CHARGE_THRESH_BAT0=75/g' /etc/tlp.conf
    sed -i 's/#STOP_CHARGE_THRESH_BAT0=80/STOP_CHARGE_THRESH_BAT0=81/g' /etc/tlp.conf

    # 检查是否修改成功
    if grep -Fxq "START_CHARGE_THRESH_BAT0=75" /etc/tlp.conf && grep -Fxq "STOP_CHARGE_THRESH_BAT0=81" /etc/tlp.conf
    then
        # 执行tlp start
        tlp start > /dev/null
        echo -e "\033[31m电池保养功能已开启,电池将在低于75%时充电,高于80%时停止充电\033[0m"
    else
        echo -e "\033[31m/etc/tlp.conf修改失败,请检查该文件...\033[0m"
    fi
fi

echo "想要临时完全充满电池,请运行sudo tlp fullcharge BAT0"
# 按任意键退出
echo "按任意键退出..."
read -n 1
exit 0

 

posted @ 2024-06-30 00:51  MeGusta  阅读(90)  评论(0编辑  收藏  举报