2022年2月13日 星期日

解決 Lenovo T14s 使用 Ubuntu 20.04 暫停後畫面亂掉的問題

作者:王一哲
日期:2022/2/13


前言


我使用的筆記型電腦型號為 ThinkPad T14s Gen 2 (AMD) [1],除了預設的 Windows 10 之外還安裝了 Ubuntu 20.04.3 LTS [2],但是之前遇到一個奇怪的狀況,在 Ubuntu 暫停之後如果按電源鍵喚醒筆電,畫面會變成下圖這樣,完全無法使用,只能長按電源鍵強制重新開機。

努力搜尋了一陣子之後,我在 Lenovo 的討論區看到一篇文章 Thinkpad T14s (amd) Black screen after resume on Fedora 32 [3],好像是因為 amd 顯示卡的驅動程式與較新版本的 kernel 不合造成的。


移除新版 kernel


我當時使用的 kernel 是 5.13.0-28-generic,需要先移除較新版本的 kernel,直到剩下較舊的 5.4.0-54-generic。可以在文字介面中使用以下的指令查詢目前已經安裝的 kernel
dpkg --list | grep linux-image

再用以下指令移除 kernel 及相關的檔案
sudo apt purge linux-image-X.X.X-XX-generic
sudo apt purge linux-headers-X.X.X-XX-generic
sudo apt autoremove



安裝 amd 顯示卡驅動程式


接下來到 Radeon™ Software for Linux® 20.20 Release Notes [4] 頁面下載 amd 顯示卡的驅動程式,我選擇的版本是 Radeon™ Software for Linux® version 20.20 for Ubuntu 20.04。切換的存放驅動程式壓縮檔的資料夾,使用以下的指令解壓縮、進入解壓縮後的資料夾、安裝驅動程式。
tar -Jxvf amdgpu-pro-20.20-1098277-ubuntu-20.04.tar.xz
cd amdgpu-pro-amdgpu-pro-20.20-1098277-ubuntu-20.04
sudo ./amdgpu-install


如果在安裝的時候出現錯誤訊息、沒有完成安裝,需要先解決套件相依性問題,再用以下指令移除剛才已經安裝的部分。
sudo /usr/bin/amdgpu-uninstall


在安裝完顯示卡的驅動程式之後重新開機,在 grub 畫面選擇 Advanced options for Ubutnu,再選擇 5.4.0-54-generic,進到 Ubuntu 之後再試著將系統暫停,這次就可以在暫停之後正常地喚醒電腦。但是又出現另一個問題,這個版本幾乎無法調整螢幕的亮度,一直維持在接近最大亮度的狀態。


設定開機時預設使用的 kernel


由於 grub 在開機時會預設使用新版本的 kernel,需要修改一些東西才能使用舊版的 kernel。我在另一個討論區找到這篇文章 Set default kernel in GRUB [5]。先用以下指令查詢 grub 進階選項
grep submenu /boot/grub/grub.cfg
我的回傳值是
submenu 'Ubuntu 的進階選項' $menuentry_id_option 'gnulinux-advanced-97cae9e0-b5a1-4c02-b1f1-3522ce71641a' {


再用以下指令查詢已安裝的 kernel 對應的選項
grep gnulinux /boot/grub/grub.cfg
我的回傳值是
   set default="gnulinux-advanced-97cae9e0-b5a1-4c02-b1f1-3522ce71641a>gnulinux-5.4.0-54-generic-advanced-97cae9e0-b5a1-4c02-b1f1-3522ce71641a"
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-97cae9e0-b5a1-4c02-b1f1-3522ce71641a' {
submenu 'Ubuntu 的進階選項' $menuentry_id_option 'gnulinux-advanced-97cae9e0-b5a1-4c02-b1f1-3522ce71641a' {
	menuentry 'Ubuntu,採用 Linux 5.13.0-28-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.13.0-28-generic-advanced-97cae9e0-b5a1-4c02-b1f1-3522ce71641a' {
	menuentry 'Ubuntu, with Linux 5.13.0-28-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.13.0-28-generic-recovery-97cae9e0-b5a1-4c02-b1f1-3522ce71641a' {
	menuentry 'Ubuntu,採用 Linux 5.13.0-27-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.13.0-27-generic-advanced-97cae9e0-b5a1-4c02-b1f1-3522ce71641a' {
	menuentry 'Ubuntu, with Linux 5.13.0-27-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.13.0-27-generic-recovery-97cae9e0-b5a1-4c02-b1f1-3522ce71641a' {
	menuentry 'Ubuntu,採用 Linux 5.4.0-54-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-54-generic-advanced-97cae9e0-b5a1-4c02-b1f1-3522ce71641a' {
	menuentry 'Ubuntu, with Linux 5.4.0-54-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-54-generic-recovery-97cae9e0-b5a1-4c02-b1f1-3522ce71641a' {


接下來編輯 grub 設定檔
sudo vim /etc/default/grub

將 GRUB_DEFAULT=0 修改成
GRUB_DEFAULT="gnulinux-advanced-97cae9e0-b5a1-4c02-b1f1-3522ce71641a>gnulinux-5.4.0-54-generic-advanced-97cae9e0-b5a1-4c02-b1f1-3522ce71641a"


最後更新 grub,接下來開機時就會自動使用 5.4.0-54 版的 kernel。
sudo update-grub



結語


雖然目前暫時解決了待機之後畫面整個亂掉的問題,但是無法調整亮度也有點麻煩,不知道是否有更好的解決方案。


沒有留言:

張貼留言