华为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