動與硬件適配實(shí)戰(zhàn))
1. 為什么要在Surface上折騰Arch LinuxSurface系列從誕生起就是個矛盾體。硬件做工一流屏幕素質(zhì)頂級32的寬高比在碼代碼和看文檔時比169舒服太多但預(yù)裝的Windows在觸控和手寫筆上的體驗(yàn)只能算“能用”離“好用”還有距離。更關(guān)鍵的是Windows的更新節(jié)奏和后臺行為你控制不了對于習(xí)慣了自己掌控系統(tǒng)每一個角落的人來說這種失控感很難忍受。Ubuntu在Surface上的支持已經(jīng)相對成熟了社區(qū)里有大量現(xiàn)成的教程和腳本基本上裝完就能用觸屏、WiFi、藍(lán)牙這些常見硬件都能正常工作。但Ubuntu的軟件源更新策略、默認(rèn)的GNOME桌面環(huán)境、以及Canonical對系統(tǒng)底層的各種定制對于追求極致輕量和完全自定義的用戶來說始終隔著一層。Arch Linux不一樣它給你一個幾乎空白的畫布從內(nèi)核參數(shù)到驅(qū)動模塊從桌面環(huán)境到每一個系統(tǒng)服務(wù)全部由你決定。這種掌控感是其他發(fā)行版給不了的。但代價也很明顯。Surface的硬件有很多非標(biāo)準(zhǔn)設(shè)計尤其是觸屏、Type Cover鍵盤蓋、Surface Pen、攝像頭這些組件在通用Linux內(nèi)核里往往沒有現(xiàn)成的驅(qū)動支持。你需要自己編譯內(nèi)核模塊、調(diào)整ACPI參數(shù)、配置固件加載路徑甚至要手動處理Secure Boot的簽名問題。整個過程踩坑是常態(tài)順利才是意外。這篇內(nèi)容適合兩類人一類是已經(jīng)在其他機(jī)器上用過Arch想把它搬到Surface上的老手另一類是對Linux有一定了解愿意花時間折騰想徹底掌控自己設(shè)備的技術(shù)愛好者。如果你只是想找個能替代Windows的桌面系統(tǒng)Ubuntu或者Fedora會是更省心的選擇。但如果你享受從零搭建的過程愿意為了完全自定義付出時間成本那Surface加Arch的組合值得一試。2. 安裝前的硬件與固件準(zhǔn)備2.1 確認(rèn)你的Surface型號和硬件配置Surface不同代際之間的硬件差異很大驅(qū)動支持程度也完全不同。Surface Pro 3到Pro 7之間的機(jī)型linux-surface社區(qū)的支持相對完善觸屏、Type Cover、Surface Pen基本都能正常工作。Surface Pro 8及以后的機(jī)型由于采用了新的Intel處理器和重新設(shè)計的內(nèi)部結(jié)構(gòu)驅(qū)動支持還在逐步完善中部分功能可能需要等待內(nèi)核更新。在開始之前你需要確認(rèn)幾個關(guān)鍵信息處理器型號、WiFi芯片型號、固態(tài)硬盤接口類型、以及是否支持從USB啟動。這些信息可以在Windows的設(shè)備管理器里查到或者用lspci和lsusb命令在Linux Live環(huán)境里查看。特別要注意WiFi芯片Surface早期機(jī)型用的是Marvell的芯片需要額外安裝固件后期機(jī)型換成了Intel的內(nèi)核自帶驅(qū)動就能支持。注意Surface Laptop系列和Surface Pro系列的硬件布局不同鍵盤蓋的驅(qū)動處理方式也不一樣。Laptop系列的鍵盤是固定的不需要額外處理Pro系列的Type Cover是磁吸可拆卸的需要內(nèi)核模塊支持才能正常識別。2.2 制作Arch Linux安裝U盤Arch的安裝鏡像每個月更新一次建議從官方鏡像站下載最新的ISO文件。下載完成后用dd命令或者Etcher之類的工具寫入U盤。如果你在Windows下操作Rufus是個不錯的選擇但要注意選擇DD模式而不是ISO模式否則可能無法正常啟動。# 在Linux下制作啟動U盤 sudo dd ifarchlinux-x86_64.iso of/dev/sdX bs4M statusprogress oflagsync寫入完成后還需要把linux-surface的驅(qū)動包也放到U盤里因?yàn)榘惭b過程中可能沒有網(wǎng)絡(luò)無法直接從AUR下載。你可以提前在另一臺機(jī)器上從linux-surface的GitHub倉庫下載最新的驅(qū)動包包括內(nèi)核模塊、固件文件和配置文件一并復(fù)制到U盤的根目錄。2.3 處理Secure Boot和BitLockerSurface出廠時默認(rèn)開啟Secure Boot這會導(dǎo)致Arch的安裝U盤無法啟動。你需要在UEFI設(shè)置里暫時關(guān)閉Secure Boot等系統(tǒng)安裝完成后再決定是否重新開啟。關(guān)閉的方法是關(guān)機(jī)后按住音量加鍵再按電源鍵進(jìn)入UEFI界面在Security選項卡里找到Secure Boot選項把它設(shè)為Disabled。BitLocker是另一個需要提前處理的問題。如果你的Surface開啟了設(shè)備加密在關(guān)閉Secure Boot或者調(diào)整分區(qū)之前一定要先在Windows里暫停BitLocker保護(hù)否則可能導(dǎo)致數(shù)據(jù)無法訪問。暫停的方法是在控制面板里找到BitLocker驅(qū)動器加密點(diǎn)擊暫停保護(hù)等系統(tǒng)安裝完成后再重新啟用。提示如果你打算完全抹掉Windows只裝Arch那BitLocker的問題就不存在了。但如果你想保留Windows做雙系統(tǒng)務(wù)必先暫停BitLocker并且記好恢復(fù)密鑰。3. Arch Linux基礎(chǔ)系統(tǒng)安裝3.1 啟動Live環(huán)境并連接網(wǎng)絡(luò)從U盤啟動后你會進(jìn)入Arch的Live環(huán)境。第一件事是確認(rèn)網(wǎng)絡(luò)連接。Surface的WiFi在Live環(huán)境里通常需要手動加載固件才能工作。如果你提前把linux-surface的固件包放在了U盤里可以先掛載U盤把固件復(fù)制到/lib/firmware目錄下然后重新加載WiFi模塊。# 掛載U盤 mkdir /mnt/usb mount /dev/sdX1 /mnt/usb # 復(fù)制固件 cp -r /mnt/usb/firmware/* /lib/firmware/ # 重新加載WiFi模塊 modprobe -r iwlwifi modprobe iwlwifi如果WiFi還是連不上可以用USB轉(zhuǎn)以太網(wǎng)適配器臨時有線連接。Surface只有一個USB口如果你需要用U盤安裝系統(tǒng)就得用擴(kuò)展塢或者USB Hub。這也是個坑有些便宜的Hub在Linux下識別不穩(wěn)定建議用帶獨(dú)立供電的型號。網(wǎng)絡(luò)連通后用ping命令確認(rèn)一下ping -c 3 archlinux.org3.2 分區(qū)與格式化Surface的固態(tài)硬盤通常是NVMe接口的設(shè)備名是/dev/nvme0n1。分區(qū)方案取決于你是否保留Windows。如果只裝Arch建議分三個區(qū)EFI分區(qū)512MB、交換分區(qū)大小等于內(nèi)存容量用于休眠、根分區(qū)占剩余空間。如果要雙系統(tǒng)需要在Windows的磁盤管理里先壓縮出空閑空間然后在安裝時手動創(chuàng)建分區(qū)。# 查看磁盤 lsblk # 分區(qū) cfdisk /dev/nvme0n1 # 格式化 mkfs.fat -F32 /dev/nvme0n1p1 mkswap /dev/nvme0n1p2 mkfs.ext4 /dev/nvme0n1p3 # 掛載 mount /dev/nvme0n1p3 /mnt swapon /dev/nvme0n1p2 mount --mkdir /dev/nvme0n1p1 /mnt/boot注意Surface的EFI分區(qū)默認(rèn)可能只有100MB對于Arch來說太小了因?yàn)閮?nèi)核和initramfs加起來可能超過這個大小。建議在分區(qū)時把EFI分區(qū)擴(kuò)大到512MB以上。如果雙系統(tǒng)不要動Windows的EFI分區(qū)單獨(dú)創(chuàng)建一個新的EFI分區(qū)給Arch用。3.3 安裝基礎(chǔ)系統(tǒng)用pacstrap安裝基礎(chǔ)包。除了base和linux還需要安裝linux-firmware、base-devel、NetworkManager、vim這些常用工具。如果你打算用linux-surface的內(nèi)核可以先裝官方內(nèi)核等系統(tǒng)起來后再替換。pacstrap -K /mnt base linux linux-firmware base-devel networkmanager vim git生成fstab文件genfstab -U /mnt /mnt/etc/fstab然后chroot進(jìn)去做后續(xù)配置arch-chroot /mnt3.4 基礎(chǔ)配置與引導(dǎo)安裝設(shè)置時區(qū)、語言、主機(jī)名這些常規(guī)操作就不贅述了。重點(diǎn)是引導(dǎo)安裝。Surface用的是UEFI引導(dǎo)需要安裝grub和efibootmgr或者用systemd-boot。我個人更推薦systemd-boot配置簡單和Arch的哲學(xué)更契合。# 安裝systemd-boot bootctl --path/boot install # 創(chuàng)建引導(dǎo)條目 cat /boot/loader/entries/arch.conf EOF title Arch Linux linux /vmlinuz-linux initrd /initramfs-linux.img options rootUUID$(blkid -s UUID -o value /dev/nvme0n1p3) rw quiet EOF設(shè)置root密碼創(chuàng)建普通用戶配置sudo權(quán)限這些常規(guī)步驟完成后就可以重啟了。重啟前記得退出chroot卸載分區(qū)exit umount -R /mnt reboot4. 觸屏驅(qū)動與Surface專用硬件支持4.1 linux-surface項目簡介linux-surface是一個社區(qū)驅(qū)動的項目專門為Surface設(shè)備提供Linux內(nèi)核補(bǔ)丁和驅(qū)動模塊。它包含了觸屏、Type Cover、Surface Pen、攝像頭、傳感器等組件的驅(qū)動支持。項目維護(hù)了一個自定義內(nèi)核集成了所有必要的補(bǔ)丁同時也提供了DKMS模塊可以配合官方內(nèi)核使用。安裝linux-surface有兩種方式一種是直接安裝他們編譯好的內(nèi)核包另一種是安裝DKMS模塊讓官方內(nèi)核也能加載這些驅(qū)動。前者更省事后者更靈活。我建議先用他們的內(nèi)核包等系統(tǒng)穩(wěn)定后再考慮切換到DKMS方案。4.2 添加linux-surface軟件源linux-surface項目維護(hù)了一個Arch的軟件源可以直接用pacman安裝。首先導(dǎo)入GPG密鑰curl -s https://raw.githubusercontent.com/linux-surface/linux-surface/master/pkg/keys/surface.asc \ | gpg --dearmor | tee /etc/pacman.d/gnupg/surface.gpg /dev/null然后在/etc/pacman.conf里添加軟件源[linux-surface] Server https://pkg.surfacelinux.com/arch/更新軟件包數(shù)據(jù)庫并安裝內(nèi)核pacman -Sy pacman -S linux-surface linux-surface-headers iptsdiptsd是Intel Precise Touch的守護(hù)進(jìn)程負(fù)責(zé)處理觸屏和觸控筆的輸入。安裝完成后需要把iptsd加入開機(jī)自啟systemctl enable iptsd4.3 觸屏校準(zhǔn)與配置觸屏驅(qū)動裝好后默認(rèn)的校準(zhǔn)參數(shù)可能不準(zhǔn)確尤其是屏幕邊緣區(qū)域。iptsd提供了一個校準(zhǔn)工具可以生成適合你設(shè)備的配置文件。運(yùn)行校準(zhǔn)工具后按照提示在屏幕上點(diǎn)擊幾個點(diǎn)它會自動計算校準(zhǔn)參數(shù)。# 運(yùn)行校準(zhǔn) iptsd-calibrate校準(zhǔn)完成后配置文件會保存在/etc/iptsd.conf。你可以手動調(diào)整一些參數(shù)比如觸摸靈敏度、手掌抑制閾值等。對于Surface Pro系列手掌抑制特別重要因?yàn)槠聊贿吙蚝苷瓕懽謺r手掌很容易誤觸。提示如果你用的是Surface Pen還需要確保iptsd的筆輸入模式配置正確。有些型號的Pen支持傾斜檢測和壓感這些功能需要在配置文件里顯式開啟。4.4 Type Cover鍵盤蓋的特殊處理Type Cover在Linux下的支持相對成熟但有些細(xì)節(jié)需要注意。鍵盤蓋的觸摸板默認(rèn)可能無法使用多點(diǎn)觸控手勢需要安裝libinput和libinput-gestures來配置。另外鍵盤蓋的Fn功能鍵比如調(diào)節(jié)亮度、音量可能需要額外的內(nèi)核模塊才能正常工作。# 安裝libinput pacman -S libinput libinput-gestures # 把用戶加入input組 usermod -aG input $USER如果鍵盤蓋的觸摸板完全沒反應(yīng)檢查一下內(nèi)核模塊是否加載lsmod | grep surface應(yīng)該能看到surface_aggregator、surface_hid這些模塊。如果沒有可能是內(nèi)核版本不對或者模塊被blacklist了。5. 常見問題與排查實(shí)錄5.1 觸屏完全沒反應(yīng)這是最常見的問題。首先確認(rèn)iptsd服務(wù)是否在運(yùn)行systemctl status iptsd如果服務(wù)沒起來查看日志journalctl -u iptsd -b常見原因有幾個一是內(nèi)核模塊沒加載檢查dmesg | grep surface看看有沒有報錯二是固件文件缺失iptsd需要從Windows分區(qū)提取一些固件文件如果你把Windows抹掉了可能需要從別的地方獲取三是Secure Boot沒關(guān)干凈有些Surface型號即使關(guān)了Secure Boot仍然會阻止未簽名的內(nèi)核模塊加載。5.2 WiFi頻繁斷連Surface的WiFi芯片在Linux下有時會出現(xiàn)斷連問題尤其是Marvell的芯片。解決方法是在NetworkManager配置里禁用WiFi的電源管理# 創(chuàng)建配置文件 cat /etc/NetworkManager/conf.d/wifi-powersave.conf EOF [connection] wifi.powersave 2 EOF # 重啟NetworkManager systemctl restart NetworkManager如果還是不穩(wěn)定可以嘗試更新linux-firmware包或者從linux-surface的倉庫里安裝專門的WiFi固件。5.3 休眠后無法喚醒Surface的休眠喚醒問題通常和ACPI有關(guān)。需要在內(nèi)核參數(shù)里添加一些選項# 編輯引導(dǎo)條目 vim /boot/loader/entries/arch.conf # 在options行添加 options ... mem_sleep_defaultdeep有些型號還需要禁用s2idle強(qiáng)制使用deep休眠模式。如果喚醒后觸屏失效可能是iptsd在休眠時沒有正確保存狀態(tài)可以嘗試在systemd里配置休眠前后的鉤子腳本。5.4 常見問題速查表問題現(xiàn)象可能原因排查方法解決方案觸屏無反應(yīng)iptsd未運(yùn)行systemctl status iptsd啟動服務(wù)并檢查日志W(wǎng)iFi斷連電源管理干擾iwconfig查看power management禁用WiFi powersave休眠無法喚醒ACPI配置錯誤dmesg查看休眠日志添加mem_sleep_defaultdeepType Cover失靈內(nèi)核模塊未加載lsmodgrep surface屏幕亮度無法調(diào)節(jié)背光驅(qū)動缺失ls /sys/class/backlight安裝surface背光模塊6. 系統(tǒng)優(yōu)化與日常使用建議6.1 內(nèi)核參數(shù)調(diào)優(yōu)Surface的硬件對內(nèi)核參數(shù)比較敏感合理的參數(shù)配置能顯著提升穩(wěn)定性和續(xù)航。除了前面提到的休眠參數(shù)還建議添加以下選項# /boot/loader/entries/arch.conf options ... quiet loglevel3 nowatchdognowatchdog可以禁用硬件看門狗減少不必要的喚醒對續(xù)航有幫助。loglevel3減少內(nèi)核日志輸出讓啟動過程更干凈。6.2 電源管理與續(xù)航優(yōu)化Surface的續(xù)航在Linux下通常比Windows短一些主要原因是電源管理不夠精細(xì)。安裝tlp和thermald可以改善這個問題pacman -S tlp thermald systemctl enable tlp systemctl enable thermaldtlp會自動應(yīng)用一套適合移動設(shè)備的電源管理策略包括CPU頻率調(diào)節(jié)、USB自動掛起、WiFi省電等。thermald負(fù)責(zé)溫度監(jiān)控和風(fēng)扇控制防止過熱降頻。注意Surface的散熱設(shè)計比較激進(jìn)風(fēng)扇啟動閾值較高。如果你覺得機(jī)器太熱可以手動調(diào)整thermald的配置降低風(fēng)扇啟動溫度。6.3 桌面環(huán)境選擇Arch不預(yù)設(shè)桌面環(huán)境你需要自己選。對于Surface這種觸屏設(shè)備GNOME和KDE Plasma對觸摸的支持最好。GNOME的手勢操作和觸屏優(yōu)化更成熟KDE的可定制性更強(qiáng)。如果你追求輕量XFCE或者Sway也可以但觸屏體驗(yàn)會打折扣。我個人用的是GNOME加上一些擴(kuò)展比如gestureImprovements和touchup前者增強(qiáng)觸摸板手勢后者優(yōu)化觸屏的點(diǎn)擊精度。安裝方法是pacman -S gnome gnome-extra systemctl enable gdm6.4 日常使用中的小技巧Surface的屏幕比例是32很多Linux桌面環(huán)境的默認(rèn)布局沒有針對這個比例優(yōu)化。你可以在GNOME的顯示設(shè)置里調(diào)整縮放比例或者用gnome-tweaks微調(diào)字體大小和窗口邊距。另外Surface的屏幕亮度調(diào)節(jié)在Linux下可能不夠線性低亮度區(qū)間變化太劇烈可以用brightnessctl手動設(shè)置更細(xì)的步進(jìn)。# 安裝brightnessctl pacman -S brightnessctl # 設(shè)置亮度為50% brightnessctl set 50%如果你經(jīng)常用Surface Pen做筆記或者畫圖xournalpp是個不錯的選擇它對壓感和傾斜的支持很好而且原生支持Wayland。7. 最后分享幾個踩坑心得整個安裝過程中最耗時的部分不是Arch本身而是Surface的硬件適配。linux-surface項目雖然提供了很多便利但文檔更新不及時有些步驟需要自己摸索。我的建議是遇到問題先去項目的GitHub Issues里搜一下大概率有人遇到過類似的情況。另外Surface的UEFI固件更新在Linux下比較麻煩官方?jīng)]有提供Linux下的更新工具。如果你需要更新固件可能得臨時裝回Windows或者用Windows To Go的方式從U盤啟動來更新。這一點(diǎn)在購買Surface之前就要考慮清楚。最后如果你打算長期在Surface上用Arch建議定期關(guān)注linux-surface的更新尤其是內(nèi)核版本升級后有些驅(qū)動可能需要重新編譯。DKMS方案在這方面更省心但配置起來稍微復(fù)雜一些。根據(jù)我的經(jīng)驗(yàn)等系統(tǒng)穩(wěn)定運(yùn)行一段時間后再切換到DKMS方案是比較穩(wěn)妥的做法。