Get USB tethering from Android device to work on Debian 8
I'm trying to get USB tethering to work between a Nexus 5 phone (running CM11) and my desktop running Debian 8. I connected the phone to the computer via USB and got these messages:
[14972.580738] usb 3-2: new high-speed USB device number 6 using xhci_hcd
[14972.709236] usb 3-2: New USB device found, idVendor=18d1, idProduct=4ee3
[14972.709239] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[14972.709240] usb 3-2: Product: Nexus 5
[14972.709242] usb 3-2: Manufacturer: LGE
[14972.709243] usb 3-2: SerialNumber: 04a0ba5813aff0d4
After enabling USB tethering on the phone, I additionally get:
[14972.710663] rndis_host 3-2:1.0 usb0: register 'rndis_host' at usb-0000:00:14.0-2, RNDIS device, 02:04:67:3f:31:35
The device is also listed by lsusb
, albeit as a Nexus 4:
Bus 003 Device 006: ID 18d1:4ee3 Google Inc. Nexus 4 (tether)
(Is that a problem?)
I do not, however, get a usb0 network interface or anything else that could be it. ifconfig
lists only the previously present interfaces, which are eth0
, lo
, as well as two tun
devices provided by OpenVPN.
I searched for possible reasons this doesn't work, but they revolve around a too-old kernel (from the 2.6 days). My kernel is 3.16.0, which I would assume supports USB tethering. I also remember that I got USB tethering to work with a Sony Ericsson phone by just connecting it, and that was years ago.
As far as I can tell, all the relevant kernel modules are loaded:
rndis_host 12698 0
cdc_ether 12564 1 rndis_host
usbnet 30844 2 rndis_host,cdc_ether
usbcore 195340 8 xpad,rndis_host,ehci_hcd,ehci_pci,usbhid,usbnet,xhci_hcd,cdc_ether
usb_common 12440 1 usbcore
What do I have to do to get the usb0 network interface?
Update: I tried this on another computer running Debian 8, and it worked. As far as I can tell, the difference is that two other modules are loaded: rndis_wlan
and mii
. However, though loading these modules manually via modprobe
seems to work without errors, usb0
is still missing.
After some googling I found that I should get information about network interfaces using ip link
. The output is:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 30:85:a9:f6:24:cd brd ff:ff:ff:ff:ff:ff
31: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 100
link/none
32: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 100
link/none
37: usb0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 0e:21:59:43:d3:ca brd ff:ff:ff:ff:ff:ff
So it appears that usb0
does exist after all. I then tried ifup usb0
, but it says
Ignoring unknown interface usb0=usb0.
I did the whole thing also with a Nexus 7 (1st gen), with the same results.
Ok, it appears I have figured it out. These commands made it work:
ip link set usb0 up
dhclient usb0
Strangely enough, ifup usb0
still tells me that this interface is unknown, and: before running dhclient
, not even a ping 8.8.8.8
works.
I'd still be interested to know how I can automate this, or why this does happen automatically on another Debian 8 install.
Add this to /etc/network/interfaces
config file:
auto usb0
allow-hotplug usb0
iface usb0 inet dhcp
and after reboot
sudo ifconfig usb0 up
if you system is ubuntu after 16.04 you might need to change the name of the interface:
auto enusb01
allow-hotplug enusb01
iface enusb01 inet dhcp
and after reboot
sudo ifconfig enusb01 up
If none works try to see list with ifconfig -a | grep Link
and and then try to mount the relevant one up or do the steps above an then mount that up.