Cài Linux (dual boot) lên máy MacBook Pro

Cài Linux (dual boot) lên máy MacBook Pro
Photo by Ugi K. from Unsplash

Chiếc MacBook Pro đời 2011 của tôi đã quá cũ. Từ lâu nó đã không được cập nhật hệ điều hành, và gần đây một số phần mềm đã bắt đầu không hoạt động trên hệ điều hành cũ nữa. Không chạy được phần mềm thì máy tính coi như phế, nên tôi phải tìm một cách nào đó để giải quyết vấn đề. Lựa chọn của tôi là cài đặt một bản phân phối Linux trên nó.

Lựa chọn bản phân phối Linux

Máy tính của tôi, tuổi đời khoảng 12 năm, gần như đã bị khai tử. Nó không còn được Apple hỗ trợ từ lâu, phiên bản macOS cuối cùng đang chạy là 10.13.6 (High Sierra). Trong khi đó, phiên bản mới nhất hiện nay là 13.5.1 (Ventura) và macOS Sonoma cũng sắp ra mắt.

Hầu hết các ứng dụng trên macOS đã chuyển sang hỗ trợ hiển thị trên màn hình có độ phân giải cao, và những ứng dụng đó hiển thị rất xấu trên những máy tính cũ có độ phân giải thấp như máy tính của tôi.

Hệ điều hành trên máy cũng đã quá cũ và nhiều ứng dụng bắt đầu không thể chạy được nữa. Một vài ứng dụng thông báo phải cập nhật hệ điều hành mới có thể chạy được. Safari cũng có dấu hiệu lỗi thời, một vài trang web mở ra không hiển thị được.

Tóm lại, máy tính của tôi vẫn chạy được, nhưng hơi phế. Tôi cần một sự nâng cấp về phần mềm để có thể tiếp tục sử dụng máy tính. Không thể cập nhật macOS, tôi cần giải pháp từ những hệ điều hành khác.

Apple có sẵn Boot Camp để người dùng có thể dễ dàng cài đặt Windows. Thế nhưng, bản thân Boot Camp cũng là một tiện ích cũ, được thiết kế để cài đặt Windows 7, một hệ điều hành cũng đã lỗi thời. Những phiên bản mới hơn như Windows 10 hay Windows 11 không chắc đã cài đặt được với Boot Camp, mà dù cài đặt được thì cũng không tránh khỏi giật, lag vì phần cứng của máy không đáp ứng được.

desperate
Nguồn: didongviet

Tôi tìm đến Linux. Việc cài đặt Linux có thể mất nhiều thời gian và công sức, nhưng đây là giải pháp tốt nhất tôi có được. Đổi lại, tôi có thể yên tâm sử dụng máy tính thêm rất lâu nữa.

Các bản phân phối Linux vẫn được cài đặt và sử dụng trên server, ngay cả khi chúng có cấu hình khá yếu. So sánh server và máy cá nhân cũng hơi khập khiễng, nhưng qua đó cũng có thể thấy rằng, Linux có thể chạy được trên những máy tính cấu hình thấp.

Có nhiều bản phân phối Linux khác nhau, lựa chọn của tôi là Xubuntu. Tôi chọn Xubuntu đơn giản vì nó là phiên bản gọn nhẹ hơn của Ubuntu. Ubuntu là một bản phân phối dễ sử dụng, bản phân phối tôi thấy quen thuộc nhất. Nhưng Ubuntu gốc tương đối nặng, vì vậy tôi chọn phiên bản Ubuntu dùng Xfce nhẹ nhàng hơn.

Đây là lựa chọn hoàn toàn mang tính cá nhân. Tôi cũng không thể dùng hết bản phân phối này đến bản phân phối khác để so sánh được. Mà việc đó cũng không cần thiết. Tôi cần một bản phân phối nhẹ nhàng, dễ sử dụng để chạy trên một chiếc máy tính tương đối cũ. Xubuntu đáp ứng được nhu cầu của tôi, và tôi chọn nó. Việc cần làm là download bản cài đặt về, xong.

Nếu đi sâu vào so sánh, Arch Linux có lẽ mới là lựa chọn tốt cho phần cứng cũ. Thế nhưng Arch Linux không phải thứ dành cho tôi. Nó không dễ dàng cài đặt và sử dụng, yêu cầu người dùng phải có kỹ năng và cả thời gian.

Tôi sẽ cài đặt song song hai hệ điều hành macOS và Xubuntu. Bởi vì tôi vẫn còn dữ liệu cũ trên macOS và tôi muốn tiếp tục sử dụng nó. Nhưng sau này, khi mọi thứ đều ổn, tôi sẽ chuyển sang dùng Linux hoàn toàn.

Chuẩn bị ổ USB

Để cài đặt Linux, trước hết cần phải có USB để boot. Máy tính tôi vẫn còn ổ quang, nhưng USB vẫn là phương án đơn giản hơn rất nhiều. Tùy bản cài đặt khác nhau mà yêu cầu dung lượng ổ USB khác nhau. Bộ cài Xubuntu (22.04) có dung lượng 3.05GB nên cần USB có dung lượng khoảng 4GB trở lên là thoải mái.

Định dạng lại USB

Mục đích của bước này chuyển đổi USB về định dạng FAT. Nếu USB đang dùng định dạng này rồi có thể bỏ qua.

Nếu USB cắm vào máy Mac mà không nhận, có thể do sử dụng một định dạng mà macOS không hiểu (ví dụ boot USB). Để định dạng lại phải xóa toàn bộ dữ liệu như sau. Nếu máy Mac nhận USB rồi thì bỏ qua bước này, tiếp tục bước phía dưới.

  • Xem danh sách ổ đĩa và xác định ổ USB

    $ diskutil list
    ...
    /dev/disk2 (external, physical):
    #:                       TYPE NAME                    SIZE       IDENTIFIER
    0:      GUID_partition_scheme                        *15.5 GB    disk2
    1:                        EFI EFI                     209.7 MB   disk2s1
    2:       Microsoft Basic Data UNTITLED                15.2 GB    disk2s2
    
  • Xóa toàn bộ dữ liệu

    $ diskutil eraseDisk free EMPTY /dev/disk2
    Started erase on disk2
    Unmounting disk
    Creating the partition map
    Waiting for partitions to activate
    Finished erase on disk2
    

Sau đó, tiếp tục định dạng

  • Cắm ổ USB vào máy tính
  • Mở Disk Utility, chọn ổ USB
  • Chọn Erase
  • Đặt tên bất kỳ cho ổ USB, chọn định dạng MS-DOS (FAT) và click Erase để định dạng lại

Tạo USB boot

Có nhiều công cụ khác nhau để tạo USB boot, và cũng có nhiều hướng dẫn khác nhau trên Internet. Tôi chọn cách dùng công cụ có sẵn của macOS cho tiện, đỡ phải cài đặt thêm phần mềm, đó là lệnh dd.

Dùng lệnh diskutil list để kiểm tra danh sách các ổ cứng và xác định ổ USB tương tự như phần trước. Tiếp theo là unmount ổ USB và ghi nội dung vào nó:

$ diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful
$ sudo dd if=xubuntu-22.04.3-desktop-amd64.iso of=/dev/disk2 bs=1m
2907+1 records in
2907+1 records out
3049039872 bytes transferred in 570.606097 secs (5343511 bytes/sec)

Lệnh dd trên macOS không hiển thị tiến độ. Muốn kiểm tra có thể ấn Control+T.

Có một vài hướng dẫn nói cần chuyển định dạng từ ISO sang DMG trước khi ghi dữ liệu vào USB. Nhưng việc này không cần thiết, có thể ghi trực tiếp dữ liệu từ file ISO vào ổ cứng mà không cần chuyển đổi gì.

Tạo phân vùng cài đặt Linux

Để cài đặt hai hệ điều hành song song, phải chuẩn bị trước các phân vùng (partition) ổ cứng cho Linux. Có lẽ do nhu cầu cài đặt Linux lên máy Mac quá nhỏ, nên các bộ cài đặt không được thiết kế để tự động phân vùng, khác hẳn với việc cài đặt song song Linux và Windows.

Linux yêu cầu phải có 2 phân vùng để hoạt động: 1 phân vùng để cài đặt hệ điều hành, 1 phân vùng khác cho bộ nhớ swap. Các bước để tạo phân vùng mới như sau:

  • Mở Disk Utility, chọn ổ cứng trong máy
  • Click Partition (chứ không phải Volume), sẽ có thông báo hiện ra (hỏi lại có chắc là partition hay không), chọn partition để tiếp tục
  • Click dấu cộng (+) để tạo partition mới
  • Đặt tên bất kỳ, chọn dung lượng sao cho đáp ứng đủ nhu cầu cài đặt Linux (tôi dự định sẽ dùng Linux là chính nên chọn 50GB) và định dạng MS-DOS (FAT). Ở bước này, cần phải chọn dung lượng trước khi định dạng. Bởi vì sau khi chọn định dạng thì khung chọn dung lượng không thể thay đổi được nữa. Không biết đây là lỗi hay tính năng.
  • Click Apply để tạo partition

Tiếp tục các bước trên với phân vùng swap. Lưu ý, phân vùng swap nên có dung lượng gấp đôi RAM. Ví dụ tôi có 4GB RAM, tôi tạo phân vùng swap 8GB. Nếu không thể tạo phân vùng, nguyên nhân là do FileVault đang kích hoạt để mã hóa ổ cứng. Chỉ cần tắt nó đi là xong.

Định dạng FAT cùng với dung lượng của hai phân vùng vừa tạo cực kỳ quan trọng, sẽ được dùng trong bước cài đặt. Vì vậy, tốt nhất, hãy chọn dung lượng sao cho dễ dàng phân biệt với phân vùng còn lại của macOS. Lưu ý rằng, macOS tính dung lượng theo chuẩn SI (1GB = 1000MB), nhưng khi cài đặt Xubuntu lại tính theo chuẩn Windows (1GB = 1GiB = 1024MB), vì vậy giá trị sẽ có sai lệch đôi chút.

Cài đặt bootloader

Bootloader được cài đặt sẵn của cả macOS và Xubuntu (grub) đều không tương thích lẫn nhau. Để tiện cho việc sử dụng song song hai hệ điều hành, cần cài đặt thêm bootloader thứ ba. Việc cài đặt này không bắt buộc. Nếu không cài đặt, mỗi lần khởi động máy cần giữ phím Option để chọn hệ điều hành.

Bootloader thường được khuyên dùng là rEFInd, phiên bản mới nhất vào thời điểm tôi viết bài là 0.14.0.2. Tuy vẫn chưa ra bản 1.0, nhưng tôi đã dùng và nó đáp ứng tốt nhu cầu của mình.

Tắt System Integrity Protection

System Integrity Protection (SIP) là một tính năng để tăng cường bảo mật cho macOS. Mặc định sẽ được kích hoạt sẵn, tính năng này ngăn chặn những phần mềm độc lại (malware) được cài đặt và truy cập hệ thống file trên máy tính.

Cũng vì bảo mật, tính năng này thỉnh thoảng có thể gây khó chịu. Ví dụ, một số ứng dụng không xác định được nhà phát triển sẽ không được cấp quyền để thực thi. Bình thường việc này có thể giải quyết dễ dàng, chỉ cần vào Settings và cho phép ứng dụng hoạt động là được.

Thế nhưng, với trường hợp bootloader thì khác. rEFInd không thể cài đặt được nếu SIP được kích hoạt. Vì vậy, muốn cài đặt rEFInd, trước hết phải tạm thời tắt SIP đi trước. Các bước thực hiện như sau:

  • Bật máy vào Recovery mode bằng cách bật máy (hoặc khởi động lại) và giữ tổ hợp phím Command + R
  • Khi máy đã vào Recovery mode, chọn Utilities trên thanh menu phía trên, sau đó chọn Terminal
  • Chạy lệnh:

    $ csrutil disable
    
  • Click biểu tượng Apple và khởi động lại máy

Sau khi cài đặt xong rEFInd, có thể kích hoạt lại SIP theo các bước như trên, thay lệnh csrutil enable vào là được.

Cài rEFInd

  • Tải bản cài đặt rEFInd về và giải nén
  • Chạy lệnh sau để cài đặt:
    $ ./refind-install
    

Sau khi cài đặt xong rEFInd, tắt máy, chờ một lúc rồi bật lại để xem kết quả (nhất định phải tắt máy chứ không phải khởi động lại). Sau khi cài đặt thành công, mỗi lần khởi động máy, rEFInd sẽ hiển thị các tùy chọn hệ điều hành cho người dùng lựa chọn.

Cài đặt Linux

Boot từ USB

  • Cắm USB đã chuẩn bị ở bước trước vào máy tính.
  • Khởi động lại máy. Sau khi khởi động lại, rEFInd sẽ hiển thị tùy chọn cho phép khởi động từ USB. Nó sẽ có tên là Boot EFI\boot\... và biểu tượng Tux rất dễ phân biệt.
  • Chọn boot từ USB và Xubuntu sẽ được khởi động, sau khi boot Xubuntu sẽ đưa ra lựa chọn dùng thử hoặc cài đặt. Lưu ý rằng, trong giai đoạn này Xubuntu chưa thể kết nối Wi-Fi, vì vậy muốn dùng Internet bắt buộc phải cắm dây.

Cài đặt

Khi đã sẵn sàng, click vào Install để bắt đầu quá trình cài đặt Xubuntu lên máy tính. Việc cài đặt hoàn toàn giống như quá trình cài Xubuntu hoặc Ubuntu thông thường.

Riêng bước chọn “Installation Type”, cần phải chọn phân vùng cài đặt, để Xubuntu và macOS có thể chạy song song. Xubuntu chỉ cung cấp 2 lựa chọn là xóa toàn bộ ổ cứng và “Something Else” để thiết lập thủ công. Chọn “Something Else”, click Continue để tiếp tục.

Ở màn hình tiếp theo, một danh sách các phân vùng ổ cứng được hiển thị. Lúc này, cần phải xác định phân vùng được chuẩn bị sẵn cho việc cài đặt Linux. Thông tin hữu ích duy nhất trong lúc này là định dạng của phân vùng (fat) và dung lượng của nó (tính bằng MB). Những thông tin khác, như dev/diskX gần như vô dụng, không thể dựa vào đó để xác định phân vùng nào được. Ngoài các phân vùng của ổ cứng máy tính, các phân vùng của USB đang boot cũng có trong danh sách, nên thông tin hơi rối và có thể gây nhầm lẫn.

Click đúp vào phân vùng dự định để cài đặt, chọn Use as Ext4 journaling file system, chọn Mount point là / và chọn Format. Click OK để định dạng lại phân vùng. Hình ảnh của thao tác này tương tự như ảnh dưới đây:

partition
Nguồn: yna87 @ Hatena Blog

Làm tương tự với phân vùng swap. Xác định phân vùng dựa trên định dạng và dung lượng của nó. Click đúp vào phân vùng và chọn Use as swap area, sau đó click OK.

Ở phía dưới của danh sách phân vùng, chọn Device for boot loader installation đúng phân vùng cài đặt. Lưu ý rằng, ở bất kỳ bước nào, chọn sai phân vùng ổ cứng có thể dẫn đến việc mất dữ liệu trên macOS, nên mọi thao tác phải hết sức cẩn thận.

Sau khi đã chắc chắn mọi thiết lập đều chính xác hoàn toàn (điều quan trọng nên kiểm tra 3 lần cho chắc) click “Install Now” để cài đặt. Các bước tiếp theo diễn ra như bình thường. Mất khoảng 15 phút để chờ việc cài đặt hoàn tất.

Sau khi cài đặt xong, Xubuntu đã sẵn sàng để sử dụng. Các phím media như tăng/giảm độ sáng màn hình, tăng/giảm âm lượng cũng hoạt động tốt. Phím Command được nhận thành Super. Tôi chưa quen với Xfce lắm, nhưng cũng không gặp vấn đề gì quá lớn. Xubuntu chạy tốt hơn nhiều một phiên bản macOS đã lỗi thời. Chỉ có điều, các tổ hợp phím tắt của Linux rất khác so với macOS nên tôi thường xuyên bấm nhầm. Sẽ phải mất một thời gian để làm quen.

xubuntu
Ảnh chụp màn hình

Sửa một số lỗi sau cài đặt

Sửa bootloader

Sau khi cài đặt thành công, bootloader của Xubuntu (grub) sẽ được ưu tiên tải trước. Do đó, mỗi khi bật máy, Xubuntu sẽ tự động được khởi động mà không cho người dụng lựa chọn gì cả. Muốn chuyển sang macOS phải nhấn giữ Option trong lúc khởi động để menu bootloader hiện ra.

Để khắc phục tình trạng này, việc cần làm là đưa rEFInd trở thành bootloader chính. Việc này có thể thực hiện thông qua efibootmgr (trên Linux). Đầu tiên, kiểm tra các bootloader hiện tại:

$ sudo efibootmgr
BootCurrent: 0000
BootOrder: 0000,0080
Boot0000* xubuntu
Boot0080* Mac OS X
Boot0081* Mac OS X
Boot0082*
BootFFFF*

Theo kết quả trên, bootloader của Xubuntu đang được ưu tiên hơn. Giờ cần đổi lại thứ tự một chút:

$ sudo efibootmgr -o 0080,0000

Việc này sẽ đưa rEFInd trở thành bootloader được tải đầu tiên. Từ giờ trở đi, mỗi lần mở máy, rEFInd sẽ tải trước và hiển thị menu cho phép lựa chọn hệ điều hành muốn sử dụng.

Kết nối Wi-Fi

Sau khi cài đặt xong, thì máy tính chưa thể kết nối Wi-Fi được. Nguyên nhân là do driver của card Wi-Fi chưa được cài đặt. Rất may, máy của tôi vẫn còn cổng Ethernet để có thể kết nối Internet, việc cài đặt driver cũng không quá khó khăn.

Máy Mac dùng card Wi-Fi của Broadcom. Có một hướng dẫn cài đặt driver rất đầy đủ và chi tiết ở đây. Mỗi đời máy sẽ được trang bị phần cứng khác nhau, driver cần cài cũng khác nhau, với trường hợp của tôi thì chỉ cần cài driver như sau:

$ sudo apt-get install firmware-b43-installer

Sau khi khởi động lại máy thì card Wi-Fi hoạt động luôn, tôi chỉ cần chọn Wi-Fi và kết nối như bình thường.

Layout bàn phím

Có lẽ không nhiều người sẽ gặp phải vấn đề này. Máy Mac của tôi dùng bàn phím layout tiếng Nhật (jp). Tôi đã chọn layout lúc cài đặt và mọi thứ đều ổn. Thế nhưng, vấn đề nảy sinh khi tôi cắm bàn phím rời dùng layout tiếng Anh (us).

Hai bàn phím có layout khác nhau, nhưng Xubuntu gán chúng cho cùng một layout (mặc định là layout tiếng Nhật) nên phát sinh nhiều trường hợp bấm sai phím. Tôi đã thiết lập (qua giao diện đồ họa) 2 layout cho bàn phím khác nhau, thiết lập phím tắt Alt+CapsLock để chuyển đổi giữa hai layout này. Thế nhưng cách này vẫn còn nhiều vấn đề:

  • Mỗi khi chuyển đổi layout thì layout của cả hai bàn phím (rời + liền) đều thay đổi. Có thể tạm khắc phục bằng cách dùng bàn phím nào là chính là chuyển và layout đó.
  • Phím tắt Alt+CapsLock chỉ hoạt động với bàn phím liền. Bằng cách vi diệu nào đó, phím Alt+CapsLock trên bàn phím rời của tôi lại có nghĩa là ScrollLock. Điều vi diệu hơn nữa là, sau khi bấm Alt+CapsLock trên bàn phím rời thì Alt+CapsLock trên bàn phím liền cũng mất luôn tác dụng, chỉ còn tương đương bật/tắt CapsLock.
  • Sau khi tổ hợp phím mất tác dụng, không còn cách nào khác để chuyển đổi layout. Chỉ còn cách khởi động lại máy để quay về mặc định.
  • Chuyển sang tiếng Anh thì bàn phím không nhận phím `~ và tôi chẳng biết làm thế nào để gõ những ký tự này.
  • Việc chuyển đổi layout từ tiếng Anh sang Nhật thỉnh thoảng phát sinh lỗi. Sau khi chuyển về tiếng Nhật, bàn phím không nhận các ký tự alphabet nữa, mà chỉ nhận các ký tự từ bảng chữ cái tiếng Nhật.

Sau một hồi tìm hiểu, thì Xubuntu nói riêng và Linux nói chung vẫn có khả năng thiết lập layout riêng cho từng bàn phím. Thế nhưng việc này phải thực hiện thông qua lệnh setxkbmap. Để làm việc này, đầu tiên phải lấy được id của bàn phím:

$ xinput list | grep key
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ Power Button                              id=9    [slave  keyboard (3)]
    ↳ Sleep Button                              id=10   [slave  keyboard (3)]
    ↳ Apple Inc. Apple Internal Keyboard / Trackpad id=11   [slave  keyboard (3)]
    ↳ FaceTime HD Camera (Built-in):            id=13   [slave  keyboard (3)]
    ↳ Apple Computer, Inc. IR Receiver          id=14   [slave  keyboard (3)]
    ↳ SONiX USB Keyboard                        id=15   [slave  keyboard (3)]

Với thiết lập mặc định layout tiếng Nhật, tôi chỉ cần thiết lập layout tiếng Anh cho bàn phím rời nữa là xong:

$ setxkbmap -device 15 -layout us

Sau khi thiết lập xong, tôi đã có thể dùng mỗi bàn phím một layout mà không gặp vấn đề như trước nữa. Thế nhưng, tác dụng của lệnh setxkbmap không kéo dài được lâu. Lệnh này sẽ mất tác dụng sau khi bàn phím được rút ra/cắm vào, sau khi khởi động lại máy hoặc sau khi logout và login lại. Không những thế, mỗi lần như vậy, id của bàn phím cũng thay đổi.

Mỗi lần cắm bàn phím lại phải gọi lệnh để lấy id, sau đó thiết lập layout cho id đó thật quá thủ công. Để mọi thứ dễ dàng hơn, tôi nghĩ ra một cách: thiết lập bàn phím mặc định layout us, và chạy script để chuyển layout bàn phím liền thành jp. Sau này, mỗi lần cắm bàn phím rời sẽ nhận layout mặc định. Vậy là khỏi cần chạy script lại nữa.

Để thiết lập lại layout mặc định, tôi sửa lại XKBLAYOUT trong file /etc/default/keyboard thành us, còn lại giữ nguyên. Đúng ra, với layout us, nên sửa lại XKBMODELpc104 (bàn phím tiêu chuẩn 104 phím). Nhưng 104 hay 105 phím tôi thấy không khác gì nhau. Cứ để nguyên vậy cho tiện, sau này thiết lập layout jp không cần thay đổi model.

...
XKBLAYOUT="us"
...

Để chuyển đổi layout cho bàn phím liền, cần chạy 2 dòng script mỗi khi khởi động máy. Có nhiều cách khác nhau, tôi chọn cách thêm vào file .profile có sẵn cho nhanh.

kbd=$(xinput --list | grep "Apple Internal Keyboard" | awk -F'=' '{print $2}' | cut -c 1-2)
setxkbmap -device "${kbd}" -layout jp

Đến đây mọi thứ đã tương đối ổn. Chỉ còn một vấn đề nhỏ, .profile chỉ được gọi sau khi đăng nhập. Cách nào cũng sẽ như vậy thôi, setxkbmap có tác dụng cho từng X session, nên phải chờ sau khi X Window được khởi động và người dùng đã đăng nhập xong.

Trước đó, khi nhập mật khẩu, bàn phím sẽ dùng layout tiếng Anh. Nên nếu sử dụng mật khẩu có ký tự đặc biệt sẽ gặp chút rắc rối. Giải pháp là tránh dùng ký tự đặc biệt trong mật khẩu là xong. Máy tính cá nhân, dùng ở nhà cũng không cần mật khẩu quá mạnh 😄.

Tôi xin lỗi nếu bài viết có bất kỳ typo nào. Nếu bạn nhận thấy điều gì bất thường, xin hãy cho tôi biết.

Nếu có bất điều gì muốn nói, bạn có thể liên hệ với tôi qua các mạng xã hội, tạo discussion hoặc report issue trên Github.