====== Install a Qualcomm Gobi 2000 on a Thinkpad on Linux ====== A 3G modem with GPS support built into some IBM/Lenovo ThinkPad laptops. Most carriers turned 3G off already or are going to do so in 2025, so the modem part is going to be useless unless you somehow managed to make your own 3G transmitter. The GPS part should still work, so these instructions should still apply for the foreseeable future, as long as the GPS satellites are still in orbit. See also [[https://www.thinkwiki.org/wiki/Qualcomm_Gobi_2000]] You can verify the ID with ''lsusb'', on mine it's ''05c6:9204''. Take note of it, it's going to be important later. ===== Install software and firmware ===== Install ''gobi-loader'' from the AUR or whatever package manager your distro uses. It should have the necessary udev rules to load the necessary firmware at boot. Do not install ''gobi-firmware'' from the repos, it likely has the wrong firmware. Instead, install it manually as described below. FIXME //all of this could easily be a PKGBUILD// Next, obtain a copy of [[https://download.lenovo.com/ibmdl/pub/pc/pccbbs/mobiles/7xwc48ww.exe|7xwc48ww.exe]], unpack it with ''innoextract'' and ''msitools'', and copy the necessary files in the correct place. innoextract 7xwc48ww.exe -I app/Driver/GobiInstaller.msi msiextract -C GobiInstaller app/Driver/GobiInstaller.msi cd GobiInstaller/Images/Lenovo sudo mkdir -p /lib/firmware/gobi sudo cp 6/* /lib/firmware/gobi sudo cp UMTS/* /lib/firmware/gobi This copies the generic ones, refer to [[https://www.thinkwiki.org/wiki/Qualcomm_Gobi_2000#Choosing_the_Right_Firmware|this table]] if you have a carrier in the list. Now you can reboot. If successful, the ID in ''lsusb'' should change to ''05c6:9205'', and you should have 3 devices starting with ''/dev/ttyUSB'' instead of only one. You should now be able to use it with ModemManager. ===== Make the GPS work ===== Create these two files, and make the script executable. #!/bin/sh stty -F $1 speed 9600 echo "\$GPS_START" > $1 SUBSYSTEM=="tty", ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9205", SYMLINK+="gobi%n" GOTO="gobigps" GOTO="gobigps_end" LABEL="gobigps" ATTRS{bInterfaceNumber}=="02", SYMLINK+="modem" ATTRS{bInterfaceNumber}=="03", SYMLINK+="gps", RUN+="/etc/udev/enable_gps $devnode" LABEL="gobigps_end" sudo chmod +x /etc/udev/enable_gps You should now be able to see NMEA data out of ''/dev/gps''. If it doesn't, try with another set of firmware. Then, you can use gpsd and sync time with ntp. ===== Location ===== GPSD_OPTIONS="-n" DEVICES="/dev/gps" sudo systemctl enable gpsd sudo systemctl start gpsd cgps -s FIXME //use geoclue to get google maps working?// ===== Time ===== If you're trying to sync time with ntp or chrony, be aware this GPS does not support PPS signals, so while it can be roughly accurate to within a second, it's definitely not going to be more accurate as using NTP servers on the Internet. Start gpsd, then add something like this to your chrony.conf: refclock SHM 0 delay 0.0 refid NMEA sudo systemctl enable chronyd sudo systemctl start chronyd watch -n1 chronyc sources