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.


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

…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. henry says:

    the conf files you intended to upload failed to load. 404 error

  2. dale says:

    woops… sorry about that.

    turns out my web host provider has locked down server so it wont host random file extensions.

    i’ve renamed the files to end in .txt so that seems to have fixed it


  3. Alex Tucker says:

    Handy article, ta!

    However, the usb_modeswitch configuration files lead to a 404.

  4. dale says:

    you just beat me to commenting 🙂
    hopefully it should work now (see my comment above)

  5. Neil says:

    Hi Dale,
    I’m getting the message that the default device cannot be found and is it connected but it’s definately connected. Any advice?

  6. dale says:

    Neil – How far did you get before you got that error? What was it that gave you the error?

  7. Neil says:

    Many thanks for the quick reply.
    I’ve got the modem running on Windows XP, it’s plugged into the Asus at the moment the blue light is on. So the modem is working.

    I get the error messgae when running USB_MODESWITCH it just doesn’t pick up the USB

    I think it’s is a problem on my part with the config file, I’m not sure how to include both the disable code and the enable code.

    Any ideas?

  8. dale says:

    Neil – If you look at how I ran the USB modeswitch command, I ran the two command codes separately.

    First, I ran the command with the config file containing only the DetachStorageOnly command. It showed that usb-storage disconnected successfully.

    Then, I modified the config file to include only the command to activate the modem mode, and re-ran the command. It showed that the huawei command was sent successfully.

    Does this help?

  9. Neil says:

    Thanks for the reply

    It’s still coming up with the error message when usb_modeswitch is launched from the terminal, on your screengrab it says
    looking for default device
    ok default device found…. etc

    I get
    Looking for target device
    OK target device not found.
    Looking for default device
    Default device not found. Is it connected? Bye

    This is with the Detach config file
    Any suggestions?

  10. Bounderboy says:

    Could you confirm if i was able to get this working would you have to go through this procedure everytime to get connected?

  11. dale says:

    @Neil – very strange… feel free to try running the following commands and send me the output – I’ll take a look:

    cat /proc/bus/usb/devices > /home/user/proc.bus.usb.devices.txt
    cat /etc/usb_modeswitch.conf > /home/user/usb_modeswitch.curr.conf
    ./usb_modeswitch > /home/user/usb_modeswitch.out

    This will create three files in the /home/user directory – if you can send them to email at, I’ll compare it with the same from my EEE PC, and see if I can spot any obvious differences!

  12. dale says:

    @Bounderboy – depends what you mean by procedure.

    Going through the Connection Wizard stuff – nope, that’s a one-off setup.

    Running the USB_Modeswitch command – yup. When you connect the USB modem, you need to activate it and that’s what the USB_modeswitch commands do. There is more we could do to script it to make it quicker to run – for example, to run the two separate commands one at a time for you.

  13. Neil says:

    Hi Dale
    Cheers for the reply,
    After all that, decided to swap it for an E220 🙂
    Hopefully that’ll be easier.

    Thanks for helping anyway

  14. henry says:

    thanks for your deply dale.

    will get scripts ready and try in 3 hk with their shop demo. will get back to you with the results in few days.

  15. dale says:

    @Neil – From what I’ve read on the eeeuser forum, the E220 just works out-of-the-box. You should have a much easier time! Good luck.

  16. yasin says:

    Hi Dale

    Thanks for the heads up. I’m interested to know the usb power requirements of the E169G.

    Here’s wishing it’d draw 100mA or less as I’d want to use it on an N810 😉

  17. Neil I says:


    I am having the same problem as the other Neil in that I am getting the
    following error when running usb_modeswitch with your first script:

    Looking for default device
    Default device not found. Is it connected? Bye

    Did you find a solution to this problem?


    Neil I

  18. dale says:

    @Neil I – You can see how far we got here. If you’d like me to look into it further, please feel free to send me the files that I’d asked him for before.

  19. Lewis says:

    Thank you very much for writing this guide, I just got E169 today and got working in 5 mins. Cheers.

    I tried using your conf files but usb_modeswitch wouldn’t talk to the modem. So I entered the params on the command line and it worked like a charm.

  20. […] practicality I’ve already written about getting it working on Linux. In short, it’s a pain in the ass. It took a fair amount of hassle to figure out how to do […]

  21. Kim Day says:


    I got a friend over to try and set up my 3 HG169, such that it would work on my Asus (4GB). He got half way through your instructions. Firstly, when pluging the HG169, the laptop did not recognise it was plugged in and could not find any ‘default device’. Secondly, then when he tried to run the two ‘.conf’ files from the shell command line, the response was ‘permission denied?’ Finally you refer to ‘USB Sniffer’ (I cannot find this anywhere in the Xandros op system?

    Grateful, if anyone can give me any advice on how to overcome these difficulties (in a blow by blow acoount if possible) as I am not familiar with how to use Linux. Especially how to run the .conf files.



  22. dale says:

    @Kim Day – Sorry to hear you misunderstood my post. I’ll try and clarify here.

    …when pluging the HG169, the laptop did not recognise it was plugged in…

    No – this was largely the point of the post. The problem is that the composite device – capable of running in two different modes – is not recognised by the EEE PC when you plug it in.

    The aim of this post was to describe steps that you can take so that the EEE PC can recognise it.

    …when he tried to run the two ?.conf? files from the shell command line, the response was ?permission denied?? …

    ah… no, you’re not meant to run the config files. They are not executables (i.e. programs) – they are text files that contain information to be used by a program – in this case, usb_modeswitch.

    Look at the screenshot half-way through my post where I show the terminal – you can see that I never ‘run’ the config files.

    By default, usb_modeswitch looks for config information in /etc/usb_modeswitch.conf – and when hacking this together, I just edited this file before each time I ran the command.

    So when I wanted to deactivate the modem’s storage mode, I edited /etc/usb_modeswitch.conf to look like this. Then ran the usb_modeswitch command.

    Then, when I wanted to do the next step – to activate the modem, I edited the /etc/usb_modeswitch.conf file again so that it looked like this, and ran the usb_modeswitch command below.

    In hindsight, although this works, I much prefer Lewis’ approach (see his comment above) of just doing it all at the command line. It saves messing around editing config files, and would be much easier to script.

    ./usb_modeswitch DefaultVendor=0x12d1 DefaultProduct=0x1001 DetachStorageOnly=1

    Note – usb_modeswitch isn’t a standard Xandros command either. A link to where I found it is included in my original post.

    And it’s worth highlighting that the author of the utility discusses other approaches to automating this which could be useful if you wanted this as a long-term solution.

    …Finally you refer to ?USB Sniffer? (I cannot find this anywhere in the Xandros op system?

    USB sniffer is a generic term for a type of computer program that I used. If you want to know more about the USB sniffer that I used, you can click on the links in the post where I refer to it.

    But, as I said in the post – this is a tool that I used in my investigation. Firstly, it is a Windows application – as I said, I plugged the USB modem into a Windows computer so that I could watch what happens when it works properly. I wanted to watch what commands Windows sends the E169 to make it switch between storage and modem modes, so that I could mimic that on the EEE PC. Unless there is more investigating you are interested in doing, you don’t need to be looking for a USB sniffer.

    …if anyone can give me any advice on how to overcome these difficulties (in a blow by blow acoount if possible) as I am not familiar with how to use Linux. Especially how to run the .conf files…

    How are you trying to run things? Do you know how to get to the Terminal in the first place? If not, this may be a little difficult as a first introduction to command-line work. You may find it simpler to get one of the newer (e.g. E220) modems instead.

    I hope that some of this has helped

    Regards, D

  23. Kim Day says:


    Many thanks for responding, I will try again. Regards Kim

  24. Mark Olive says:

    Hi dale, I’m the friend Kim had over to try and get the E169G working, although unfortunately it’s been some time since I last used Linux.

    I copied usb_modeswitch and the .conf files into a subdirectory of ‘My Documents’ and attempted to run:
    ./usb_modeswitch -c usb_modeswitch-1.conf

    However rather than saying ‘Ok, found default device’ as shown in your screenshots, usb_modeswitch reported ‘no default device found’ (or something similar). I tried copying usb_modeswitch-1.conf to /etc/usb_modeswitch.conf but got a ‘permission denied’ message.

    It seems as though usb_modeswitch can’t see the E169G for some reason. I tried all the USB ports, and the same happened…?

  25. Mark Olive says:

    We worked it out in the end, thanks for your comment dale! I created a shell script with the following:

    ./usb_modeswitch -v 0?12d1 -p 0?1001 -d 1
    ./usb_modeswitch -v 0?12d1 -p 0?1001 -H 1

    Then, all you have to do is double-click the script in filemanager after connecting the device. Web browsing did seem rather slow though, but that could be a signal issue.

  26. richard says:

    hi dale. thanks for the tutorial, it has been a great help. Was just owndering if you could answer a few questions of mine.

    1. Did you have libusb installed on the machine
    2. if you did, how did you make the file when it has no c compiler?



  27. dale says:

    @richard – Thanks for the comment.

    I didn’t need to make usb_modeswitch. The zip file I downloaded from the developer’s site included a pre-compiled executable which ran fine.

  28. richard says:

    no, sorry i meant compile libusb. I am new to linux and am slightly confused. i thought i had to install libusb to get usb_modeswitch to work, which needs to be compiled. when i tried to compile libusb it told me i needed a c compiler. am trying to install gcc now.

    thanks in advance


  29. dale says:

    @richard – I didn’t install or compile anything to get usb_modeswitch to work.

    I guess its possible that I’d already installed a prereq library for something else at an earlier date… I don’t have the EEE PC with me, but will have a check what is installed when I get home.

    I think this is unlikely, though. The fact that noone else has mentioned needing to install prereq libraries as a problem suggests that it’s probably not necessary.

  30. tam says:

    how do i send a message? when i try to send it says message failed? anyone?

  31. dale says:

    @Richard – dpkg shows that I do have libusb-0.1-4 (0.1.12-5) installed. If it’s not installed by default on EEE PCs (I have no factory default one to compare with, so I don’t know) then perhaps I added it when I was playing with gPhoto?

    I wouldn’t have compiled it myself though – I’m sure it would just have been installed from a repository using apt-get install.

    @tam – sorry, I’m not clear what you are asking. What type of message? What is reporting a failure?

  32. John Goodman says:

    Hi I have looked at the instructions re the modem but I am very new to computers and also Linux and I am not sure where to start do I type all the whole txt in or would it be poss for you to send me it in a file that I could copy to my memory card and then run the instructions in the Linux machine ( sorry if this sounds silly) but I do so want to get it to work I know it will work if I put XP on The Eee PC but want to stay with Linux if I can.


  33. dale says:

    @John – Sorry to be unhelpful, but if you are very new to Linux then it’s probably best that you go with a newer modem that doesn’t require any of this hacking. It’d be so much more straightforward for you. I’m just not sure how helpful these instructions will be to someone new to computers.

  34. Graz says:

    Cheers Dale,

    Nice guide, as well as helping me get my eeepc hooked up, it is an interesting investigation.


  35. Richard says:

    Cheers Dale,

    I managed to get it working in the end by putting the following in a shell script.

    ./usb_modeswitch -v 0?12d1 -p 0?1001 -d 1
    ./usb_modeswitch -v 0?12d1 -p 0?1001 -H 1

    Cheers Dale

    Still trying to figure out how to monitor my usage limit, any ideas anyone?

  36. Rob says:

    Would just like to say a huge thanks for working so hard to get the E169 to work. Never touched a Linux distro until i bought my eeepc 2 weeks ago. With the help of your site and a lot of Google-ing to learn the basics of Linux (Xandros), i managed to get my E169 dongle working, over the space of 3 days (if i can do it, anyone can( lots of determination and coffee required 🙂 )). Next task is to get the process automated. Again many thanks

  37. Stuart McWilliam says:


    Can you help?

    My first foray into linux has hit the buffers. I can?t get my web n walk stick (t-mobile) to work with my Eee PC — despite promises from t-mobile that it would.

    They subsequently tell me they can?t/won?t support Linux….but it appears it will, though I know next to nothing about Linux, I?m afraid.

    The EeePC recognises the stick and tries to connect. It give me an error message along the lines of ?Failed to run pon. (pppclientservice.cpp:1007) The link was closed. Unable to reach destination.

    If you can offer any help, I?d be very grateful.

    By the by, if you want to avail yourself of free texting, you might like to try — an altruistic little something I?ve been involved with.



  38. dale says:

    @Stuart – Sorry, I don’t know. But a google for “pppclientservice.cpp:1007” seems to turn up a few places to start looking?

  39. jerry says:

    will 3’s (ZTE MF-622 Modem) work with LINUX O/S as well.

  40. dale says:

    @jerry – No idea, sorry, I’ve never tried.

  41. […] To be fair 3 only claim that the USB stick supports the Windows 2000, XP, Vista or and Mac OSX operating systems, so I didn’t expect it to be easy to setup and use on my Linux based EEE PC. However there is a great user community around the EEE PC that usually figures out how to get things working with it so I did a quick Google only to find that the answer I was looking for is in one of Sam’s posts which links to Dale Lane’s blog and his guide to Using a 3 mobile broadband dongle with the EEE PC. […]

  42. Hi Dale,

    First of all, thanks for putting this together – excellent stuff!

    I’m having a little problem which I’m sure is something obvious. Using the two commands with options that Richard outlined above, I can get this modem working fine. However, when I put them into a shell script, although each command executes, I don’t think it’s picking up the options correctly.

    My script looks like this:

    ./usb_modeswitch -v 0?12d1 -p 0?1001 -d 1
    ./usb_modeswitch -v 0?12d1 -p 0?1001 -H 1

    (The script lives in the same directory as the usb_modeswitch executable)

    When executed, the script gives me two errors, one after the other. I don’t have my eeepc to hand to give you the exact error, but it’s something like “default device not defined”. usb_modeswitch is executing, but I don’t think it’s picking up the options for some reason.

    I’m sure it’s something obvious, but any ideas? Cheers!

  43. Tim Burge says:

    Many thanks
    Despite being new to linux I have got it to work.
    The speeds seem slower than i expected, do you think that this relates to the generic driver?

  44. Martyn Brown says:


    I’ve looked at the three website & I think it suggests that the E169 is newer than the E220. The device is smaller & has only been added to their modem list recently. Also the E169 on a pay as you go type package costs more.

    I’ve also seen a post at that reviews both modems. The conclusion from this is that the ‘newer’ E169 is better.

    Now I’m confused?

  45. dale says:

    RE: Which is better – the E169 or E220?

    To be honest, I’m not well qualified to comment – I’ve never used the E220.

    But I guess it depends on what criteria you consider important. If using it on the EEE PC is an important criteria, then I would argue that the E220 is better – because it works without this complicated work. E220 (apparently) works out of the box, and every time, without scripting or commands.

  46. Jerry Webb says:

    Many thanks for the clear and concise instructions Dale – I’m posting this using my new E220 usb modem ten minutes after discovering your guide, and I’m very grateful – I’m heading off into the boonies next week and was beginning to think I’d be off the grid completely for three months with a dud USB modem and an Asus EEE for company!

  47. dale says:

    you’re welcome – glad it was useful!

  48. Anthony says:

    I’ve tried to follow this the best I can but it’s way over my head! Does anyone fancy putting together a step-by-step dummies guide? I’ve managed to do a whole bunch of things with a few different Eees but this is by far the most difficult thing I’ve ever attempted!

  49. dale says:

    @Anthony – The instructions at the moment are basically download the USB_Modeswitch tool, plug in the modem, then run the commands in a Terminal window:
    ./usb_modeswitch -v 0?12d1 -p 0?1001 -d 1
    ./usb_modeswitch -v 0?12d1 -p 0?1001 -H 1

    Which bit do you think needs more step-by-step help?

  50. Dave Hall says:

    I found if you put the following into /etc/usb_modeswitch

    # Huawei E169
    DefaultVendor= 0x12d1
    DefaultProduct= 0x1001

    But the binary from the tarball into /usr/local/bin/usb_modeswitch and add the following to the /etc/rc.local


    If you boot with the E169G in the usb port it all just works 🙂