手頭上的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