[Guide/Workaround] Automating LTE Modem Initialization on Surface Go 3 (FydeOS)

Hello FydeOS Community!

I wanted to share a working solution for getting the internal LTE modem to initialize properly and automatically after booting on the Microsoft Surface Go 3 LTE.

Hopefully, this workaround helps other users with the same device and maybe provides some useful insights for the FydeOS team for a future SP update!

1. The Problem

While FydeOS generally recognizes the internal LTE modem on the Surface Go 3, it often fails to connect right after booting. In my case, it requires a manual restart of the ModemManager and a quick adjustment to the RX/TX buffer sizes of the cdc_ncm interface (which shows up as wwan0) to get it working reliably.

2. The Solution: The LTE Script

I created a bash script (lte.sh) to automate the buffer adjustment and the ModemManager restart.

Here is the code for the lte.sh script:

`Bash#!/bin/bash
echo “Setze RX/TX Puffergrößen…”
echo 16383 | tee /sys/bus/usb/devices/2-3/2-3:1.0/net/wwan0/cdc_ncm/rx_max
echo 16383 | tee /sys/bus/usb/devices/2-3/2-3:1.0/net/wwan0/cdc_ncm/tx_max
echo 16384 | tee /sys/bus/usb/devices/2-3/2-3:1.0/net/wwan0/cdc_ncm/rx_max
echo 16384 | tee /sys/bus/usb/devices/2-3/2-3:1.0/net/wwan0/cdc_ncm/tx_max
echo “Puffergrößen gesetzt.”

echo “Starte ModemManager neu…”
restart modemmanager
echo “ModemManager-Neustart-Befehl gesendet.”
echo “Skript lte.sh abgeschlossen.”`

3. Important Setup Notes & Troubleshooting

If you want to use this script, please keep the following things in mind:

  • Windows Line Endings (CRLF): If you write or edit this script in Windows, it will have CRLF line endings, and FydeOS will throw a `` error. You can easily fix this right in the FydeOS terminal by running: sed -i 's/\r$//' lte.sh
  • noexec Warning: When running the script from your Downloads folder, you might see a warning saying script from noexec mount. This is expected behavior for this specific mount in FydeOS. You can still execute the script by explicitly calling bash: sudo bash lte.sh
  • Terminal Navigation: Remember that /home/chronos/user/MyFiles/Downloads is the path. You cannot just type the path as a command. You need to navigate to it first using cd ~/MyFiles/Downloads before running the script. (Note: xinput is not available in FydeOS by default).

4. Automating the Script on Boot (ChromeOS-AutoStart)

Since a standard user-autostart method wasn’t reliable after a reboot, I used the extension ChromeOS-AutoStart 5.2.0 (loaded as an unpacked extension).

I placed my script in the Downloads folder: /home/chronos/user/MyFiles/Downloads/lte.sh

In the AutoStart extension, I used the following command sequence:

  1. shell
  2. sh -c "sudo bash /home/chronos/user/MyFiles/Downloads/lte.sh"
  3. exit

The boot sequence now looks like this: ChromeOS-AutoStart ➔ crosh ➔ shell ➔ executes lte.sh ➔ Modemanager restarts ➔ LTE works!

:warning: Crucial Disclaimer for Other Users

Please be aware that this specific fix was tested on FydeOS with a Surface Go 3 LTE.

DO NOT blindly copy and paste the USB device path (/sys/bus/usb/devices/2-3/...). The USB device number (2-3) and the interface path might vary depending on your specific hardware revision or even boot conditions. You must verify your own path for the cdc_ncm interface before using the script, otherwise, the buffer commands will fail.

I hope this helps someone out there!\r’: command not founderror. You can easily fix this right in the FydeOS terminal by running:DISCOURSE_PLACEHOLDER_8`

  • noexec Warning: When running the script from your Downloads folder, you might see a warning saying DISCOURSE_PLACEHOLDER_9. This is expected behavior for this specific mount in FydeOS. You can still execute the script by explicitly calling bash: DISCOURSE_PLACEHOLDER_10
  • Terminal Navigation: Remember that DISCOURSE_PLACEHOLDER_11 is the path. You cannot just type the path as a command. You need to navigate to it first using DISCOURSE_PLACEHOLDER_12 before running the script. (Note: DISCOURSE_PLACEHOLDER_13 is not available in FydeOS by default).

4. Automating the Script on Boot (ChromeOS-AutoStart)

Since a standard user-autostart method wasn’t reliable after a reboot, I used the extension ChromeOS-AutoStart 5.2.0 (loaded as an unpacked extension).

I placed my script in the Downloads folder: DISCOURSE_PLACEHOLDER_14

In the AutoStart extension, I used the following command sequence:

  1. DISCOURSE_PLACEHOLDER_15
  2. DISCOURSE_PLACEHOLDER_16
  3. DISCOURSE_PLACEHOLDER_17

The boot sequence now looks like this: ChromeOS-AutoStart ➔ crosh ➔ shell ➔ executes DISCOURSE_PLACEHOLDER_18 ➔ Modemanager restarts ➔ LTE works!

:warning: Crucial Disclaimer for Other Users

Please be aware that this specific fix was tested on FydeOS with a Surface Go 3 LTE.

DO NOT blindly copy and paste the USB device path (DISCOURSE_PLACEHOLDER_19). The USB device number (DISCOURSE_PLACEHOLDER_20) and the interface path might vary depending on your specific hardware revision or even boot conditions. You must verify your own path for the DISCOURSE_PLACEHOLDER_21 interface before using the script, otherwise, the buffer commands will fail.

I hope this helps someone out there!