Automated USB tethering with Android-equipped smartphones

In absence of a decent internet offer in our new house, we decided to wait for the fiber to reach the house by just using our 4G phones tethering. However, tethering over Wi-Fi is annoying and drains battery, so I wondered how hard would it be to automatically launch a script that would start the USB tethering when plugging our phones in our Debian-equipped laptops.

Step 1 : preparation

Install adb, identify your phone USB identifiers (vendor & model), and automatically accept the android adb key (~/.android/adbkey) by tapping on your phone. You can use scrcpy to click on your phone over the USB link of adb, that tool is pretty cool.
user@debian:~$ lsusb | grep -i samsung
Bus 004 Device 005: ID 04e8:6864 Samsung Electronics Co., Ltd GT-I9070 (network tethering, USB debugging enabled)

Step 2 : udev rule (triggers a script when an USB device gets plugged)

In the file /etc/udev/rules.d/local.rules, place the following contents, adapting your USB identifiers. I added two because my phone resets USB and changes its identifiers whenever USB tethering is activated.
ACTION=="add", SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="04e8", ENV{ID_MODEL_ID}=="6864", RUN+="/home/user/git/tether/"
ACTION=="add", SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="04e8", ENV{ID_MODEL_ID}=="6860", RUN+="/home/user/git/tether/"
Then, in the file /home/user/git/tether/ (or wherever you want to place it) :
sleep 2
  echo "listing devices.."
  adb devices
  echo "activating rndis"
  adb shell svc usb setFunctions rndis
  echo "checking rndis.."
  adb shell svc usb getFunctions
} >> /tmp/e
The core of the program is calling adb shell svc usb setFunctions rndis, and some logs should land in /tmp/e. Have a nice day.