Как использовать телефон на Android в качестве GPS сенсора в Linux. Часть 2
Life-Hack [Жизнь-Взлом]/ХакингВ качестве приложения, которое принимает GPS координаты и показывает расположение на карте, а также записывает путь движения, я буду использовать FoxtrotGPS — лёгкое и быстрое картографическое приложение.
FoxtrotGPS — это простое в использовании бесплатное приложение GPS/GIS с открытым исходным кодом, которое хорошо работает на небольших экранах и особенно подходит для сенсорного ввода. FoxtrotGPS находится в свободном доступе для публичного использования, распространения и изменения в соответствии с условиями GNU General Public License 2.0 (GPLv2).
Для установки FoxtrotGPS в Debain, Kali Linux, Linux Mint, Ubuntu и их производные выполните команду:
sudo apt install foxtrotgps
Для установки foxtrotgps в Arch Linux, BlackArch и их производные выполните команды:
gpg --recv-keys 894EF3C0A2C08D8B git clone https://aur.archlinux.org/foxtrotgps.git cd foxtrotgps/ makepkg -si
Запускаем программу:
foxtrotgps
Если служба gpsd запущена, то программа сразу покажет ваше расположение:

Меню программы:

1. Настройки
2. Полноэкранный режим (F11)
3. Увеличение карты
4. Уменьшение карты
5. Автоцентр на вашем расположении
6. Следующий репозиторий карт (поддерживается сразу несколько бесплатных карт!)
7. Предыдущий репозиторий карт
8. Включить запись маршрута
Настройка FoxtrotGPS

На первой вкладке настроек показывается
- текущая скорость
- средняя скорость
- максимальная скорость
- длина пути
- время записи трека
- данные GPS (координаты и время)
- количество видимых спутников
На следующей вкладке можно включить или отключить запись маршрута. Если нажать кнопку Split, то запись продолжится в новый файл.

На третьей вкладке настроек можно выбрать карту, систему единиц, подключить датчик сердечного ритма, а также поменять адрес и порт GPSD службы, если вы хотите использовать нестандартные значения.

Карта по умолчанию в FoxtrotGPS выглядит так:

В FoxtrotGPS вы можете выбрать спутликовый вид от Google:

Ещё есть такой вариант:

А одна из карт показывает на водяных знаках необходимость использовать API:

Симуляция работы GPS приёмника
Некоторые программы, например, Google Earth, по известным только им причинам не работают с GPSD — они пытаются сканировать систему в поисках приёмника GPS.
Примеры таких устройств:
- /dev/ttyS0 (serial device)
- /dev/ttyUSB0 (USB устройства)
- /dev/gpsd0 (Generic GPS device 0)
Вы можете имитировать работу таких устройств с помощью socat командами вида (IP, номера портов, а также номера устройств меняйте на свои):
ssudo socat pty,link=/dev/ttyS0,raw tcp:192.168.1.3:50000 sudo socat pty,link=/dev/ttyUSB0,raw tcp:192.168.1.3:50000
В принципе, с таких устройств становится возможным считывать данные — я проверял с помощью программ cat и bettercap.
sudo cat /dev/ttyUSB0
Но Google Earth у меня так и не заработала.
Если вы увидели какую-то ошибку в моих командах socat, либо вам удалось успешно работать с такими виртуальными устройствами в каких-либо программах, то просьба написать об этом в комментариях.
GPS в Bettercap
По умолчанию Bettercap использует устройство /dev/ttyUSB0 (можно поменять в настройках). Для того, чтобы симулировать будто бы GPS информация приходит от устройства /dev/ttyUSB0, запускаю следующую команду:
sudo socat pty,link=/dev/ttyUSB0,raw tcp:192.168.1.3:50000
Затем запускаем Bettercap
sudo bettercap
Внутри сессии Bettercap включаем GPS модуль и выводим текущие координаты:
gps on; sleep 5; gps.show
На моей системе эта команда успешно вывела информацию о координатах, качестве и количестве видимых спутников.
latitude:12.457478 longitude:99.977055 quality:1 satellites:24

GPS в Kismet
Kismet стала известной как программа для сбора информации о беспроводных точках доступа, в том числе с их привязкой к GPS координатам. В настоящее время программа бурно развивается и поддерживает множество источников радиосигналов, в том числе:
- Wi-Fi
- Bluetooth
- SDR
Kismet может работать с разными источниками GPS, в том числе напрямую с GPS ресиверами или получая данные по сети.
Поддерживаемые типы GPS:
- serial
- tcp
- gpsd
- web
- virtual
Пример настройки для получения данных от последовательного устройства:
gps=serial:device=/dev/ttyACM0,reconnect=true,name=LaptopSerial
Пример настройки для получения данных непосредственно из сети (можно подключиться к телефону вместо GPSD и получать поток GPS координат):
gps=tcp:host=192.168.1.3,port=50000
Пример настройки для считывания данных от GPSD службы:
gps=gpsd:host=localhost,port=2947,reconnect=true
Боле подробная информация на странице: https://www.kismetwireless.net/docs/readme/gps/
GPS приёмники для ноутбука
Если вам нужен внешний GPS приёмник для вашего ноутбука или компьютера, который вы можете подключить по USB и получать текущие координаты независимо от телефона, то вы можете выбрать любое из следующих устройств, благо цены на них невысокие:
- BEITIAN BS-71U (поддерживает NMEA-0183)
- BEITIAN BS-70U (поддерживает NMEA-0183)
- BN-808 USB GPS Receiver (поддерживает NMEA-0183)
- BT-708 GPS Receiver (поддерживает NMEA-0183)
- BU353S4 (поддерживает NMEA-0183)
- VK-172
- VK-162
- gps usb receiver
Автоматический запуск службы GPSD с опциями и на определённом устройстве
При желании, вы можете выполнить настройку службы GPSD в файле /etc/default/gpsd:
# Default settings for gpsd. START_DAEMON="true" GPSD_OPTIONS="" DEVICES="" USBAUTO="true"
Укажите опции как значение GPSD_OPTIONS, а желаемое устройство, в том числе вида tcp://*, укажите в качестве значения DEVICES.
Для запуска в фоне службы:
sudo systemctl start gpsd.service
Для включения автоматического запуска gpsd при каждой загрузке компьютера:
sudo systemctl enable gpsd.service