Vector A16 HW A8WHG-018 unter Linux - WIFI Fix, Lüftersteuerung und Powersettings

stefangun

Jungspund
Registriert
29. Juli 2026
Beiträge
13
Hallo,

will das Notebook mit Linux betreiben. Klappt auch alles ganz prima nur WIFI geht nicht - sieht so aus als ob es vom BIOS oder was weiß ich deaktiviert wird.

"rfkill list" zeigt "Hard Blocked" an.

Hat jemand eine Idee was ich tun kann? System ist Dual-Boot, also Linux auf externer SSD installiert, die eingebaute SSD hat das Stock Windows drauf - da funkt WIFI ganz vorzüglich.

Danke schonmal,
Stefan.
 
Moin,

das WLAN Modul ist weder im BIOS noch über den FN+F10 -meine ich- deaktiviert worden? Flugzeugmodus
 
Ich denke nicht dass man das kann - habe (auch im Advanced BIOS Mode) nichts bzgl. WIFI oder so gefunden. Und Abschalten per FN+F6 geht nur Bluetooth (zumindest ist da ein Bluetooth-Symbol drauf). Das tut aber auch nichts leider.
 
Mit welcher Distribution von Linux?
Du hast den MediaTek MT7925 als Wireless und BT Modul verbaut und wenn man nach "issues MediaTek MT7925 and Linux" sucht ist der erste Hinweis das es sein kann das man unter Linux ein FW Update für das Modul ausführen muss.

Ich Frage nach der Linux Distribution da es je nach Linux unterschiedliche Optionen geben kann um festzustellen ob das Linux die entsprechende Firmware bereits hat oder nicht.
 
Linux Mint neueste Version. Basiert auf Ubuntu 24.04 LTS. Treiber für MT7922 (Modul mt7921e) sind geladen, Chip wird erkannt (u.a. HW Revision kann ausgelesen werden).
Ist die Funk-Karte austauschbar bei dem Notebook?
 
Ja, wenn du das Gerät offen hast sollte das Modul links zu sehen sein neben der SSD.
 
So, habs gefixt. Der Treiber für MT7922 (Kernel-Modul mt7921e) liest fälschlicherweise aus dem MSI BIOS aus, dass der WIFI Chip deaktiviert sein soll. Das scheint ein Bug im BIOS zu sein.

Also Nerds - wer WIFI auf der Kiste zum Laufen bringen will, muss den folgenden Patch anwenden. Also Linux Kernel Sources klonen, auf v7.0 auschecken, patchen und Kernel neubauen. Hier die ungefähren Schritte:

Guide: Patching and Building Kernel v7.0 for MSI Vector (MT7921/MT7922 Wi-Fi Fix)​

1. Install Required Build Dependencies​

Before starting, install all necessary tools and libraries to compile the Linux kernel on Debian/Ubuntu/Mint:
sudo apt update
sudo apt install -y build-essential libncurses-dev bison flex libssl-dev libelf-dev bc git dwarves zstd

2. Clone the Kernel Source & Checkout v7.0​

Clone the official Linux kernel tree (or a mirror) and switch to the v7.0 tag:
# Create a workspace directory
mkdir -p ~/kernel-workspace && cd ~/kernel-workspace

# Clone the kernel source repository
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git linux-kernel-src
cd linux-kernel-src

# Checkout the v7.0 release
git checkout v7.0

3. Apply the msi_vector.patch​

Save your msi_vector.patch file into ~/kernel-workspace/ and apply it to the source tree:
# Apply the patch from the parent folder
patch -p1 < ../msi_vector.patch

4. Duplicate Current System Kernel Configuration​

To make sure all hardware drivers for your MSI Vector remain fully functional, copy your running system's config into the kernel source tree:
# Copy existing configuration from /boot
cp /boot/config-$(uname -r) .config

# Update the configuration for kernel 7.0 (accepting defaults for new options)
make olddefconfig
Optional (Speedup Tip): If you want to disable debug symbols to drastically speed up the build time and reduce .deb file sizes, run:
scripts/config --disable CONFIG_DEBUG_INFO
scripts/config --disable CONFIG_DEBUG_INFO_BTF

5. Compile the Kernel & Generate DEB PackagesBuild the kernel using all available CPU threads (-j$(nproc)). The bindeb-pkg target automatically creates native Debian .deb packages in the parent directory:
make -j$(nproc) bindeb-pkg

6. Install the Newly Built Kernel​

Once the build completes successfully, step out of the source folder and install the generated packages:
cd ..

# Install the image and headers packages
sudo dpkg -i linux-image-7.0.0-dirty_*.deb linux-headers-7.0.0-dirty_*.deb

# Reboot into your new patched kernel
sudo reboot

Beweis:
1785484123409.png
msi_vector.patch:
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
index 5fae9a6e2..d31c5acd5 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c
@@ -261,7 +261,7 @@ int __mt7921_start(struct mt792x_phy *phy)

if (phy->chip_cap & MT792x_CHIP_CAP_WF_RF_PIN_CTRL_EVT_EN) {
mt7921_mcu_wf_rf_pin_ctrl(phy, WF_RF_PIN_INIT);
- wiphy_rfkill_start_polling(mphy->hw->wiphy);
+ //wiphy_rfkill_start_polling(mphy->hw->wiphy);
}

return 0;
@@ -1514,7 +1514,7 @@ static void mt7921_rfkill_poll(struct ieee80211_hw *hw)
ret = mt7921_mcu_wf_rf_pin_ctrl(phy, WF_RF_PIN_POLL);
mt792x_mutex_release(phy->dev);

- wiphy_rfkill_set_hw_state(hw->wiphy, ret ? false : true);
+ wiphy_rfkill_set_hw_state(hw->wiphy, false);//ret ? false : true);
}

const struct ieee80211_ops mt7921_ops = {
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
index 833d0ab64..070ebb2e8 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
@@ -1435,6 +1435,8 @@ int mt7921_mcu_get_temperature(struct mt792x_phy *phy)

int mt7921_mcu_wf_rf_pin_ctrl(struct mt792x_phy *phy, u8 action)
{
+ return 0;
+
struct mt792x_dev *dev = phy->dev;
struct {
u8 action;
 
Zuletzt bearbeitet:
Falls euer WLAN tierisch lahm ist wie bei mir:

1. Testen obs am Power Save liegt:
sudo iw dev wlan0 set power_save off
WIFI mal kurz aus- und wieder einschalten.
Wenns danach rennt, macht das einfach permanent:
sudo nano /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
Dort
wifi.powersave = 3
auf
wifi.powersave = 2
ändern, speichern, fertig.

Beim nächsten Hochfahren habt ihr dann schnelles WIFI.
 
Zuletzt bearbeitet:
Habe Linux jetzt zu meiner Zufriedenheit laufen. Folgende Sachen habe ich eingerichtet:
  • * Lüftersteuerung (inkl. "Full Stop")
  • * Leistungsregelung (Silent / Balanced / Power)
  • * Stromsparfeatures für Peripherie aktiviert
Hier ist ein Script was die Sachen einstellt:
#!/bin/bash

# Prüfen, ob das Skript als Root ausgeführt wird
if [ "$EUID" -ne 0 ]; then
echo "Bitte mit sudo ausführen!"
exit 1
fi

# Setze Vorgaben
# Max. boost frequenz in Hz
MAX_BOOST_FREQ=6000000
# Power Limits in mW
ENDURANCE_POWER=60000
LONG_POWER=60000
SHORT_POWER=85000
#ISW Config Name (aus isw.config)
ISW_CONFIG_NAME="15MMIMS1"

# Bestimme das echte Home-Verzeichnis des Benutzers (auch wenn mit sudo aufgerufen)
REAL_USER=${SUDO_USER:-$USER}
USER_HOME=$(eval echo "~$REAL_USER")
RYZENADJ_PATH="$USER_HOME/workspace/tools/RyzenAdj/build/ryzenadj"

echo "--- Starte System-Optimierungen für Ryzen 8840HX & RTX GPU ---"

# 1. nvidia-powerd direkt im Hintergrund starten
if [ -x /usr/bin/nvidia-powerd ]; then
echo "[1/5] Starte /usr/bin/nvidia-powerd direkt im Hintergrund (&)..."
# Prüfen, ob der Prozess bereits läuft, um doppelte Ausführung zu verhindern
if pgrep -x "nvidia-powerd" > /dev/null; then
echo "nvidia-powerd läuft bereits."
else
/usr/bin/nvidia-powerd &
echo "nvidia-powerd gestartet."
fi
else
echo "[1/5] Fehler: /usr/bin/nvidia-powerd nicht gefunden!"
fi

# 2. Ryzenadj mit absolutem Pfad ausführen
if [ -x "$RYZENADJ_PATH" ]; then
echo "[2/5] Limitiere CPU TDP"
"$RYZENADJ_PATH" --stapm-limit=$ENDURANCE_POWER --fast-limit=$SHORT_POWER --slow-limit=$LONG_POWER
else
echo "[2/5] Fehler: ryzenadj unter '$RYZENADJ_PATH' nicht gefunden oder nicht ausführbar!"
fi

# 3. Max. Boost Clock auf 4,8 GHz für alle Kerne limitieren
echo "[3/5] Setze max. CPU-Takt auf $MAX_BOOST_FREQ Hz..."
if [ -d /sys/devices/system/cpu/cpu0/cpufreq ]; then
echo "$MAX_BOOST_FREQ" | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq > /dev/null
else
echo "Fehler: cpufreq-Pfad nicht gefunden."
fi

echo "[4/5] Aktiviere Peripherie-Stromsparmodi"
powertop --auto-tune

echo "[5/5] Stelle Lüfterkurve ein"
isw -w "$ISW_CONFIG_NAME"
echo "--- Optimierungen erfolgreich abgeschlossen! ---"
Hier die Lüfterkurve (einfach neu in isw.config eingetragen):
[15MMIMS1]
# GS40_6QE
# 14A1EMS1.106
address_profile = MSI_ADDRESS_DEFAULT
fan_mode = 140
battery_charging_threshold = 100
# CPU
cpu_temp_0 = 75
cpu_temp_1 = 78
cpu_temp_2 = 81
cpu_temp_3 = 84
cpu_temp_4 = 87
cpu_temp_5 = 90
cpu_fan_speed_0 = 0
cpu_fan_speed_1 = 10
cpu_fan_speed_2 = 25
cpu_fan_speed_3 = 35
cpu_fan_speed_4 = 50
cpu_fan_speed_5 = 70
cpu_fan_speed_6 = 80
# GPU
gpu_temp_0 = 70
gpu_temp_1 = 73
gpu_temp_2 = 77
gpu_temp_3 = 81
gpu_temp_4 = 85
gpu_temp_5 = 88
gpu_fan_speed_0 = 0
gpu_fan_speed_1 = 20
gpu_fan_speed_2 = 30
gpu_fan_speed_3 = 45
gpu_fan_speed_4 = 60
gpu_fan_speed_5 = 70
gpu_fan_speed_6 = 80
Damit ist es schön ruhig, im Idle gehen die Lüfter zuverlässig aus.
 
CPU geht hoch bis 103W, GPU bis 137W. Steel Nomad um die 4000 Punkte. Lärm ist erträglich, selbst bei den aktuellen ~28°C Umgebungstemperatur.

Mit Steam laufen Titel wie Indiana Jones and the Great Circle oder Anno 117 (Ubiconnect muss als Steam-fremdes Spiel gestartet werden) problemlos und ziemlich exakt mit den gleichen FPS wie unter Windows.
 
Hier noch ein kleines Script was die Temps und Power anzeigt:
1785523568667.png
#!/usr/bin/env bash

# Zahlenformatierung auf Punkt statt Komma erzwingen (behebt den Fehler)
export LC_NUMERIC=C

# Bildschirm-Refresh vorbereiten
clear

# Schleife für die sekündliche Aktualisierung
while true; do
# Cursor nach oben links setzen (verhindert Flackern im Terminal)
tput cup 0 0

# --- Akku-Leistung berechnen ---
BAT_PATH="/sys/class/power_supply/BAT1"
if [ -f "$BAT_PATH/current_now" ] && [ -f "$BAT_PATH/voltage_now" ]; then
BAT_POWER=$(awk "BEGIN {printf \"%.2f\", ($(cat $BAT_PATH/current_now) * $(cat $BAT_PATH/voltage_now)) / 1000000000000}")
BAT_OUTPUT="${BAT_POWER} W"
else
BAT_OUTPUT="N/A (Netzbetrieb/Fehler)"
fi

echo "=========================================="
echo " SYSTEM-HARDWARE-MONITOR "
echo "=========================================="
echo " Datum/Uhrzeit: $(date '+%H:%M:%S')"
echo "------------------------------------------"

# --- GPU (Nvidia) ---
if command -v nvidia-smi &> /dev/null; then
GPU_TEMP=$(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits 2>/dev/null)
GPU_POWER=$(nvidia-smi --query-gpu=power.draw --format=csv,noheader,nounits 2>/dev/null)
# Leerzeichen entfernen
GPU_POWER=$(echo "$GPU_POWER" | xargs)
printf " GPU (Nvidia) : %5s °C | %5.1f W\n" "$GPU_TEMP" "$GPU_POWER"
else
echo " GPU (Nvidia) : nvidia-smi nicht gefunden"
fi

# --- CPU (AMD Ryzen) ---
# Temperatur aus hwmon auslesen (Tctl / Tdie)
CPU_TEMP="N/A"
for hwmon in /sys/class/hwmon/hwmon*/; do
if [ -f "${hwmon}name" ] && [[ $(cat "${hwmon}name") =~ (k10temp|zenpower|coretemp) ]]; then
if [ -f "${hwmon}temp1_input" ]; then
RAW_TEMP=$(cat "${hwmon}temp1_input")
CPU_TEMP=$((RAW_TEMP / 1000))
break
fi
fi
done

# Leistungsaufnahme aus RAPL auslesen
CPU_POWER="N/A"
if [ -f /sys/class/powercap/intel-rapl/intel-rapl:0/energy_uj ]; then
E1=$(cat /sys/class/powercap/intel-rapl/intel-rapl:0/energy_uj)
sleep 0.1
E2=$(cat /sys/class/powercap/intel-rapl/intel-rapl:0/energy_uj)
CPU_POWER=$(awk "BEGIN {printf \"%.2f\", ($E2 - $E1) / 100000}")
SLEEP_TIME=0.9
else
SLEEP_TIME=1.0
fi

if [ "$CPU_POWER" != "N/A" ]; then
printf " CPU (Ryzen) : %5s °C | %5.1f W\n" "$CPU_TEMP" "$CPU_POWER"
else
printf " CPU (Ryzen) : %5s °C | %5s\n" "$CPU_TEMP" "$CPU_POWER"
fi

# --- Gesamtleistung berechnen (mit awk für Kommazahlen) ---
TOTAL_POWER=$(awk -v cpu="$CPU_POWER" -v gpu="$GPU_POWER" '
BEGIN {
if (cpu ~ /^[0-9.]+/ && gpu ~ /^[0-9.]+/) {
printf "%.1f", cpu + gpu
} else {
print "N/A"
}
}')

if [ "$TOTAL_POWER" != "N/A" ]; then
printf " TOTAL : | %5.1f W\n" "$TOTAL_POWER"
else
printf " TOTAL : | %5s\n" "$TOTAL_POWER"
fi

echo "------------------------------------------"
# --- Akku Anzeige ---
printf " Battery : | %5s\n" "$BAT_OUTPUT"

echo "=========================================="
echo " Beenden mit [Strg + C]"

sleep "$SLEEP_TIME"
 
War eine ganz schöne Qual das alles sauber aufzusetzen, v.a. der WIFI Bug hat ordentlich genervt. Aber am Ende läuft alles bestens und ich kann bestätigen dass das Notebook 100% Linux approved ist! Wer Probleme hat kann mich gerne kontaktieren, vielleicht krieg ichs noch zusammen was ich alles machen (installieren und konfigurieren) musste, damit alles läuft.
 
Nicht vollständig, aber vielleicht wertvoll: paar commands, um ein USB Keyboard zu pairen - aus irgendeinem Grund geht das mit Linux Mint 23 nicht per GUI:
Ganz wichtig, sonst geht gar nichts:
echo "options btusb enable_autosuspend=0" | sudo tee /etc/modprobe.d/btusb.conf
Damit funkt der Blauzahn durchweg und schläft nicht dauernd ein. Nach einem Neustart wird das allerdings erst aktiv. Um gleich loszulegen, einmal das hier ausführen:
sudo modprobe -r btusb
sudo modprobe btusb
sudo systemctl restart bluetooth

Dann Keyboard koppeln:
Dort eingeben:
agent KeyboardOnly
default-agent
scan on
Dann das Keyboard in den Pairing-Modus bringen. Es sollte aufgelistet werden.
Dann:
Dann die angezeigte Zahl auf der Tastatur tippen, mit <Enter> bestätigen
Danach abschließend:
trust MAC-ADRESSE
connect MAC-ADRESSE
 
Und da soll nochmal einer sagen, Linux ist super simple... wenn man sich mit der Materie auskennt und sich auch nicht damit auseinander setzen kann/will, hat man einfach verloren.

Aber schön, das es Leute wie dich gibt und das alles durchspielen und fein säuberlich hier erklären, vielen Dank dafür !
 
Linux ist out of the Box simple, aber bei manchen Hardware Themen ist es immer noch etwas aufwendiger.
 
Ist immer persönliche Präferenz - ich z.Bsp. hasse Windows; das ist meiner Meinung nach Malware eines US Großkonzerns inkl. Telemetrie-Datenkrake. Das Problem ist dass die meisten Hersteller den Linux-Support ihrer Geräte vernachlässigen. Da wird eben nur für Windows Treiber und Control-SW gepflegt; und dann muss man eben selbst Hand anlegen bis es alles zufriedenstellend läuft.

Aktuell z.Bsp. versuche ich noch das Keyboard-LED unter Linux anzusteuern, bislang ohne Erfolg.

Aber das Wissen, dass man selbst eben alles unter Kontrolle hat (inkl. Datenschutz und keine Angst vor Viren und sonstiger Malware) ist mir den Aufwand wert.
 
Zurück
Oben