Lỗi “Could not open /dev/vmmon” trên VMware khi Ubuntu Linux bật Secure Boot

Sau khi cài VMware Workstation trên Ubuntu, bạn có thể gặp thông báo này khi khởi động máy ảo:

Could not open /dev/vmmon: No such file or directory.
Please make sure that the kernel module `vmmon' is loaded.

Nguyên nhân thường gặp là Secure Boot chặn module VMware chưa được ký. Bài viết này hướng dẫn xử lý bằng cách ký module, giúp bạn tiếp tục sử dụng VMware mà vẫn giữ Secure Boot.

Vì sao xuất hiện lỗi?

VMware sử dụng hai module kernel:

  • vmmon: hỗ trợ chạy máy ảo.
  • vmnet: hỗ trợ mạng ảo của VMware.

Nếu vmmon không load được, VMware không thể khởi động máy ảo.

Khi Secure Boot bật, hệ thống từ chối module chưa có chữ ký tin cậy. Vì vậy, dù VMware đã cài xong và file module tồn tại, máy ảo vẫn không chạy được.

Không phải mọi lỗi /dev/vmmon đều do Secure Boot. Module chưa được biên dịch hoặc không tương thích với kernel cũng có thể gây lỗi tương tự. Tuy nhiên, bài này chỉ tập trung xử lý lỗi do chưa ký module.

Ký module

Chúng ta sẽ tạo một khóa riêng để ký module và một chứng chỉ công khai để đăng ký với hệ thống.

Chạy các lệnh sau trong cùng một cửa sổ Terminal:

1. Tạo khóa ký

mkdir -p ~/.local/share/vmware-signing
cd ~/.local/share/vmware-signing
umask 077

openssl req -new -x509 -newkey rsa:2048
-keyout MOK.priv -outform DER -out MOK.der
-nodes -days 3650 -subj "/CN=VMware/"

Hai file được tạo:

  • MOK.priv: khóa riêng, dùng để ký module. Giữ kín file này.
  • MOK.der: chứng chỉ công khai, dùng để đăng ký khóa với hệ thống.

umask 077 giới hạn quyền truy cập hai file trên. Bạn có thể bỏ lệnh này vì chúng ta chỉ ký một lần rồi không dùng nữa. Nếu bạn kỹ tính thì cứ để nó chạy.

2. Ký module và đăng ký khóa

sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file
sha256 MOK.priv MOK.der "$(modinfo -n vmmon)"

sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file
sha256 MOK.priv MOK.der "$(modinfo -n vmnet)"

sudo mokutil --import MOK.der

Lệnh cuối yêu cầu đặt mật khẩu tạm để xác nhận khóa khi khởi động lại. Bạn đặt mật khẩu bất kỳ, không trùng mật khẩu login. Hãy ghi nhớ mật khẩu này. Chúng ta sẽ dùng nó để xác nhận đăng ký khóa ở lần khởi động tiếp theo.

Kiểm tra lại:

modinfo -F signer vmmon
modinfo -F signer vmnet

Cả hai sẽ hiển thị:

VMware

Sau đó khởi động lại.

3. Xác nhận khóa khi khởi động

Enroll MOK

Khi khởi động lại, màn hình MOK Manager sẽ xuất hiện. Chọn lần lượt:

  1. Enroll MOK
  2. Continue
  3. Yes
  4. Nhập mật khẩu tạm đã đặt ở bước 2
  5. Reboot

4. Nạp module và thử lại VMware

Sau khi vào lại Ubuntu, mở Terminal:

sudo modprobe vmmon
sudo modprobe vmnet

Kiểm tra:

lsmod | grep -E 'vmmon|vmnet'
ls -l /dev/vmmon

Nếu hai module đã được nạp và /dev/vmmon xuất hiện, mở VMware và thử khởi động máy ảo.

Lưu ý: Khi cập nhật VMware hoặc kernel, module có thể được build lại và cần ký lại.

Hai file đã tạo ở bước 1 nên giữ lại để dùng trong trường hợp này. Lí do:

  • MOK.priv: khóa riêng để ký lại module sau khi cập nhật kernel hoặc VMware.
  • MOK.der: chứng chỉ công khai, dùng cùng khóa riêng khi ký và kiểm tra đăng ký.

Nếu xóa mà không có bản sao, lần sau ký lại bạn sẽ phải tạo khóa mới và làm lại bước Enroll MOK + khởi động lại máy.

Bình luận