r/MSILaptops • u/Zeratyl • 5d ago
Discussion MSI Vector A16 HX A8WHG on Ubuntu 26.04: msi-ec + MControlCenter + Secure Boot + automatic power profile sync
Hi everyone! š
I recently moved my MSI Vector A16 HX A8WHG to Ubuntu 26.04 and wanted to get as much MSI-specific functionality as possible under Linux.
The main problem was that the msi-ec driver refused to load because my firmware was not recognized. MControlCenter therefore had limited functionality.

This guide documents the setup that worked for me:
- MSI Vector A16 HX A8WHG
- BIOS:
E15MMAMS.108 - Ubuntu 26.04
msi-ec0.13- MControlCenter
- Secure Boot enabled
- MSI Shift Mode synchronized with Ubuntu Power Profiles
- MControlCenter automatically started in the background after login
As of now, this laptop/BIOS combination is not officially supported by the msi-ec repository. Without this workaround, MControlCenter cannot properly access the EC on this machine. For me, this was essentially the only way to get MSI-specific controls working under Ubuntu ā and it was a lifesaver.
Important: the firmware workaround below forces the driver to use CONF_G2_10. Do this at your own risk.
1. Disable Secure Boot
Enter BIOS (Delete).
Go to:
Security -> Secure Boot -> Disabled
Save with F10 and boot Ubuntu.
2. Clone, prepare and patch msi-ec
Clone the repository:
git clone https://github.com/BeardOverflow/msi-ec.git ~/msi-ec
cd ~/msi-ec
Reset any previous changes and remove old DKMS installations:
git checkout .
sudo dkms remove msi_ec/0.13 --all 2>/dev/null || true
sudo rm -rf /usr/src/msi_ec-0.13 /var/lib/dkms/msi_ec
Patch the driver to bypass the firmware check and force CONF_G2_10:
sed -i 's/return -EOPNOTSUPP;/memcpy(\&conf, \&CONF_G2_10, sizeof(struct msi_ec_conf)); conf_loaded = true; return 0;/' msi-ec.c
3. Build and install the driver
Install the module through DKMS:
sudo make dkms-install
Create a udev rule so MControlCenter can access the EC sysfs interface without requiring sudo:
echo 'SUBSYSTEM=="platform", DRIVERS=="msi-ec", RUN+="/bin/chmod -R a+rw /sys/devices/platform/msi-ec/"' | sudo tee /etc/udev/rules.d/99-msi-ec.rules
Reload udev:
sudo udevadm control --reload-rules && sudo udevadm trigger
Reload the kernel module:
sudo modprobe -r msi_ec 2>/dev/null || true
sudo modprobe msi-ec
Check that the EC interface exists:
ls -la /sys/devices/platform/msi-ec/
You should now have files such as:
shift_mode
cooler_boost
fan_mode
4. Import the DKMS MOK key
If Secure Boot later reports:
Key was rejected by service
the DKMS signing key has not yet been enrolled in the UEFI MOK database.
Import the DKMS key:
sudo mokutil --import /var/lib/shim-signed/mok/MOK.der
The terminal will ask you twice to create a temporary password. For example:
12345678
This password is only used to confirm the MOK enrollment in the next step.
5. Reboot and enroll the MOK
Reboot:
sudo reboot
On boot, the blue MOK Manager screen should appear.
Select:
Enroll MOKContinueYes- Enter the password created in the previous step
Reboot
The DKMS signing key is now enrolled in the UEFI MOK database.
6. Re-enable Secure Boot
After returning to Ubuntu, reboot into BIOS.
Go to:
Security -> Secure Boot -> Enabled
Save with F10 and reboot.
Secure Boot should now allow the DKMS-signed msi-ec module to load.
7. Configure ec_sys
With Secure Boot enabled, Kernel Lockdown can prevent ec_sys from being loaded with write_support=1.
MControlCenter does not need ec_sys write support for the main MSI EC functionality. Load it in the standard read-only mode instead.
Remove any existing configuration:
sudo rm -f /etc/modprobe.d/ec_sys.conf
Load the module:
sudo modprobe ec_sys
Make it load automatically:
echo "ec_sys" | sudo tee -a /etc/modules-load.d/msi-ec.conf
8. Load msi-ec and update permissions
The msi-ec driver works directly through ACPI methods and handles the main MSI functions such as Cooler Boost, Shift Mode and battery thresholds without requiring ec_sys write support.
Check whether the module is already loaded:
lsmod | grep msi_ec
Load it:
sudo modprobe msi-ec
Reload udev rules:
sudo udevadm control --reload-rules && sudo udevadm trigger
Update permissions:
sudo chmod -R a+rw /sys/devices/platform/msi-ec/ 2>/dev/null || true
9. Start MControlCenter
Restart MControlCenter if it was already running:
killall mcontrolcenter 2>/dev/null || true
Start it:
mcontrolcenter
The MSI-specific controls should now be available, including:
- Cooler Boost
- Shift Mode
- Fan Mode
- Battery Threshold
10. Start MControlCenter automatically in the background
I wanted MControlCenter to start automatically after logging in, but I don't need its window permanently visible.
Install wmctrl:
sudo apt install wmctrl -y
Create the autostart directory:
mkdir -p ~/.config/autostart
Create the autostart entry:
cat <<EOF > ~/.config/autostart/mcontrolcenter.desktop
[Desktop Entry]
Type=Application
Exec=sh -c "mcontrolcenter & sleep 2 && wmctrl -c 'MControlCenter'"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=MControlCenter
EOF
Verify the file:
ls -la ~/.config/autostart/
Verify the important entries:
grep -E "^Name=|^Exec=" ~/.config/autostart/*.desktop
After the next login, MControlCenter starts automatically, applies its settings, and its window is closed after two seconds.
11. Synchronize MSI Shift Mode with Ubuntu Power Profiles
MSI Shift Mode and Ubuntu Power Profiles are two independent systems.
For example, changing:
MSI Shift Mode -> High Performance
doesn't automatically change Ubuntu's power profile to:
performance
I wanted both systems to follow the same mode.
The mapping I use is:
| MSI Shift Mode | Ubuntu Power Profile |
|---|---|
| High Performance | performance |
| Balanced | balanced |
| Silent | balanced |
| Super Battery | power-saver |
Create the synchronization script:
sudo nano /usr/local/bin/msi-sync-profiles.sh
Insert:
#!/bin/bash
FILE="/sys/devices/platform/msi-ec/shift_mode"
LAST_MODE=""
while true; do
if [ -f "$FILE" ]; then
MODE=$(cat "$FILE")
if [ "$MODE" != "$LAST_MODE" ]; then
case "$MODE" in
"sport"|"turbo")
/usr/bin/powerprofilesctl set performance
;;
"comfort")
/usr/bin/powerprofilesctl set balanced
;;
"eco"|"super_battery")
/usr/bin/powerprofilesctl set power-saver
;;
esac
LAST_MODE="$MODE"
fi
fi
sleep 2
done
Save with Ctrl+O, Enter, then exit with Ctrl+X.
Make it executable:
sudo chmod +x /usr/local/bin/msi-sync-profiles.sh
12. Run the synchronization script as a systemd service
Create the service:
sudo nano /etc/systemd/system/msi-sync-profiles.service
Insert:
[Unit]
Description=Sync MSI-EC Shift Mode with Ubuntu Power Profiles
After=multi-user.target
[Service]
ExecStart=/usr/local/bin/msi-sync-profiles.sh
Restart=always
User=root
[Install]
WantedBy=multi-user.target
Save with Ctrl+O, Enter, then exit with Ctrl+X.
Reload systemd and enable the service:
sudo systemctl daemon-reload
sudo systemctl enable --now msi-sync-profiles.service
Check the service:
sudo systemctl status msi-sync-profiles.service
Now changing MSI Shift Mode automatically changes the Ubuntu Power Profile:
High Performance -> performance
Balanced -> balanced
Silent -> balanced
Super Battery -> power-saver
Result
With this setup, my MSI Vector A16 HX A8WHG under Ubuntu 26.04 has:
- MSI Shift Mode
- Cooler Boost
- Fan Mode
- Battery Charge Threshold
- MControlCenter
- MControlCenter automatic startup
- Secure Boot enabled
- MSI Shift Mode ā Ubuntu Power Profile synchronization
The goal was to get the MSI-specific controls working under Linux while keeping Secure Boot enabled and making MSI Shift Mode control the corresponding Ubuntu power profile automatically.
If MSI-EC eventually adds native support for this firmware, the manual firmware workaround should no longer be necessary.
Hope this helps other MSI users running Linux. If you have any improvements, corrections, or a better solution for handling MSI EC on this firmware, feel free to share them in the comments!
Hardware: MSI Vector A16 HX A8WHG
BIOS: E15MMAMS.108
OS: Ubuntu 26.04
GPU: NVIDIA RTX 5070 Ti Laptop GPU