Update, September 2016:
This post has been slightly shortened. I would also like to add that it’s over five years old now and newer dongles probably use less braindead SIM lock systems.
Step one: get your unlock code.
Find your modem’s 15-digit IMEI, open up a terminal, run
python and copy-paste the following code:
import hashlib def get_code (input): imei=str(input) digest=hashlib.md5((imei+"5e8dd316726b0335").lower()).digest() code=0 for i in range(0,4): code += (ord(digest[i])^ord(digest[4+i])^ord(digest[8+i])^ord(digest[12+i])) << (3-i)*8 code &= 0x1ffffff code |= 0x2000000 return code
Hit Enter twice after pasting. Next, type in the following, replacing the example IMEI with your own:
Hit Enter and you’ll get your 8-digit unlock code. For my example IMEI, the code would be
Step two: find your dongle’s control channel.
Open a terminal and become superuser (
sudo -i or
cat /dev/ttyUSB1 and so on, until you get a continuous output that looks like this:
Note that the
DSFLOWRPT messages will only appear when the dongle is actually connected. If it isn’t connected, you’ll probably get
BOOT messages instead. If you’re getting no output, hit Control-C and try again with the next ttyUSB. If you run out of ttyUSBs to try, I don’t know what to say.
Step three: send the unlock command.
If you do get output, don’t hit Control-C or close the terminal. Instead, open another terminal window and copy-paste this command, replacing 47412550 with the unlock code you got in the previous step and /dev/ttyUSB1 with the control channel you just found out:
chat TIMEOUT 1 '' 'AT^CARDLOCK="47412550"' 'OK' > /dev/ttyUSB1
You should see
OK on the other terminal window. I also got a
+CME error: operation not allowed error, but it didn’t seem to be a problem.
If you get something like
+CME error 3, though, that means something has gone wrong at some point. Maybe look for another guide?