이 글은 삼성 갤럭시북 5 프로에 Ubuntu를 설치하고 사용성을 최적화하는 법을 담고 있습니다. 글의 분량이 다소 길 수 있으니 목차 기능을 이용하세요.
필자는 개인 노트북으로 Apple MacBook Air M1을 사용중이었다.
그야말로 흠잡을 곳이 없는 노트북이었다. 중고로 구해 온전하지 않은 배터리 상태에도 불구하고 M1의 전성비는 예술 그 자체였다. 성능적인 면에서도 VS Code를 구동하기에는 ⚡ 번개와 같은 속도를 보여주었고 의외로 8GB RAM도 브라우저 탭을 틈틈이 정리하는 습관을 가진 필자에게는 문제가 없었다. (램먹는 하마 IntelliJ만 빼면!) 불만이 있다면 딱 한 가지, 개발툴만 설정해도 슬슬 부족한 256GB의 용량이었다. 그리고 애플은 그것이 억울하다면..
단돈 60만원만 더 내라고 한다. 나는 노트북에 200만원을 낼 생각이 없으니 어떡하겠나. 절이 싫으면 중이 떠나야지.
결과적으로 본인은 노 사장님의 은총을 받기로 결심했다. Samsung Galaxy Book 5 Pro 14인치 16GB 256GB+1TB 모델을 110만원대에 공수해왔다.
노태문 그는 신인가?
x86 노트북이라면 학을 떼던 필자가 오랜만에 돌아오게 된 이유는 Intel Lunar Lake 프로세서였다. 이론적으로 루나레이크는 그 M1과 비슷한 전성비를 보여줄 수 있는 x86의 구원자였다.
하지만 기대가 컸던 탓일까. 실제로 수령한 갤럭시북 5 프로는 성능 면에서 실망의 연속이었다. macOS를 사용하다 온 터라 더 눈에 띄겠지만 윈도 특유의 버벅임은 여전했다. 무엇보다 기대했던 압도적인 전성비는 어디로 가고 웹서핑만 해도 가볍게 15W를 넘나들며 팬이 열심히 돌아간다. 팬리스 맥북의 사용자 경험에 비비지 못하는건 백번 이해한다만, 이건 아니잖아? 슬픔이 밀려온다.
찝찝한 마음을 뒤로하고 어차피 개발용으로 구매한 노트북인만큼 Linux를 설치하기로 한다. 최신 하드웨어인만큼 가능한 최신 버전(Arch 기반을 쓰지 않는 이상)인 Ubuntu 24.04를 선택했다.
말은 이렇게 했지만 가능한 거의 모든 배포판을 깔아봤다. 얌전히 24.04 깔자..
설치 방법은 여느때와 같다.
이어야 하는데..
화면 밝기/와이파이/블루투스 등 HW Specific한 기능들이 전혀 동작하지 않았다. 나름대로 최신 버전을 깐다고 노력했음에도 커널 버전이 너무 낮은가보다. "uname -r"을 통해 확인한 커널 버전은 6.8인데 6.11 이상이 되어야 이 노트북의 하드웨어를 정상적으로 사용할 수 있다고 한다.
현재 Ubuntu가 지원하는 최신 HWE 커널의 경우 6.8이 한계이다. 어쩔 수 없이 mainline kernel을 이용하도록 하자.
sudo add-apt-repository ppa:cappelikan/ppa
sudo apt update
sudo apt install mainline
을 통해 Mainline Kernels를 설치해주자.
글을 작성하는 시점에서 최신 버전은 6.12.3이다. 선택한 뒤 Install을 눌러 설치해주자. 이미 빌드된 커널과 함께 grub-update 등 필요한 절차를 모두 자동으로 진행해주는 편리한 툴이다. 재부팅해주면 디스플레이 밝기 조절과 WiFi 등이 활성화되었을 것이다.
❯ uname -r
6.12.3-061203-generic
이렇게 6.12.3 커널이 정상적으로 설치된 것을 확인할 수 있다. 하지만 퍼포먼스는 여전히 부드러움과 거리가 멀다. 누가 봐도 GPU 가속이 이루어지지 않는 모습이다.
인텔 내장 그래픽의 경우 오픈소스 그래픽 드라이버인 Mesa를 이용해주어야 한다. 문제는 24.04에 포함된 기본 Mesa 버전이 너무 낮아서 루나레이크를 인식하지 못하는 것이다. 이를 최신 Mesa를 제공하는 PPA를 통해 해결해주자.
❯ sudo add-apt-repository ppa:kisak/kisak-mesa \
&& sudo apt update -y \
&& sudo apt upgrade -y
이후 재부팅해주자.
❯ glxinfo | grep Mesa
client glx vendor string: Mesa Project and SGI
Device: Mesa Intel(R) Graphics (LNL) (0x64a0)
OpenGL renderer string: Mesa Intel(R) Graphics (LNL)
OpenGL core profile version string: 4.6 (Core Profile) Mesa 24.3.3 - kisak-mesa PPA
OpenGL version string: 4.6 (Compatibility Profile) Mesa 24.3.3 - kisak-mesa PPA
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 24.3.3 - kisak-mesa PPA
글 작성 시점에서 최신 Mesa인 24.3.3이 잘 설치된 모습이다. 바로 정상적인 퍼포먼스가 보일 것이다. 터치패드 제스쳐를 사용해보면 120Hz의 부드러운 애니메이션이 감동적으로 다가온다.
맥북을 쓰면서 가장 만족했던 것은 매번 시스템 종료를 눌러줄 필요 없이 그냥 덮개를 닫고 잊어버릴 수 있다는 점이었다. 이와 유사한 사용자 경험을 Linux에서도 얻을 수 있다.
sudo swapon --show
NAME TYPE SIZE USED PRIO
/some_swap_name file 4G 0B -2
위 명령어를 이용하면 기본으로 잡혀있는 swap을 확인할 수 있다. 사람마다 swap의 이름과 크기가 다를 수 있다. 16GB RAM 모델을 사용중인 필자에게 4GB의 swap은 턱없이 부족하기 때문에 기존의 swap을 제거하자.
sudo swapoff /some_swap_name
rm /some_swap_name
sudo fallocate -l 20G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
램과 맞는 16GB 용량에 4GB를 더해 여유롭게 20GB 용량의 새 swap을 설정해준다.
sudo nano /etc/fstab
이 파일을 수정 시 기존 swap file의 이름이 이미 설정되어 있을텐데 /swapfile로 고쳐주자.
이제 이 swap을 GRUB이 인식하게 바꿔주어야 한다. 먼저
lsblk -f
의 결과값을 이용해 /swapfile이 담긴 디스크의 UUID를 얻는다. 이후
sudo filefrag -v /swapfile | grep " 0:" | awk '{print $4}' | sed 's/\.\.//'
의 결과값을 기록해준다. 이는 swapfile의 offset이다. 이후
sudo nano /etc/default/grub
를 입력하고 GRUB_CMDLINE_LINUX_DEFAULT의 값을 UUID와 offset을 이용해 수정해준다. 아래는 예시이다.
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=cc501ab6-1f22-4275-add3-4e73960dc46e resume_offset=22444032"
이제 hibernation 활성화 작업이 모두 완료되었다. 정상적으로 작동하나 테스트해보자.
sudo systemctl hibernate
컴퓨터가 꺼지는 것처럼 보이고 다시 켰을 때 이전 상태가 돌아왔다면 성공이다.
이제 시스템이 언제 hibernation에 들어갈지 결정하는 정책만 수정하면 된다. 파일 두 개를 수정해야 하는데 상세한 정보는 각자 찾아보도록 하자. 여기서는 내 설정값을 첨부한다.
❯ sudo cat /etc/systemd/sleep.conf
[Sleep]
AllowSuspend=yes
AllowHibernation=yes
AllowSuspendThenHibernate=yes
AllowHybridSleep=yes
SuspendState=mem standby freeze
HibernateMode=platform shutdown
HibernateDelaySec=30min
#SuspendEstimationSec=30min
❯ sudo cat /etc/systemd/logind.conf
[Login]
#NAutoVTs=6
#ReserveVT=6
#KillUserProcesses=no
#KillOnlyUsers=
#KillExcludeUsers=root
#InhibitDelayMaxSec=5
#UserStopDelaySec=10
#HandlePowerKey=poweroff
#HandlePowerKeyLongPress=ignore
#HandleRebootKey=reboot
#HandleRebootKeyLongPress=poweroff
#HandleSuspendKey=suspend
#HandleSuspendKeyLongPress=hibernate
#HandleHibernateKey=hibernate
#HandleHibernateKeyLongPress=ignore
HandleLidSwitch=suspend-then-hibernate
#HandleLidSwitchExternalPower=suspend
HandleLidSwitchDocked=ignore
#PowerKeyIgnoreInhibited=no
#SuspendKeyIgnoreInhibited=no
#HibernateKeyIgnoreInhibited=no
#LidSwitchIgnoreInhibited=yes
#RebootKeyIgnoreInhibited=no
#HoldoffTimeoutSec=30s
#IdleAction=ignore
#IdleActionSec=30min
#RuntimeDirectorySize=10%
#RuntimeDirectoryInodesMax=
#RemoveIPC=yes
#InhibitorsMax=8192
#SessionsMax=8192
#StopIdleSessionSec=infinity
Ubuntu에는 기본으로 power-profiles-daemon이라는 전력 관리 시스템이 탑재되어 있다. 하지만 전원 연결 상태에 따라 프로파일 자동 전환과 같은 기본적인 기능조차 지원하지 않기 때문에 TLP라는 친구로 교체해주자.
기본 전력 관리와 충돌할 수 있으니 제거해주자.
sudo systemctl stop power-profiles-daemon.service
sudo systemctl mask power-profiles-daemon.service
sudo add-apt-repository ppa:linrunner/tlp
sudo apt update
sudo tlp start
여기까지만 설정해도 기본 설정으로 잘 작동할 것이다.
하지만 필자는 완벽한 저소음을 위해 세부적인 설정을 추가로 진행했다. 자세한 내용은 TLP 문서를 참조할 수 있으며 여기서는 내 설정값만을 첨부한다.
❯ tlp-stat --cdiff
--- TLP 1.7.0 --------------------------------------------
+++ Configured Settings (only differences to defaults):
/etc/tlp.conf L0146: CPU_ENERGY_PERF_POLICY_ON_AC="default"
/etc/tlp.conf L0147: CPU_ENERGY_PERF_POLICY_ON_BAT="power"
/etc/tlp.conf L0292: AHCI_RUNTIME_PM_ON_AC="auto"
/etc/tlp.conf L0364: WIFI_PWR_ON_AC="on"
/etc/tlp.conf L0398: RUNTIME_PM_ON_AC="auto"
/etc/tlp.conf L0167: CPU_BOOST_ON_AC="1"
/etc/tlp.conf L0168: CPU_BOOST_ON_BAT="0"
/etc/tlp.conf L0178: CPU_HWP_DYN_BOOST_ON_AC="1"
/etc/tlp.conf L0179: CPU_HWP_DYN_BOOST_ON_BAT="0"
/etc/tlp.conf L0196: PLATFORM_PROFILE_ON_AC="balance_performance"
/etc/tlp.conf L0197: PLATFORM_PROFILE_ON_BAT="power"
인텔의 기존 i925 드라이버 대신 Xe 드라이버를 활성화할 수 있다고 한다. 활성화한다고 성능이 극적으로 개선된다거나 체감이 있는 것은 아니니 개인의 선택으로 남겨둔다.
❯ glxinfo | grep Mesa
client glx vendor string: Mesa Project and SGI
Device: Mesa Intel(R) Graphics (LNL) (0x64a0)
아까 이 명령어의 결과에서 64a0 가 내 장치 ID이다. 기록해둔다.
sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i915.force_probe!=64a0 xe.force_probe=64a0 resume=UUID=cc501ab6-1f22-4275-add3-4e73960dc46e resume_offset=22444032"
아까와 같은 방식이지만 "i915.force_probe!=64a0 xe.force_probe=64a0"가 추가되었다. 이게 끝이다.
스피커가 작동하지 않는다. 대충 찾아보니 리얼텍 ALC298 칩셋을 사용한 노트북의 유구한 문제인 것 같은데, 하드웨어 ID가 달라져서인지 구형 제품들 용 스크립트는 작동하지 않는다. QEMU로 덤프를 뜨고... 이런 절차는 내 능력을 벗어나는 것 같다. 혹시라도 능력자가 계시면 도움 주세요!
또 윈도우에서도 발생하는 문제인데 아주 간헐적으로 프리징에 가까운 렉이 걸린다. 아주 가끔이라 크게 거슬리지는 않지만 BIOS 업데이트가 필요해 보인다.
간단히만 적자면, 정상화 되었다. 우분투에서 이 글을 적는 현재 5W를 소모하며 당연하지만 팬이 돌지 않는다. 윈도우에서는 전력 소모도 20W를 맨날 넘는 것에 더불어 어쩌다 4W가 찍힐 때에도 계속 도는 팬 소음이 스트레스였다. 우분투와 함께라면 맥북을 능히 대체할 수 있을 것 같다.
잘 만든 하드웨어에 윈도우 끼얹기