<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[USB tethering not working]]></title><description><![CDATA[<p dir="auto">I tried to use USB tethering on my OP6: not working at all (interface stays in MTP mode).</p>
<p dir="auto">I found that RNDIS mode was just not implemented in <code>/usr/share/usbinit/setupusb</code>... snif...</p>
<p dir="auto">So I modified (with success) <code>/usr/share/usbinit/setupusb</code>:</p>
<pre><code>#!/bin/sh
CONFIG_FS=/sys/kernel/config
CONFIG_DIR=$CONFIG_FS/usb_gadget/
GADGET_DIR=$CONFIG_DIR/g1
CONFIG_NAME="c.1"

SERIALNUMBER=`getprop ro.serialno`             # e.g. "0123456789ABCDEF"
MANUFACTURER=`getprop ro.product.vendor.manufacturer` # e.g. "Volla"
PRODUCT=`getprop ro.product.vendor.model`             # e.g. "Phone"
CONTROLLER=`getprop sys.usb.controller`        # e.g. "musb-hdrc"

write() {
	test -w "$1" || return
	printf "$2" &gt; "$1"
}

symlink() {
	ln -s "$1" "$2"
}

reset_usb() {
	rm -f $GADGET_DIR/configs/$CONFIG_NAME/mtp.gs0
	rm -f $GADGET_DIR/configs/$CONFIG_NAME/ffs.adb
	rm -f $GADGET_DIR/configs/$CONFIG_NAME/rndis.usb0
}

setup_rndis() {
	reset_usb
	write $GADGET_DIR/configs/$CONFIG_NAME/strings/0x409/configuration "rndis"
	symlink $GADGET_DIR/functions/rndis.usb0 $GADGET_DIR/configs/$CONFIG_NAME/
	write $GADGET_DIR/UDC $CONTROLLER
	setprop sys.usb.state rndis
}

setup_mtp() {
	reset_usb
	write $GADGET_DIR/functions/mtp.gs0/os_desc/interface.MTP/compatible_id "mtp"
	write $GADGET_DIR/configs/$CONFIG_NAME/strings/0x409/configuration "mtp"
	symlink $GADGET_DIR/functions/mtp.gs0 $GADGET_DIR/configs/$CONFIG_NAME/
	write $GADGET_DIR/UDC $CONTROLLER
	setprop sys.usb.state mtp
}

setup_mtp_adb() {
	reset_usb
	write $GADGET_DIR/functions/mtp.gs0/os_desc/interface.MTP/compatible_id "mtp_adb"
	write $GADGET_DIR/configs/$CONFIG_NAME/strings/0x409/configuration "mtp_adb"
	symlink $GADGET_DIR/functions/mtp.gs0 $GADGET_DIR/configs/$CONFIG_NAME/
	symlink $GADGET_DIR/functions/ffs.adb $GADGET_DIR/configs/$CONFIG_NAME/
	start android-tools-adbd
	sleep 2
	write $GADGET_DIR/UDC $CONTROLLER
	setprop sys.usb.state mtp,adb
}

setup_boot() {
	if [ -e $GADGET_DIR/functions/mtp.gs0 ]; then
		echo "Boot setup done"
		return
	fi

	if ! mount | grep -q "$CONFIG_FS"; then
		mount -t configfs none $CONFIG_FS
		mkdir -p $GADGET_DIR/strings/0x409
		mkdir -p $GADGET_DIR/functions/rndis.usb0
		mkdir -p $GADGET_DIR/configs/$CONFIG_NAME/strings/0x409
	fi

	write $GADGET_DIR/idVendor 0x18D1
	write $GADGET_DIR/bcdDevice 0x0223
	write $GADGET_DIR/bcdUSB 0x0200
	write $GADGET_DIR/os_desc/use 1
	write $GADGET_DIR/os_desc/b_vendor_code 0x1
	write $GADGET_DIR/os_desc/qw_sign "MSFT100"
	write $GADGET_DIR/strings/0x409/serialnumber $SERIALNUMBER
	write $GADGET_DIR/strings/0x409/manufacturer $MANUFACTURER
	write $GADGET_DIR/strings/0x409/product $PRODUCT
	mkdir -p $GADGET_DIR/functions/mtp.gs0
	mkdir -p $GADGET_DIR/functions/ffs.adb
	symlink $GADGET_DIR/configs/$CONFIG_NAME $GADGET_DIR/os_desc/$CONFIG_NAME

	mkdir -p /dev/usb-ffs/adb
	mount -t functionfs -o uid=32011,gid=32011 adb /dev/usb-ffs/adb
	chown root:plugdev /dev/usb-ffs
	chmod 775 /dev/usb-ffs
	chown root:plugdev /dev/usb-ffs/adb
	chmod 775 /dev/usb-ffs/adb

	chown root:plugdev /dev/mtp_usb
	chmod 660 /dev/mtp_usb
}

setup_boot

if [ "$1" = "rndis" ]; then
	setup_rndis
elif [ "$1" = "mtp" ]; then
	setup_mtp
elif [ "$1" = "mtp_adb" ]; then
	setup_mtp_adb
else
	echo "No configuration selected."
fi

exit 0
</code></pre>
<p dir="auto">and <code>/usr/bin/tethering</code> :</p>
<pre><code>#! /bin/sh

NMCONF=/etc/NetworkManager/system-connections/tethering

init_interface(){
bash /usr/share/usbinit/setupusb reset
bash /usr/share/usbinit/setupusb rndis
ifconfig rndis0 up
}

enable(){
    MAC="$(ip -o link show rndis0 |sed -e 's/^.*ether //'|cut -d' ' -f1)"
    UUID=ca16a21d-7d8b-4b49-926e-"$(echo $MAC|sed -e 's/://g')"
    STAMP=$(date +%s)

    if [ ! -e $NMCONF ];then
        cat &lt;&lt; EOF &gt;$NMCONF
[802-3-ethernet]
duplex=full
mac-address=$MAC

[connection]
id=tethering
uuid=$UUID
type=802-3-ethernet
timestamp=$STAMP

[ipv6]
method=auto

[ipv4]
method=shared
may-fail=false
EOF
    else
        sed -i s/^mac-address=.*/mac-address=${MAC}/ $NMCONF
        sed -i s/^uuid=.*/uuid=${UUID}/ $NMCONF
        sed -i s/^timestamp=.*/timestamp=${STAMP}/ $NMCONF
    fi

    chmod 0600 $NMCONF
    sleep 2
    nmcli c reload
    nmcli c up id tethering
}

disable(){
    nmcli c down id tethering || true
    rm $NMCONF || true
    initctl start mtp-state
}

case $1 in
    enable)
        init_interface
        enable
        ;;
    disable)
        disable
        ;;
    *)
        echo "need an argument (enable|disable)"
        exit 0
        ;;
esac
</code></pre>
<p dir="auto">RNDIS is now fully usable with <code>/usr/bin/tethering enable/disable</code> and with <a href="https://open-store.io/app/ut-tweak-tool.sverzegnassi" target="_blank" rel="noopener noreferrer nofollow ugc">UT Tweak Tool</a>.<br />
Enjoy!</p>
]]></description><link>https://forums.ubports.com/topic/7360/usb-tethering-not-working</link><generator>RSS for Node</generator><lastBuildDate>Wed, 20 May 2026 19:21:13 GMT</lastBuildDate><atom:link href="https://forums.ubports.com/topic/7360.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 31 Jan 2022 15:31:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to USB tethering not working on Tue, 08 Feb 2022 06:12:46 GMT]]></title><description><![CDATA[<p dir="auto">Ubuntu Touch hasn't USB Tethering. Yes, there is RNDIS option in UT Tweak Tool but it used for USB debugging when ADB was unavailable.</p>
]]></description><link>https://forums.ubports.com/post/61510</link><guid isPermaLink="true">https://forums.ubports.com/post/61510</guid><dc:creator><![CDATA[SevralT]]></dc:creator><pubDate>Tue, 08 Feb 2022 06:12:46 GMT</pubDate></item></channel></rss>