Using a 3 mobile broadband dongle with the EEE PC

I’ve been loaned a USB mobile broadband modem by 3 to try out for a few months. I’ll write a proper post about why I’ve got it and what I think of it later. First, I wanted to share how I got it working with my EEE PC.

What am I talking about?
The modem is a small USB dongle – not dissimilar in appearance from a USB memory stick. You put a SIM card in, and the small mobile phone radio inside gives an Internet connection to any computer that it’s plugged into.

The dongle is a Huawei E169G.

So what’s the problem?
The dongle is supported on Windows and Mac OS. Not Linux. My EEE PC still runs the original Xandros Linux.

Should it work on Linux?
Posts on the eeeuser forum suggested that it wouldn’t be possible.

Other dongles seem to have caused less trouble, but the E169 wouldn’t work.

The consensus seemed to be that:

Huawei 169 requires a patch to usb-storage driver to recognize the hardware similarly to 220… I think that ASUS is on a way to produce a small upgrade package to fix the issue for E169.

And a little Googling failed to turn up anyone who has got the Huawei E169 to work with an EEE PC on Linux.

Still… how hard could it really be, eh? 🙂

What happens if you try and use it?
Plug the USB dongle in.

EEE PC home screen
The normal way to create an Internet connection on the EEE PC starts here – the Internet tab of the home screen.

Notice that the system tray icon you get when you plug in a USB flash memory stick does not appear.

Click on ‘Network’.

network connections
I only had one saved network before – my home Wi-Fi settings. Click on ‘Create’ to create a new one.


create a new connection
In the Connection Wizard that pops up, choose the option for a 3G connection.


no hardware found
Then you choose the hardware to use.

Except you can’t. The EEE PC doesn’t recognise the E169 dongle – the list of hardware to choose from is empty.


I tried using wvdial to configure the modem myself without the wizard. Running the auto config mode – where it queries the device itself – failed. In fact, it seg faulted!

I tried configuring it manually – a few different configuration files I found online. None of them worked. In each case, wvdial would fail to connect to the device.

The EEE PC just really couldn’t see the dongle.

Why not?
The dongle works fine on Windows, so switching quickly to a Windows ThinkPad I could investigate further.

USB Monitor
I plugged it into my ThinkPad and kicked off USB Monitor to have a dig around. The first thing I noticed is that the device ID it returns is different to the one printed on the USB device itself: E620. Weird.

More interesting though was that USB Monitor shows that the dongle is a “Composite Device”. This was a new one on me, but it seems that – rather than ship the dongle with CDs containing the drivers to use – the USB device is a two-in-one device. It is both a “Mass Storage Device” – a flash memory disk, and a Modem. It starts out by behaving as flash memory. The flash storage contains the modem drivers, with an autorun config that installs them on a PC when it is plugged in. Once installed, the USB device is switched to modem mode.

It seems that Linux, or the EEE PC at any rate, cannot handle this sort of composite device. It wasn’t sending the right signals to the device to tell it which mode to behave in, or didn’t understand when it reported itself to be a composite. Either way… I needed to find a way to manually make the device switch modes.

Making USB devices switch modes
Things were looking up – I found (yay for Google!) that Josua Dietze has written a Linux utility to do this already: USB_ModeSwitch.

He’s written a utility that simplifies sending control commands to USB devices. All you have to do is put the command codes into a config file, then run his utility. He even includes a sample config file with the right codes for fifteen different USB devices.

Unfortunately, the Huawei E169 isn’t one of the devices he’s identified the codes for. (And I tried the other Huawei codes on his list – none of them worked).

So it was back to the USB sniffer to identify the right codes to use.

perform USB mode switch
I found the codes to first disable the memory storage mode and then enable the modem.

Hurrah.

So back to the EEE PC ‘Create connection’ wizard.

select USB hardware
This time, it does show you USB devices to choose! I chose the first device: /dev/ttyUSB0


network search
It seemed happy to use the generic modem drivers without any more information, and started searching for mobile networks.


networks found
It found – among others – the 3 network.


enter network details
I chose it, and copied the other network details from the information on the three website.


network short name
Give the network a friendly name.


network config finished
All done!


initializing modem
And to prove it works, here is the modem initializing…


dialling modem
…dialling…


connected!
…and finally connected.


lookee! i'm online
Look – here is the EEE PC online using the 3 mobile broadband dongle.

This is all overkill. By all accounts, the newer Huawei mobile broadband modems are much easier to get working. If you have an EEE PC and are considering getting a mobile broadband dongle, you might find it easier to just go for E220 or newer.

But if you do already have the E169, or can get it cheaper, it seems that you can get it working!

Update: See the comment thread below for background, but in short, people have found it quicker to put in usb_modeswitch options at the command line rather than have to edit config files. E.g.
./usb_modeswitch -v 0x12d1 -p 0x1001 -d 1
./usb_modeswitch -v 0x12d1 -p 0x1001 -H 1

You may find this easier to script than the config file approach in my post.

The developer of usb_modeswitch has more info on automating which is also worth a look.

Tags: , , , , , , , ,

139 Responses to “Using a 3 mobile broadband dongle with the EEE PC”

  1. Anthony says:

    @Dale – I’ve tried to follow the steps best I can and, what you’ve just typed up makes it a lot clearer, but I keep getting this error:

    ‘No default vendor/product ID given. Aborting’

    …when I type either command into Console (btw, I’m using an Eee PC 900 in Advanced mode – if that makes any difference)

  2. Alec says:

    Just received my E169G on contract from 3 and was initially frustrated by attempts to mediate between the modem and my eeepc 4G to get them talking to each other.

    After following your very clear guide, I succeeded in persuading them to communicate properly (despite the protestatons of the 3 techies that it would work only with Windows).

    Thanks for your help.

  3. Anthony says:

    If it’s as easy as you guys say, can one of you tell me what my error message is about? I’m having problems with Synaptic (something about packages) maybe my Eee 900 is FUBAR? Would that be it? Anyone?

  4. mario says:

    I just wanted to thank Dale for his great contribution on this page. It’s really appreciated.

  5. simon says:

    You guys are too clever for me! I’ll be upfront, I’m new to linux and know nothing about running commands.
    I’ve done ctrl – alt – t and opened up what i now know is the shell but when i put in ./usb_modeswitch I get a message saying permission denied.

    Do I have to open in advanced desk top (I’m not exactly sure what that practically means)

    I’m one of those people that just wants my laptop to do stuff simply as i’m not clever enough to get into the detail.

    Any help much appreciated as I just signed up to 15 quid a month!
    Simon

  6. Graham says:

    Dale

    Although I too am new to linux I have managed to follow your instructions.

    It took a lot of experimentation but I managed to get to the point of “running” the terminal window commands. However I keep getting a “floating point error” on both
    ./usb_modeswitch -v 0?12d1 -p 0?1001 -d 1
    ./usb_modeswitch -v 0?12d1 -p 0?1001 -H 1
    commands

    I have obviously done something wrong but am now lost.

    The E169G was in the usb port at the time

  7. dale says:

    @Anthony – No idea, sorry

    @mario and @Alec – Thanks very much, that’s very kind!

    @simon – Advanced desktop isn’t required (I don’t use it myself). Permission denied could mean that the file isn’t executable – that is to say that you need to tell the computer that this is a program file that can be run, as opposed to a text document file that can be read.

    This can be done with a command such as:
    chmod u+x usb_modeswitch

    (This is assuming that you’ve got the usb_modeswitch program first, right?)

    @Graham – I’ve not seen that before, sorry. However, a Google search for “usb_modeswitch floating point” turns up this forum post where someone apparently managed to resolve this problem? Hope that helps

  8. simon says:

    wow thanks dale – if you don’t mind indulging me more… I’ve done that bit without any error messages, i thought that would have been it… nothing has changed. any steer? feel free to ignore if I’m becoming too tiresome! thanks for your help so far

  9. dale says:

    @simon – Still permission denied? Hmm… What output do you get from the following commands?

    whoami
    ls -l usb_modeswitch
    md5sum usb_modeswitch

    What about if you run usb_modeswitch as root?

    sudo ./usb_modeswitch

  10. simon says:

    whoami
    response “user”
    ls -1 usb_modeswitch
    response bash: s: command not found

  11. dale says:

    @simon – It might be easier if you copy and paste those commands, because I think you might be mistyping bits of them. For example, it’s ls -l (the lowercase letter L – not the number 1)

  12. simon says:

    how stupid do I feel now! anyway..I’ve put them in and got a response
    do need to do anything else? or should i be able to see the the modem in the network connection wizard

  13. dale says:

    @simon – The aim of the first three commands was to get me enough information to give clues as to why it’s not working for you.

    If it worked when you ran the last (sudo) command, then you should be able to run these to get it to recognise the modem in the Network Connection Wizard:
    sudo ./usb_modeswitch -v 0x12d1 -p 0x1001 -d 1
    sudo ./usb_modeswitch -v 0x12d1 -p 0x1001 -H 1

  14. simon says:

    cheers…I’ve typed the commands in but i still don’t see anything…given my previous record (!) i could well be miss typing, but I can’t seem to cut n paste the text. Conscious that I’m being coming a pain now…

  15. Hi Dale,
    I’m thinking about getting one of these to go with my EEE but didn’t fancy having to run a command manually every time I connect it to the machine so I was wondering if you had been able to automate running usb_modeswitch? I was thinking one way to do this would be to add a the usb_modeswitch commands as “pre_up” entries to /etc/network/interfaces for the entry you made for your connection. This should run the commands before attempting to establish the connection.

  16. dale says:

    @Liam – Yeah, there are a variety of different ways that this could be automated. The developer of usb_modeswitch has some suggestions which are worth a look.

  17. simon says:

    i’m gong backwards here and for the sake of my sanity & marriage I need to do this!

    I put in chmod u+x usb_modeswitch but get no such file or directory. I’ve downloaded the modeswitch file as per the directions and saved to my documents what the chuff am I doing wrong!

    When I open the linux console to put in the commands, the green text only says /home/user not the /home/user…usbmodeswitch file name I note on your screen shots – am i doing this bit wrong?

  18. dale says:

    @simon – I think we’re rapidly getting into the territory of ‘command shell usage 101’ here – it may be simpler if you can find a friend or colleague who can walk you through this stuff. That said, I will try and help a little if I can.

    To start with, a little background. By default, the “prompt” (the message displayed at the start of each line before you start entering a command) is configured to show which directory you are currently in.

    If you are in the /home/user directory, the prompt will be:

    /home/user>

    If you create a new directory called “hairygreentoads” then change into that directory, the prompt becomes:

    /home/user/hairygreentoads>

    If you want to run a program, you need to change into the directory where you put that program (or put that directory into your PATH, but let’s not worry about that for now).

    When you try to run the program, it is looking for it in the directory you are currently in, not finding it, then telling you that there is no such file in the directory.

    To change into a different directory, use ‘cd’. For example, if I wanted to run a program “myprogram” that I put into “My Documents\mynewfolder\fish”…

    /home/user/My Documents> cd mynewfolder
    /home/user/My Documents/mynewfolder> cd fish
    /home/user/My Documents/mynewfolder/fish> ./myprogram

    So you either need to move the usb_modeswitch program into the folder that you are running the command shell from, or change your command shell directory to the directory where you put the usb_modeswitch program.

    That’s what the ‘no such file’ message was trying to tell you.

    Does that help?

  19. simon says:

    thanks Dale. That makes sense. I think the problem is that the usbsmodeswitch fill isn’t working correctly for me. I get the floating point error when I run the file. So I followed the link you put above in answer to an other question, and ran the usb_mode file that was uploaded by an other user. That got a little further, but says couldn’t find file in etc/usb. I don’t have permission to edit/save to the etc file so I’m stuck! Anyway, having spent at least 15 hours trying to sort this, I’m going to admit defeat and take the modem back. You’ve been more than helpful, and I thank you very much for your time. All the best Simon
    Ps i think there is a great business opportunity to package a solution to this and sell it, I know I’d have paid 50 pound to sort this out!

  20. simon says:

    I’m on! Thanks for all your help!! Wow. Now onto automating the process.

  21. dale says:

    @simon – Congrats! Very glad to hear that you got it worked out.

  22. mario says:

    er… this didn’t work for me. It says “Floating point exception”. I don’t have usblib. Where can I download that from?

  23. dale says:

    @mario – Have you tried apt?

  24. Colin McCarthy says:

    Dale, great post and easy to follow. I solved my ‘Floating Point’ error from following the posts in your comments, but now I get this error.

    ./usb_modeswitch

    * usb_modeswitch: tool for controlling “flip flop” mode USB devices
    * Version 0.9.2 (C) Josua Dietze 2007
    * Works with libusb 0.1.12 and probably other versions

    Looking for target device
    OK, target device not found. Action required
    Looking for default device
    Default device not found. Is it connected? Bye

    Any ideas? (Of course the dongle is plugged in)

    cat /proc/bus/usb/devices gives me this. Serial was �� in my output. I did not change it.

    T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
    D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
    P: Vendor=12d1 ProdID=1001 Rev= 0.00
    S: Manufacturer=�������������������
    S: Product=HUAWEI Mobile
    S: SerialNumber=�������������������
    C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
    E: Ad=83(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
    E: Ad=04(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms

    Thanks
    Colin

  25. Colin McCarthy says:

    Dale
    I have noticed some differences in cat /proc/bus/usb/devices now http://paste.ubuntu.com/20227/ for output.
    Does this look strange or different to other peoples output of ‘cat /proc/bus/usb/devices’.

    I know the 3G dongle works as it’s fine in XP.

    Thanks
    Colin

  26. Hi Dale,

    I’ve managed to get my EEE to recognise the E169G and send it the commands to be a modem automatically. I’ve written it up here: http://www.greenhughes.com/content/using-huawei-e169g-usb-mobile-internet-modem I used the method you described and worked out the steps to get this to happen on connection of the device using the link you mentioned above. Many thanks for figuring out how to make this bit of kit work with the EEE, and explaining what was going on with it!

  27. simon says:

    thought this was too good to be true. I’ve successfully connected on three occasions now, but now…whenever I try to connect via network connection it just hangs. I input the command codes and get the expected response but can’t connect.If I try to set up a new connection it also crashes. Have I messed up my system? Any steer or help really appreciated.

  28. Hi Simon,

    I find that sometimes the EEE forgets which device to use and I get these symptoms. If you view the hardware properties for the connection, check that the entry for the E169G is still selected and not the internal modem (which is missing anyway). Has anyone else noticed this issue?

  29. Liam Green-Hughes thanks for your post and script. Following that I am now connected, just need to sort out DNS but that is easy.
    Thanks all.
    Colin

  30. mario says:

    Dale, no I didn’t try “apt”? What exactly should I try to do? For the record, I run Xandros Linux. I don’t seem to have usblib installed.

  31. mario says:

    Oh, hmmmm apt get usblib? I’d need to have a network connection for that. That’s what I need the Huawei for….

  32. dale says:

    @mario – yeah, I meant apt get install. But without an internet connection – even access to an ethernet one? – yeah, I can see how that’d be difficult!

  33. Dr oozy says:

    A note to people gettign the problem..

    Looking for target device
    OK, target device not found. Action required
    Looking for default device
    Default device not found. Is it connected? Bye

    I had this for ages and tore my hair out, I then setup the files as explained in http://www.greenhughes.com/content/using-huawei-e169g-usb-mobile-internet-modem-eee

    This did not work at first until someone suggested I boot the eeePC with the modem in. Then it worked.

    the speed is terrible currently but I think its the house im in .. will try at work on monday.

    Hope this helps.

  34. Jamie Walker says:

    Interesting… I can’t run the program by doing usb_modeswitch – even though it’s set as the right executable, and I’m in the correct location. I’ve got a version 2.0 or higher of libusb, I thought that was the oddness and problem.

    However, if I doubel clcik it in Xandros file manager, the program works! It just can’t find it from the command line :/ So – I’m going to see if I can make ‘shortcut links’ to execute the program with the right command.

  35. Jamie Walker says:

    Ah – further info – it’s version 0.9.4 that comes up with the floating point error on my eee. Version 0.9.3 seems to behave fine. Further investigation…

  36. Jamie Walker says:

    Okay – further further stuff – you may want to merge these items.

    Using version 0.9.3 the program runs, I don’t get the errors about ‘floating point’ when trying to execute the program, but it says there’s no ‘default product id’ even when using the commandlines as suggested above. Looks like time for me to get rid of Linux and go back to XP, which is a shame, because I like the Linux interface.

  37. Jamie Walker says:

    Final notes on this – I’ve recovered my eee to its fresh out the box (using DVD and USB stick) state. Even then, without installing any additional software or libraries, I get the ‘Floating Point Error’ on the most recent version (0.9.4) of usb_modeswitch .

    I’ve tried to advice that someone found in another thread, with a different version of the modeswitch app, but this doesn’t handle the codes correctly for the e169g ; it states the same ‘no default ID’, etc.

    So… there’s obviously something not quite compatible on my eee. Any thoughts on what I should be looking at updating to help support the stick? It looks like it’s libusb that I need to do something to – but perhaps the xandros one doesn’t want to work…

  38. Michael says:

    This has proved invaluable for making my lovely little eeepc indispensable – thank you!

  39. Gabriel says:

    Hi
    Reading your description I thought I could risk buying an E169 (as they don’t sell prepaid 3 with other modems here), even being a newbie on linux.
    But now I am somehow discouraged reading about that unsolved floating point error.
    The mentioned forum post doesn’t exist (anymore?). I googled a few links on the floating point exception, these links end on empty sites (seemingly the same forum post in various links).
    Is it really a problem of the current version of usb-switch?

  40. dale says:

    @Gabriel – All I can comment on is my own experience – and I’ve never encountered any floating point errors. Sorry.

  41. Gabriel says:

    I found something in a german forum. It seems to work now. I haven’t logged in yet (my account needs activation first), but the E169 is recognized and I got as far as the provider’s login-screen.
    No FPE occured so far with 0.9.4.

    The most funny thing that happened: When I plug the the stick into the EEE it opens a lot of windows (about 20 windows popping up in very short intervals) asking whether to open it with filemanager or not. It takes some time to get rid of them all.

  42. Annalise says:

    Thanks for the instructions Dale, I can get all the commands to work and see it as a usb modem but the only problem now is that when i plug in the modem and start to create a new connection it just freezes and my eeepc crashes. Do you know what is wrong?

  43. Jamie Walker says:

    Gabriel – good on you – can you let us know the german foru link you found the fix? I’ll see if it works for me as well!

  44. Jamie Walker says:

    Ah – hah! Using Gabriel’s hints, I spotted a post on the author of USB_modeswitch’s forum, and I now have it working (well, I can get it to recognise it the device, but I have no mobile signals at home, so will complete the set up when I get into work tomorrow.)

    So – three overall problems here – and this is what they are…

    The first culprit seems to be version 0.9.4 of modeswitch, which, for some reason, gives some people Floating Point Errors. However, it seems the precompiled 0.9.3 doesn’t – so grab that from the author’s site at:
    http://www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?t=23

    The second culprit – noobs like me not understanding the way linux commands work. Just typing usb_modeswitch doesn’t work, even when in the same directory. As explained above, we have to preface the command with ./usb_modeswitch . That’s not normal for DOS-babies like me, y’see 😉

    The third culprit – DALE LANE! Dun-dun-durrrrrrrrrr!

    No, not really. But, as Gabriel mentioned, there was a post on the author’s forum where he spotted that the commands published above don’t look quite right. The letter ‘x’ on this blog has turned into a non-standard character – hence when people who CAN get modeswitch working spot that they have ‘device not found’. So all you need to do is, when using the following command lines:

    ./usb_modeswitch -v 0x12d1 -p 0x1001 -d 1
    ./usb_modeswitch -v 0x12d1 -p 0x1001 -H 1

    …is paste the command lines, one at a time, and then cursor back, and replace all occourances of the letter ‘x’ with you deleting it, and retyping ‘x’ on your keyboard.

    And now – it works. Thanks Dale, Gabriel, and everyone else here. Now, I’m going to lie down in a room – and be really pleased that I’ve solved my first ever linux puzzle!

    No, not really. But there’s two things going

    No, not really, the culprit is still, for many people, 0.9.4 which is still causing hysterical horror and random floating point errors. However, 0.9.3beta worked

  45. Jamie Walker says:

    ….and now posting,from my eee using the e169g modem. Excellent!

    I’ll look into the automating notes as well, or create a script that passes the lines on plugin.

    Now the only thing i need to look for is a tool that lets me check system strenth; with the Windows tool a useful thing to know is if you’re in a TURBO area for 3g reception…

  46. Gabriel says:

    What helped me can be found in
    this thread

    As I was not really capable to install the alternative deb I actually used the original binary from the draisberghof-site along with the conf from the alternative link. Still I didn’t get any floating point errors. Maybe each EEE acts different.
    On my next plugin everything worked fine, without lots of windows popping up (as they did the day before).
    There’s just one thing left now: Activating the E169 switches on the WLAN.

  47. Frederik says:

    I have the same problem as Annalise :

    June 28th, 2008 at 4:14 am

    Thanks for the instructions Dale, I can get all the commands to work and see it as a usb modem but the only problem now is that when i plug in the modem and start to create a new connection it just freezes and my eeepc crashes. Do you know what is wrong?

  48. dale says:

    Nope – no idea, sorry – that’s never happened to me.

  49. frederik says:

    Maby its because its eee 900. does annybody have the same problem and has anybody fixed it?

    The initialization runs fine with modeswitch but when you open connection wizard and chose 3g the eee goes down.