{"id":430644,"date":"2024-08-29T09:06:23","date_gmt":"2024-08-29T09:06:23","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=430644"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=430644","title":{"rendered":"<span>\u041a\u0430\u043a \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 Linux \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e C++ \u0438 Qt. \u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u043e\u043c \u043f\u043e\u0433\u043e\u0434\u044b<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0445\u0430\u0438\u043b, \u044f backend-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 SimbirSoft. \u0425\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u043e\u043f\u044b\u0442\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u041e\u0421 Linux \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0441\u0432\u043e\u0438\u0445 \u0446\u0435\u043b\u044f\u0445. <\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u00ab\u041f\u043e\u0433\u043e\u0434\u0430\u00bb, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0435\u0440\u0451\u0442 \u0438\u0437 \u0441\u0435\u0442\u0438 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443, \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0411\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u043f\u043b\u043e\u0445\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u043e \u0441\u0430\u043c\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u043e, \u0433\u0434\u0435 \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f. \u041d\u043e \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c? \u041b\u0435\u0433\u043a\u043e!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a40\/166\/d39\/a40166d398ad617e0c7095d1df7acff8.png\" width=\"780\" height=\"440\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a40\/166\/d39\/a40166d398ad617e0c7095d1df7acff8.png\"\/><\/figure>\n<p>\u041d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u044f\u043b\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u043e\u0440\u0442\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a \u043d\u0435\u043c\u0443. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043a\u0440\u043e\u043c\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u044f\u043b\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f:<\/p>\n<p>&#8212; \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (\u0434\u043e\u043b\u0433\u043e\u0442\u0443, \u0448\u0438\u0440\u043e\u0442\u0443, \u0432\u044b\u0441\u043e\u0442\u0443);<\/p>\n<p>&#8212; \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0441\u0435\u0442\u0435\u0432\u043e\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 (\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0442\u0438\u043f, \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 Wi-Fi);<\/p>\n<p>&#8212; \u0437\u0430\u0440\u044f\u0434 \u0431\u0430\u0442\u0430\u0440\u0435\u0438;<\/p>\n<p>&#8212; \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 (\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043d\u044f\u0442\u043e\/\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0435\u0433\u043e).\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/p>\n<p>\u0421\u0442\u0435\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u2013 C++ \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 Qt (5.12). \u0417\u0430\u0434\u0430\u0447\u0430 \u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439. \u041d\u043e \u043f\u0435\u0440\u0432\u043e\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435 \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u043e\u0431\u043c\u0430\u043d\u0447\u0438\u0432\u043e. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438. \u041d\u043e \u043e\u0431\u043e \u0432\u0441\u0451\u043c \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u044b\u0432\u043e\u0434 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0438\u0434\u043e\u0432 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<h2>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435\u00a0<\/h2>\n<p>\u041f\u043e\u0447\u0438\u0442\u0430\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043a Qt (<a href=\"https:\/\/doc.qt.io\/qt-5\/qtpositioning-index.html\"><u>\u0440\u0430\u0437<\/u><\/a>, <a href=\"https:\/\/doc.qt.io\/qt-5\/qtlocation-index.html\"><u>\u0434\u0432\u0430<\/u><\/a>) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0433\u0443\u0433\u043b\u0438\u0432, \u0432\u044b \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0438\u0436\u0435. \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043b\u0430\u0441\u0441, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cpp\">class Navigation : public QObject { Q_OBJECT   public: explicit Navigation(QObject *parent = Q_NULLPTR); };   Navigation::Navigation(QObject *parent): QObject(parent) { auto source = QGeoPositionInfoSource::createDefaultSource(this);   source-&gt;setUpdateInterval(1000); qDebug() &lt;&lt; source-&gt;sourceName();   connect(source, &amp;QGeoPositionInfoSource::positionUpdated,this,[]( const QGeoPositionInfo &amp; posInfo) {     auto coords = posInfo.coordinate();     qDebug() &lt;&lt; QString(\"Latitude %1\").arg(coords.latitude())                     + QString(\" Longitude %1 \").arg(coords.longitude())                 + QString(\"Altitude %1\").arg(coords.altitude());   }); source-&gt;startUpdates(); }<\/code><\/pre>\n<p>\u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u0438\u043a:<\/p>\n<pre><code class=\"cpp\">#include &lt;QtPositioning&gt;<\/code><\/pre>\n<p>\u0418 \u043f\u0440\u043e \u043c\u043e\u0434\u0443\u043b\u044c \u0432 .pro \u0444\u0430\u0439\u043b\u0435:  <\/p>\n<pre><code class=\"cpp\"> QT += positioning<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u043e\u043d \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u2013 \u0441\u0442\u0430\u0432\u0438\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u043b\u0438\u0431\u044b:<\/p>\n<pre><code> sudo apt install -y libqt5location5 libqt5positioning5 qtlocation5-dev qtpositioning5-dev<\/code><\/pre>\n<p>\u0412\u0440\u043e\u0434\u0435 \u0432\u0441\u0451 \u0441\u043e\u0431\u0440\u0430\u043b\u043e\u0441\u044c, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u043e\u0441\u044c. \u0414\u0430\u0436\u0435 \u0447\u0442\u043e-\u0442\u043e \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u043b\u043e\u0441\u044c. \u0423\u0440\u0430! \u0417\u0430\u0434\u0430\u0447\u0430 \u0440\u0435\u0448\u0435\u043d\u0430?<\/p>\n<p>\u0410 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0423 \u043c\u0435\u043d\u044f \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 Ubunte 20 \u0432\u044b\u0432\u043e\u0434 \u0431\u044b\u043b \u0442\u0430\u043a\u0438\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/d6e\/b81\/98d\/d6eb8198d999af8fa7a162418970a55b.jpg\" width=\"1051\" height=\"427\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d6e\/b81\/98d\/d6eb8198d999af8fa7a162418970a55b.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0412\u0438\u0434\u0438\u043c \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u00ab\u043f\u043b\u044e\u0441-\u043c\u0438\u043d\u0443\u0441 \u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440\u00bb, \u0432\u044b\u0441\u043e\u0442\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0442 (\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 altitude). \u041a\u0430\u043a-\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c\u2026 \u0410 \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0441 \u0432\u044b\u0441\u043e\u0442\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c? \u041f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443? \u041c\u043d\u0435 \u043b\u0435\u043d\u044c \u2013 \u0434\u0430 \u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u044d\u0442\u043e. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u043c\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439.<\/p>\n<h3>\u041e\u0442 Geoclue \u043a gpsd<\/h3>\n<p>\u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043b\u0435\u0433\u043a\u0430 \u043f\u043e\u0440\u0430\u0437\u043c\u044b\u0441\u043b\u0438\u0442\u044c. \u0427\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f? \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u2013 \u0448\u0438\u0440\u043e\u0442\u0443, \u0434\u043e\u043b\u0433\u043e\u0442\u0443 \u0438 \u0432\u044b\u0441\u043e\u0442\u0443. \u041d\u043e \u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0435 \u2013 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u0434, \u0441\u043e\u0431\u0440\u0430\u043b \u0435\u0433\u043e \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u043d\u0430 \u0441\u0432\u043e\u0451\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435, \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u0434\u043e\u043b\u0433\u043e\u0442\u0443 \u0438 \u0448\u0438\u0440\u043e\u0442\u0443 (\u043a\u0441\u0442\u0430\u0442\u0438, \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u0444\u0438\u0441\u0430 \u0432 \u0421\u0430\u043c\u0430\u0440\u0435 ?). \u041a\u0430\u043a \u044d\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c? \u041c\u043e\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 GPS-\u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0430 \u043d\u0430 \u0431\u043e\u0440\u0442\u0443. \u0422\u0430\u043a \u0438 \u0437\u043d\u0430\u043b \u2013 \u0432\u0435\u0437\u0434\u0435\u0441\u0443\u0449\u0438\u0439 Google \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u043c\u043d\u043e\u0439\u2026<\/p>\n<p>\u0412\u0441\u0451 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435. \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u044f\u0441\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u0437 \u0432\u044b\u0432\u043e\u0434\u0430, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e Geoclue. \u042d\u0442\u043e \u0433\u0435\u043e\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0432 Linux \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430. \u0416\u0435\u043b\u0430\u044e\u0449\u0438\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u043e\u0439\u0442\u0438 <a href=\"https:\/\/gitlab.freedesktop.org\/geoclue\/geoclue\"><u>\u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/u><\/a>. \u0421\u0435\u0440\u0432\u0438\u0441 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0441\u043b\u0443\u0436\u0431\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u043e\u0433\u043e\u0434\u044b \u2013 \u043e\u043d \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0435\u0451 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0435\u0441\u043b\u0438 \u0441\u043c\u043e\u0433 \u0435\u0433\u043e \u0442\u043e\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c.<\/p>\n<p>Geoclue \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432\u043a\u043b\u044e\u0447\u0430\u044f GPS, \u0441\u0435\u0442\u0438 Wi-Fi \u0438 IP-\u0430\u0434\u0440\u0435\u0441\u0430. \u0412 Ubuntu 20 \u043e\u043d \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>\u0412\u0441\u0451 \u0432 \u043d\u0435\u043c \u0445\u043e\u0440\u043e\u0448\u043e \u2013 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u043c \u0434\u0430\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043b\u044e\u0431\u044b\u043c GPS-\u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u043e\u043c \u0438 \u0441 \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u2014 GPS, \u0413\u041b\u041e\u041d\u0410\u0421\u0421, Galileo, \u00ab\u0411\u044d\u0439\u0434\u043e\u0443\u00bb \u0438\u043b\u0438 \u0435\u0449\u0451 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u2013 \u043d\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e. \u0412\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u2013 \u0432\u0437\u044f\u0442\u044c \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u044b\u0439 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443, \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0445 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0427\u0442\u043e \u0431\u044b \u043d\u0430\u043c \u043f\u043e\u0434\u043e\u0448\u043b\u043e? \u0415\u0441\u0442\u044c \u0434\u0435\u043c\u043e\u043d gpsd! \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Geoclue, \u043e\u043d \u0437\u0430\u0442\u043e\u0447\u0435\u043d \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u0430\u043c\u0438, \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u0438 \u0432\u044b\u0434\u0430\u0432\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON. \u041d\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e gpsd \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u2013 \u043c\u044b \u043b\u0435\u0433\u043a\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c \u044d\u0442\u043e \u043d\u0435\u0434\u043e\u0440\u0430\u0437\u0443\u043c\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"cpp\">sudo apt install gpsd<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u043b\u0438 \u0437\u0430\u043d\u043e\u0432\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u0434, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u2013 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a? \u0412\u043e\u0442 \u0442\u0443\u0442 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cpp\">QGeoPositionInfoSource *source = QGeoPositionInfoSource::createDefaultSource(this);<\/code><\/pre>\n<p>\u041c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0433\u0435\u043e\u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438\u0437 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0438\u043b\u0438 \u0438\u0437 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0441 \u043d\u0430\u0438\u0432\u044b\u0441\u0448\u0438\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0442\u0430\u043a\u0438\u043c \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u043a \u0440\u0430\u0437 Geoclue. \u0410 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d gpsd. \u0422\u043e\u0433\u0434\u0430 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0438 \u0441\u0430\u043c\u0438 \u0443\u043a\u0430\u0436\u0435\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code class=\"cpp\">QGeoPositionInfoSource *source = QGeoPositionInfoSource::createSource(\"gpsd\", this);<\/code><\/pre>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u2013 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439. \u0414\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u0442. \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u0443\u0441\u0442\u043e\u0439.<\/p>\n<p>\u0423\u0432\u044b, \u043d\u043e \u0434\u043b\u044f gpsd \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0432 Qt \u043d\u0435\u0442. \u041f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u0438\u043b\u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u0439, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u043a\u0435\u043c-\u0442\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/github.com\/jmechnich\/qtposition_gpsd?ysclid=lg3o4iop3l413527734\"><u>\u0432\u043e\u0442 \u044d\u0442\u043e\u0439<\/u><\/a>.<\/p>\n<pre><code class=\"cpp\">#include &lt;QtNetwork&gt; #include \"qgeopositioninfosource_gpsd.h\"   class Navigation : public QObject { Q_OBJECT public: explicit Navigation(QObject *parent = Q_NULLPTR);   signals: void coordinates(QString, QString);   private slots: void gpsPositionUpdated(const QGeoPositionInfo &amp;info);   private: QGeoPositionInfoSourceGpsd *sourceGpsd; QTcpSocket *tcpSocket;   };   #include \"navigation.h\"   Navigation::Navigation(QObject *parent) : QObject(parent) { tcpSocket = new QTcpSocket(this);     tcpSocket-&gt;connectToHost(QHostAddress::LocalHost, 2947);       tcpSocket-&gt;write(\"?WATCH={\\\"enable\\\":true,\\\"nmea\\\":true}\\n\"); sourceGpsd = new QGeoPositionInfoSourceGpsd(this);     sourceGpsd-&gt;setUpdateInterval(1000); sourceGpsd-&gt;setDevice(tcpSocket);         connect(sourceGpsd, &amp;QGeoPositionInfoSourceGpsd::positionUpdated, this, &amp;Navigation::gpsPositionUpdated); sourceGpsd-&gt;startUpdates(); }   void Navigation::gpsPositionUpdated(const QGeoPositionInfo &amp;info) {     auto coords = info.coordinate();   QString temp = QString(\"Latitude %1\\n\").arg(coords.latitude()) + QString(\"Longitude %1\\n\").arg(coords.longitude());   emit coordinates(temp, QString::number(coords.altitude()) + \" m\"); }   #include &lt;QCoreApplication&gt; #include \"navigation.h\"   int main(int argc, char *argv[]) { QCoreApplication a(argc, argv);   Navigation navigation; QObject::connect(&amp;navigation, &amp;Navigation::coordinates, [](QString pos, QString height)     {     qDebug() &lt;&lt; pos &lt;&lt; \" \" &lt;&lt; height; });   return a.exec(); }<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<pre><code class=\"cpp\"> tcpSocket-&gt;connectToHost(QHostAddress::LocalHost, 2947);<\/code><\/pre>\n<p>gpsd \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 TCP\/IP-\u0441\u0435\u0440\u0432\u0438\u0441, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u043a \u043f\u043e\u0440\u0442\u0443 2947. \u041e\u043d \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u0441\u043e\u043a\u0435\u0442, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0442\u0443\u0442:<\/p>\n<pre><code class=\"cpp\">tcpSocket-&gt;write(\"?WATCH={\\\"enable\\\":true,\\\"nmea\\\":true}\\n\");<\/code><\/pre>\n<p>\u043c\u044b \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u043c \u044d\u0442\u043e\u043c\u0443 \u0441\u0435\u0440\u0432\u0438\u0441\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u201cnmea\u201d.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043a\u043e\u0434 \u0435\u0441\u0442\u044c \u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041a\u0430\u043a \u0431\u044b \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c? \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u043a \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0430\u0442\u044c \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e \u0441 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430. \u041d\u043e \u0435\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2013 gpsfake. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"cpp\"> sudo apt install gpsd-clients<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0444\u0435\u0439\u043a\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b \u0438\u0445 \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u0437\u044f\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u0432\u043e\u0442 \u0442\u0443\u0442:<br \/><a href=\"https:\/\/nmeagen.org\/\"><u>https:\/\/nmeagen.org\/<\/u><\/a>. \u0414\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0444\u0430\u0439\u043b\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 NMEA \u2013 \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c gpsd:<\/p>\n<pre><code class=\"cpp\">sudo systemctl stop gpsd.service sudo systemctl stop gpsd.socket<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c gpsfake \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438:<\/p>\n<pre><code class=\"cpp\">sudo gpsfake -P 2947 -t -c 1 -l -D4 \/home\/user\/output.nmea<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c 2947 \u2013 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e\u0440\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0441\u043b\u0443\u0448\u0430\u0435\u043c, \/home\/user\/output.nmea \u2013 \u0444\u0430\u0439\u043b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438. \u0418 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/man.archlinux.org\/man\/gpsfake.1.en\"><u>\u0442\u0443\u0442<\/u><\/a>.<\/p>\n<p>\u0412\u044b\u0432\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0438\u043c (\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u043e\u0441\u044c \u0432 Ubuntu 22):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/082\/c28\/d00\/082c28d00806dda8c9ec2fc71a5854a1.jpg\" width=\"1547\" height=\"672\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/082\/c28\/d00\/082c28d00806dda8c9ec2fc71a5854a1.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0430\u0448\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c:  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/588\/45f\/0d8\/58845f0d833d538379d70a8d9df6d88d.jpg\" width=\"1115\" height=\"687\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/588\/45f\/0d8\/58845f0d833d538379d70a8d9df6d88d.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u0435\u0441\u0442\u044c \u2013 \u0441 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0435\u0439 \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c!<\/p>\n<h2>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0441\u0435\u0442\u0438<\/h2>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f\u043c \u043e \u0441\u0435\u0442\u0438. \u041d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0435\u0433\u043e \u0442\u0438\u043f, \u0438 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f Wi-Fi \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.\u00a0<\/p>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u2013 \u0441 \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 Wi-Fi. \u0412 Qt 5.12 \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441 QNetworkConfiguration. \u0418\u0437 \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435. \u041d\u043e \u043f\u0440\u043e \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u2013 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Qt \u043f\u043e\u0445\u043e\u0436\u0435 \u00ab\u0437\u0430\u0431\u044b\u043b\u0438\u00bb. \u041d\u0443 \u043d\u0438\u0447\u0435\u0433\u043e, \u0441\u0430\u043c\u0438 \u0441\u043f\u0440\u0430\u0432\u0438\u043c\u0441\u044f.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u2013 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<p><code>watch -d -t -n 1 \"awk 'NR==3 {printf(\\\"WiFi Signal Strength = %.0f%%\\\\n\\\",\\$3*10\/7)}' \/proc\/net\/wireless\"<\/code><\/p>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0451 \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 <code>\/proc\/net\/wireless<\/code>. \u0422\u0430\u043c \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u0435\u0441\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440.<\/p>\n<p>\u0412\u043e\u0442 \u0442\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/6e3\/60d\/990\/6e360d99000c9a7f8c778fc687f71f34.jpg\" width=\"935\" height=\"237\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6e3\/60d\/990\/6e360d99000c9a7f8c778fc687f71f34.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0410 \u0432\u043e\u0442 \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/680\/431\/edf\/680431edf099bdeb58df9ddd6e3259f9.jpg\" width=\"926\" height=\"245\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/680\/431\/edf\/680431edf099bdeb58df9ddd6e3259f9.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0442\u043e\u0442 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432\u044b\u0448\u0435 \u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 Qt. \u0414\u0443\u043c\u0430\u0435\u0442\u0435, \u044d\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u043e? \u0412\u043e\u0432\u0441\u0435 \u043d\u0435\u0442, \u0432 Qt \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441 QProcess \u2013 \u0432\u043e\u0442 \u0438\u043c \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f.  <\/p>\n<pre><code class=\"cpp\">        #include &lt;QCoreApplication&gt; #include &lt;QProcess&gt; #include &lt;QDebug&gt; #include &lt;QTimer&gt;  int main(int argc, char *argv[]) {    QCoreApplication a(argc, argv);     QByteArray data;    QProcess mProcess;    QTimer mWiFiTimer;    mWiFiTimer.start(1000);     QObject::connect(&amp;mWiFiTimer, &amp;QTimer::timeout, [&amp;]()    {    mProcess.start(\"awk NR==3 \/proc\/net\/wireless\", QIODevice::ReadOnly);    });     QObject::connect(&amp;mProcess,&amp;QProcess::readyReadStandardOutput,[&amp;]()    {    data = mProcess.readAllStandardOutput();    QString stringData = \"\";     if(!data.isEmpty())    {        stringData = QString::fromStdString(data.toStdString());        stringData = stringData.section(\" \", 4, 4);        stringData.chop(1);        auto val = stringData.toInt();         val = val * 10 \/ 7;        qDebug() &lt;&lt; \"Wi-Fi signal level:\" &lt;&lt; val;    }    });     return a.exec(); }<\/code><\/pre>\n<p>\u0412\u044b\u0432\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0438\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/880\/327\/653\/880327653f5715aeecdfde05ba6cd6fb.jpg\" width=\"739\" height=\"485\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/880\/327\/653\/880327653f5715aeecdfde05ba6cd6fb.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0421\u0430\u043c\u043e\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0435 \u0441 \u0441\u0435\u0442\u044c\u044e, \u0441\u0434\u0435\u043b\u0430\u043d\u043e. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0438\u043f \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u041d\u043e \u044d\u0442\u043e \u043b\u0435\u0433\u043a\u043e.<\/p>\n<pre><code class=\"cpp\"> #include &lt;QCoreApplication&gt; #include &lt;QNetworkConfigurationManager&gt; #include &lt;QNetworkAccessManager&gt;     int main(int argc, char *argv[]) {    QCoreApplication a(argc, argv);      QNetworkAccessManager accessMan;    QNetworkConfigurationManager configMan;    QNetworkConfiguration configuration;      QObject::connect(&amp;configMan, &amp;QNetworkConfigurationManager::updateCompleted, [&amp;]()    {        configuration = accessMan.configuration();      qDebug() &lt;&lt; configuration.name();    qDebug() &lt;&lt; configuration.bearerTypeName();      });      return a.exec(); }<\/code><\/pre>\n<p>\u0418 \u0432\u044b\u0432\u043e\u0434:  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/72c\/307\/12e\/72c30712e3b59d6b3845f3fc70b20e9c.jpg\" width=\"603\" height=\"273\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/72c\/307\/12e\/72c30712e3b59d6b3845f3fc70b20e9c.jpg\" data-blurred=\"true\"\/><\/figure>\n<h2>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0437\u0430\u0440\u044f\u0434\u0435 \u0431\u0430\u0442\u0430\u0440\u0435\u0438 (\u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0435\u0451 \u0443 \u0432\u0430\u0441 \u043d\u0435\u0442)<\/h2>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0443 \u0437\u0430\u0440\u044f\u0434\u0430 \u0431\u0430\u0442\u0430\u0440\u0435\u0438. \u0421\u0430\u043c\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043d\u0438\u043c \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0445\u043e\u0442\u044f \u0438 \u044d\u0442\u043e \u0442\u043e\u0436\u0435). \u041d\u0435 \u0437\u043d\u0430\u044e, \u043a\u0430\u043a \u0443 \u0432\u0430\u0441, \u043d\u043e \u0443 \u043c\u0435\u043d\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u2013 \u044d\u0442\u043e \u0441\u0442\u0430\u0446\u0438\u043e\u043d\u0430\u0440\u043d\u044b\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0438\u043a, \u0430 \u043d\u0435 \u043d\u043e\u0443\u0442\u0431\u0443\u043a. \u0418 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u043d \u043a\u0443\u0448\u0430\u0435\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043d\u043e \u043e\u0442 \u0441\u0435\u0442\u0438, \u0430 \u043d\u0435 \u043e\u0442 \u0431\u0430\u0442\u0430\u0440\u0435\u0438. \u0410 \u0440\u0430\u0437 \u043d\u0435\u0442 \u0431\u0430\u0442\u0430\u0440\u0435\u0438 \u2013 \u043d\u0435\u0442 \u0438 \u0437\u0430\u0440\u044f\u0434\u0430 \u0431\u0430\u0442\u0430\u0440\u0435\u0438.<\/p>\n<p>\u0421 Wi-Fi \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2013 \u043d\u0435 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0438\u043a\u0435 \u0435\u0441\u0442\u044c \u0430\u0434\u0430\u043f\u0442\u0435\u0440 Wi-Fi. \u041d\u043e \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043b\u0435\u0433\u043a\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u2013 \u043f\u043e\u043a\u0443\u043f\u043a\u043e\u0439 Wi-Fi \u00ab\u0441\u0432\u0438\u0441\u0442\u043a\u0430\u00bb \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430. \u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 USB-\u043f\u043e\u0440\u0442, \u0440\u0430\u0437\u0434\u0430\u0435\u043c Wi-Fi \u0441\u043e \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430 \u2013 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0440\u0435\u0448\u0435\u043d\u0430.\u00a0<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0441 \u0431\u0430\u0442\u0430\u0440\u0435\u0435\u0439 \u0442\u0430\u043a\u043e\u0439 \u0444\u043e\u043a\u0443\u0441 \u0443\u0436\u0435 \u043d\u0435 \u043f\u0440\u043e\u0439\u0434\u0451\u0442. \u0425\u043e\u0442\u044f \u044f \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435 \u0443\u0434\u0438\u0432\u043b\u044e\u0441\u044c, \u0435\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0443\u0442\u0441\u044f \u0443\u043c\u0435\u043b\u044c\u0446\u044b, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0435 \u043f\u0440\u0438\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u043e\u0443\u0442\u0431\u0443\u0447\u043d\u0443\u044e \u0431\u0430\u0442\u0430\u0440\u0435\u044e \u043a \u0441\u0442\u0430\u0446\u0438\u043e\u043d\u0430\u0440\u043d\u043e\u043c\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0438\u043a\u0443, \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u00ab\u0430\u043d\u043d\u0438\u0433\u0438\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u043b\u043b\u0430\u043f\u0441\u00bb \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. \u041d\u043e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0449\u0435 \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0435\u0435. \u0418 \u043e\u043d\u043e \u0435\u0441\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/github.com\/hoelzro\/linux-fake-battery-module\"><u>\u0442\u0430\u043a\u043e\u0435<\/u><\/a>.<br \/><u><br \/><\/u>\u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u043d\u0435\u043c\u0443 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435, \u0430 \u043f\u043e\u043a\u0430 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u0440\u043e \u0437\u0430\u0440\u044f\u0434 \u0431\u0430\u0442\u0430\u0440\u0435\u0438. \u0423\u0437\u043d\u0430\u0442\u044c \u0432\u0441\u0451 \u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u0432 Linux \u043c\u043e\u0436\u043d\u043e \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438\u00a0 <code>\/sys\/class\/power_supply<\/code> (\u0432 \u0441\u0442\u0430\u0440\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 Linux \u043f\u0443\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u2014 <code>\/proc\/acpi\/battery<\/code>). <\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u043e\u0434\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u0438\u0442\u0430\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, AC (\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0442\u043e\u043a), BAT (BAT0, BAT1 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435) \u0434\u043b\u044f \u0431\u0430\u0442\u0430\u0440\u0435\u0439. \u0412 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043f\u043e\u0434\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0435\u0441\u0442\u044c \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u0431 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f: status (\u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u2014 \u0437\u0430\u0440\u044f\u0436\u0430\u0435\u0442\u0441\u044f, \u0440\u0430\u0437\u0440\u044f\u0436\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0440\u044f\u0436\u0435\u043d \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435), capacity (\u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0437\u0430\u0440\u044f\u0434\u0430 \u0431\u0430\u0442\u0430\u0440\u0435\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430\u0445) \u0438 \u043f\u0440\u043e\u0447\u0438\u0435. \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0447\u0442\u043e-\u0442\u043e \u0443\u0437\u043d\u0430\u0442\u044c, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u044d\u0442\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>\u0425\u0432\u0430\u0442\u0438\u0442 \u0441 \u0442\u0435\u043e\u0440\u0438\u0435\u0439 \u2013 \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f Fake Battery. \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e \u2013 \u0443 \u043c\u0435\u043d\u044f \u0441\u0442\u0430\u0446\u0438\u043e\u043d\u0430\u0440\u043d\u044b\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0441 \u043f\u0438\u0442\u0430\u043d\u0438\u0435\u043c \u043e\u0442 \u0441\u0435\u0442\u0438. \u0417\u0430\u0445\u043e\u0434\u0438\u043c \u0432\u00a0 <code>\/sys\/class\/power_supply<\/code> \u0438 \u0432\u0438\u0434\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/d01\/fc2\/529\/d01fc252942a229bb8f34a22d1546bcc.jpg\" width=\"997\" height=\"429\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d01\/fc2\/529\/d01fc252942a229bb8f34a22d1546bcc.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0431\u0430\u0442\u0430\u0440\u0435\u0439 \u043d\u0435\u0442! \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043e \u043d\u0438\u0445 \u0442\u043e\u0436\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u044e\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/78b\/58f\/062\/78b58f0629ac3eca6cb2dc25c4332ae7.jpg\" width=\"985\" height=\"752\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/78b\/58f\/062\/78b58f0629ac3eca6cb2dc25c4332ae7.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c \u0441\u0435\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a. \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c\/\u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u043a \u0441\u0435\u0431\u0435 <a href=\"https:\/\/github.com\/hoelzro\/linux-fake-battery-module\"><u>\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/u><\/a>. \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0438\u0437 \u043a\u043e\u0440\u043d\u044f \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<p><code>sudo insmod .\/fake_battery.ko<\/code><\/p>\n<p>\u0418 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0431\u0430\u0442\u0430\u0440\u0435\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b54\/9cb\/800\/b549cb8001bd011b49b3ab74484d4a37.png\" width=\"793\" height=\"404\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b54\/9cb\/800\/b549cb8001bd011b49b3ab74484d4a37.png\"\/><\/figure>\n<p>\u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u043a\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043f\u0438\u0442\u0430\u043d\u0438\u044f:  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/ead\/5e0\/5de\/ead5e05de51f623ed7985856f00a07fc.jpg\" width=\"982\" height=\"817\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ead\/5e0\/5de\/ead5e05de51f623ed7985856f00a07fc.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0418 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f!  <\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/5df\/ecf\/9f7\/5dfecf9f7d03af71a8a3c1ee1715e264.jpg\" width=\"372\" height=\"416\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5df\/ecf\/9f7\/5dfecf9f7d03af71a8a3c1ee1715e264.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c \u2013 \u043f\u043e\u043b\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440!<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0438 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0437\u0430\u0440\u044f\u0434\u0430 \u0431\u0430\u0442\u0430\u0440\u0435\u0438 \u0443\u0437\u043d\u0430\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">#include &lt;QCoreApplication&gt; #include &lt;QFile&gt; #include &lt;QDebug&gt;   int main(int argc, char *argv[]) { QCoreApplication a(argc, argv);   QFile file(\"\/sys\/class\/power_supply\/BAT0\/capacity\"); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() &lt;&lt; \"Battery charge level: \" &lt;&lt; file.readAll().trimmed(); file.close(); } else { qDebug() &lt;&lt; \"Failed to open file\"; }   return 0;     return a.exec(); }<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/f2a\/d4d\/927\/f2ad4d9277f5224a01b795d501c1d2a2.jpg\" width=\"791\" height=\"286\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f2a\/d4d\/927\/f2ad4d9277f5224a01b795d501c1d2a2.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0414\u043b\u044f \u043b\u0435\u043d\u0438\u0432\u044b\u0445 \u2014 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u044f\u0434, \u043d\u043e \u0438 \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u0435\u0449\u0451 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043c\u043e\u0436\u0435\u0442. <a href=\"https:\/\/github.com\/gerbert\/qbatt\"><u>\u0412\u043e\u0442 \u043e\u0434\u043d\u043e \u0438\u0437 \u043d\u0438\u0445<\/u>.<\/a><\/p>\n<h2>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c\/\u0437\u0430\u043d\u044f\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435<\/h2>\n<p>\u0421 \u0437\u0430\u0440\u044f\u0434\u043e\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c, \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435. \u041d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u2014 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043d\u044f\u0442\u043e\/\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0435\u0433\u043e \u0435\u0441\u0442\u044c. \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<pre><code class=\"cpp\"> #include &lt;QCoreApplication&gt;   #include &lt;QFile&gt; #include &lt;QDebug&gt; #include &lt;QStorageInfo&gt; #include &lt;algorithm&gt;   int main(int argc, char *argv[]) { QCoreApplication a(argc, argv);   QString fileSystem;                  auto storageList = QStorageInfo::mountedVolumes(); auto val = std::find_if(storageList.begin(), storageList.end(), [&amp;](const auto &amp;storage) {     fileSystem = storage.fileSystemType().constData();     return fileSystem.contains(\"ext4\"); });   if(val != storageList.end()) {     qDebug() &lt;&lt; \"used \" &lt;&lt; QString::number((*val).bytesAvailable()\/1000000000.)              &lt;&lt; \" from \" &lt;&lt; QString::number((*val).bytesTotal()\/1000000000.); }   return a.exec(); }<\/code><\/pre>\n<p>\u041d\u0430 \u0447\u0442\u043e \u0442\u0443\u0442 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435? \u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0431\u044b\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u2013 \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c. \u0412 \u043a\u043e\u0434\u0435 \u0432\u044b\u0448\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u00abext4\u00bb:<\/p>\n<pre><code class=\"cpp\">fileSystem.contains(\"ext4\")<\/code><\/pre>\n<p>\u041d\u043e \u0435\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435. \u0410 \u0432\u043e\u0442 \u0437\u0434\u0435\u0441\u044c:<\/p>\n<pre><code class=\"cpp\"> storage.bytesAvailable()\/1000000000.  storage.bytesTotal()\/1000000000.<\/code><\/pre>\n<p>\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0413\u0431.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041d\u0443 \u0447\u0442\u043e \u2013 \u0432\u0440\u043e\u0434\u0435 \u0441\u043e \u0432\u0441\u0435\u043c \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c? \u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438, \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0441\u0435\u0442\u0438 \u0438 \u043e \u0437\u0430\u0440\u044f\u0434\u0435 \u0431\u0430\u0442\u0430\u0440\u0435\u0438 \u2013 \u0442\u043e\u0436\u0435. \u0418 \u043f\u0440\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043d\u0435 \u0437\u0430\u0431\u044b\u043b\u0438. \u041c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u043e\u0445\u043d\u0443\u0442\u044c \u2013 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u2013 \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430. \u0410 \u0432\u0435\u0434\u044c \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u0432\u0441\u0451 \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438 \u043b\u0451\u0433\u043a\u0438\u043c. \u0412 \u043e\u0431\u0449\u0435\u043c-\u0442\u043e \u0442\u0430\u043a \u0438 \u0435\u0441\u0442\u044c. \u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u043b\u043a\u0438\u0435 \u0434\u0435\u0442\u0430\u043b\u0438. \u0418\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0442\u043e\u043c \u0438 \u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0440\u043e\u043a\u0430\u0445 \u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<p><strong>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/strong><\/p>\n<p><strong>\u0411\u043e\u043b\u044c\u0448\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0434\u043b\u044f backend-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043e\u0442 \u043c\u043e\u0438\u0445 \u043a\u043e\u043b\u043b\u0435\u0433 \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 \u0441\u043e\u0446\u0441\u0435\u0442\u044f\u0445 SimbirSoft \u2013 <\/strong><a href=\"https:\/\/vk.com\/simbirsoft\"><strong><u>\u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435<\/u><\/strong><\/a><strong> \u0438 <\/strong><a href=\"https:\/\/t.me\/+hW2kOI83cYk2OTRi\"><strong><u>Telegram<\/u><\/strong><\/a><strong>.<\/strong><\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/839126\/\"> https:\/\/habr.com\/ru\/articles\/839126\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0445\u0430\u0438\u043b, \u044f backend-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 SimbirSoft. \u0425\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u043e\u043f\u044b\u0442\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u041e\u0421 Linux \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0441\u0432\u043e\u0438\u0445 \u0446\u0435\u043b\u044f\u0445. <\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u00ab\u041f\u043e\u0433\u043e\u0434\u0430\u00bb, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0435\u0440\u0451\u0442 \u0438\u0437 \u0441\u0435\u0442\u0438 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443, \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0411\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u043f\u043b\u043e\u0445\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u043e \u0441\u0430\u043c\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u043e, \u0433\u0434\u0435 \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f. \u041d\u043e \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c? \u041b\u0435\u0433\u043a\u043e!<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u044f\u043b\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u043e\u0440\u0442\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a \u043d\u0435\u043c\u0443. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u043a\u0440\u043e\u043c\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u044f\u043b\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f:<\/p>\n<p>&#8212; \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (\u0434\u043e\u043b\u0433\u043e\u0442\u0443, \u0448\u0438\u0440\u043e\u0442\u0443, \u0432\u044b\u0441\u043e\u0442\u0443);<\/p>\n<p>&#8212; \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0441\u0435\u0442\u0435\u0432\u043e\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 (\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0442\u0438\u043f, \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 Wi-Fi);<\/p>\n<p>&#8212; \u0437\u0430\u0440\u044f\u0434 \u0431\u0430\u0442\u0430\u0440\u0435\u0438;<\/p>\n<p>&#8212; \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 (\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043d\u044f\u0442\u043e\/\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0435\u0433\u043e).\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/p>\n<p>\u0421\u0442\u0435\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u2013 C++ \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 Qt (5.12). \u0417\u0430\u0434\u0430\u0447\u0430 \u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439. \u041d\u043e \u043f\u0435\u0440\u0432\u043e\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435 \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u043e\u0431\u043c\u0430\u043d\u0447\u0438\u0432\u043e. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438. \u041d\u043e \u043e\u0431\u043e \u0432\u0441\u0451\u043c \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u044b\u0432\u043e\u0434 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0438\u0434\u043e\u0432 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<h2>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435\u00a0<\/h2>\n<p>\u041f\u043e\u0447\u0438\u0442\u0430\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043a Qt (<a href=\"https:\/\/doc.qt.io\/qt-5\/qtpositioning-index.html\"><u>\u0440\u0430\u0437<\/u><\/a>, <a href=\"https:\/\/doc.qt.io\/qt-5\/qtlocation-index.html\"><u>\u0434\u0432\u0430<\/u><\/a>) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0433\u0443\u0433\u043b\u0438\u0432, \u0432\u044b \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0438\u0436\u0435. \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043b\u0430\u0441\u0441, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cpp\">class Navigation : public QObject { Q_OBJECT   public: explicit Navigation(QObject *parent = Q_NULLPTR); };   Navigation::Navigation(QObject *parent): QObject(parent) { auto source = QGeoPositionInfoSource::createDefaultSource(this);   source-&gt;setUpdateInterval(1000); qDebug() &lt;&lt; source-&gt;sourceName();   connect(source, &amp;QGeoPositionInfoSource::positionUpdated,this,[]( const QGeoPositionInfo &amp; posInfo) {     auto coords = posInfo.coordinate();     qDebug() &lt;&lt; QString(\"Latitude %1\").arg(coords.latitude())                     + QString(\" Longitude %1 \").arg(coords.longitude())                 + QString(\"Altitude %1\").arg(coords.altitude());   }); source-&gt;startUpdates(); }<\/code><\/pre>\n<p>\u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u0438\u043a:<\/p>\n<pre><code class=\"cpp\">#include &lt;QtPositioning&gt;<\/code><\/pre>\n<p>\u0418 \u043f\u0440\u043e \u043c\u043e\u0434\u0443\u043b\u044c \u0432 .pro \u0444\u0430\u0439\u043b\u0435:  <\/p>\n<pre><code class=\"cpp\"> QT += positioning<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u043e\u043d \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u2013 \u0441\u0442\u0430\u0432\u0438\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u043b\u0438\u0431\u044b:<\/p>\n<pre><code> sudo apt install -y libqt5location5 libqt5positioning5 qtlocation5-dev qtpositioning5-dev<\/code><\/pre>\n<p>\u0412\u0440\u043e\u0434\u0435 \u0432\u0441\u0451 \u0441\u043e\u0431\u0440\u0430\u043b\u043e\u0441\u044c, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u043e\u0441\u044c. \u0414\u0430\u0436\u0435 \u0447\u0442\u043e-\u0442\u043e \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u043b\u043e\u0441\u044c. \u0423\u0440\u0430! \u0417\u0430\u0434\u0430\u0447\u0430 \u0440\u0435\u0448\u0435\u043d\u0430?<\/p>\n<p>\u0410 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0423 \u043c\u0435\u043d\u044f \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 Ubunte 20 \u0432\u044b\u0432\u043e\u0434 \u0431\u044b\u043b \u0442\u0430\u043a\u0438\u043c:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0412\u0438\u0434\u0438\u043c \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u00ab\u043f\u043b\u044e\u0441-\u043c\u0438\u043d\u0443\u0441 \u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440\u00bb, \u0432\u044b\u0441\u043e\u0442\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0442 (\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 altitude). \u041a\u0430\u043a-\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c\u2026 \u0410 \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0441 \u0432\u044b\u0441\u043e\u0442\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c? \u041f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443? \u041c\u043d\u0435 \u043b\u0435\u043d\u044c \u2013 \u0434\u0430 \u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u044d\u0442\u043e. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u043c\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439.<\/p>\n<h3>\u041e\u0442 Geoclue \u043a gpsd<\/h3>\n<p>\u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043b\u0435\u0433\u043a\u0430 \u043f\u043e\u0440\u0430\u0437\u043c\u044b\u0441\u043b\u0438\u0442\u044c. \u0427\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f? \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u2013 \u0448\u0438\u0440\u043e\u0442\u0443, \u0434\u043e\u043b\u0433\u043e\u0442\u0443 \u0438 \u0432\u044b\u0441\u043e\u0442\u0443. \u041d\u043e \u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0435 \u2013 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u0434, \u0441\u043e\u0431\u0440\u0430\u043b \u0435\u0433\u043e \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u043d\u0430 \u0441\u0432\u043e\u0451\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435, \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u0434\u043e\u043b\u0433\u043e\u0442\u0443 \u0438 \u0448\u0438\u0440\u043e\u0442\u0443 (\u043a\u0441\u0442\u0430\u0442\u0438, \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u0444\u0438\u0441\u0430 \u0432 \u0421\u0430\u043c\u0430\u0440\u0435 ?). \u041a\u0430\u043a \u044d\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c? \u041c\u043e\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 GPS-\u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\u0430 \u043d\u0430 \u0431\u043e\u0440\u0442\u0443. \u0422\u0430\u043a \u0438 \u0437\u043d\u0430\u043b \u2013 \u0432\u0435\u0437\u0434\u0435\u0441\u0443\u0449\u0438\u0439 Google \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u043c\u043d\u043e\u0439\u2026<\/p>\n<p>\u0412\u0441\u0451 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435. \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u044f\u0441\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u0437 \u0432\u044b\u0432\u043e\u0434\u0430, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e Geoclue. \u042d\u0442\u043e \u0433\u0435\u043e\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0432 Linux \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430. \u0416\u0435\u043b\u0430\u044e\u0449\u0438\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u043e\u0439\u0442\u0438 <a href=\"https:\/\/gitlab.freedesktop.org\/geoclue\/geoclue\"><u>\u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/u><\/a>. \u0421\u0435\u0440\u0432\u0438\u0441 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0441\u043b\u0443\u0436\u0431\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u043e\u0433\u043e\u0434\u044b \u2013 \u043e\u043d \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0435\u0451 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0435\u0441\u043b\u0438 \u0441\u043c\u043e\u0433 \u0435\u0433\u043e \u0442\u043e\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c.<\/p>\n<p>Geoclue \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432\u043a\u043b\u044e\u0447\u0430\u044f GPS, \u0441\u0435\u0442\u0438 Wi-Fi \u0438 IP-\u0430\u0434\u0440\u0435\u0441\u0430. \u0412 Ubuntu 20 \u043e\u043d \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>\u0412\u0441\u0451 \u0432 \u043d\u0435\u043c \u0445\u043e\u0440\u043e\u0448\u043e \u2013 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u043c \u0434\u0430\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043b\u044e\u0431\u044b\u043c GPS-\u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u043e\u043c \u0438 \u0441 \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u2014 GPS, \u0413\u041b\u041e\u041d\u0410\u0421\u0421, Galileo, \u00ab\u0411\u044d\u0439\u0434\u043e\u0443\u00bb \u0438\u043b\u0438 \u0435\u0449\u0451 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u2013 \u043d\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e. \u0412\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u2013 \u0432\u0437\u044f\u0442\u044c \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u044b\u0439 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443, \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0445 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0427\u0442\u043e \u0431\u044b \u043d\u0430\u043c \u043f\u043e\u0434\u043e\u0448\u043b\u043e? \u0415\u0441\u0442\u044c \u0434\u0435\u043c\u043e\u043d gpsd! \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Geoclue, \u043e\u043d \u0437\u0430\u0442\u043e\u0447\u0435\u043d \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u0430\u043c\u0438, \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u0438 \u0432\u044b\u0434\u0430\u0432\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON. \u041d\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e gpsd \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u2013 \u043c\u044b \u043b\u0435\u0433\u043a\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c \u044d\u0442\u043e \u043d\u0435\u0434\u043e\u0440\u0430\u0437\u0443\u043c\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"cpp\">sudo apt install gpsd<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u043b\u0438 \u0437\u0430\u043d\u043e\u0432\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u0434, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u2013 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a? \u0412\u043e\u0442 \u0442\u0443\u0442 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cpp\">QGeoPositionInfoSource *source = QGeoPositionInfoSource::createDefaultSource(this);<\/code><\/pre>\n<p>\u041c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0433\u0435\u043e\u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438\u0437 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0438\u043b\u0438 \u0438\u0437 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0441 \u043d\u0430\u0438\u0432\u044b\u0441\u0448\u0438\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0442\u0430\u043a\u0438\u043c \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u043a \u0440\u0430\u0437 Geoclue. \u0410 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d gpsd. \u0422\u043e\u0433\u0434\u0430 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0438 \u0441\u0430\u043c\u0438 \u0443\u043a\u0430\u0436\u0435\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code class=\"cpp\">QGeoPositionInfoSource *source = QGeoPositionInfoSource::createSource(\"gpsd\", this);<\/code><\/pre>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u2013 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439. \u0414\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u0442. \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u0443\u0441\u0442\u043e\u0439.<\/p>\n<p>\u0423\u0432\u044b, \u043d\u043e \u0434\u043b\u044f gpsd \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0432 Qt \u043d\u0435\u0442. \u041f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u0438\u043b\u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u0439, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u043a\u0435\u043c-\u0442\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/github.com\/jmechnich\/qtposition_gpsd?ysclid=lg3o4iop3l413527734\"><u>\u0432\u043e\u0442 \u044d\u0442\u043e\u0439<\/u><\/a>.<\/p>\n<pre><code class=\"cpp\">#include &lt;QtNetwork&gt; #include \"qgeopositioninfosource_gpsd.h\"   class Navigation : public QObject { Q_OBJECT public: explicit Navigation(QObject *parent = Q_NULLPTR);   signals: void coordinates(QString, QString);   private slots: void gpsPositionUpdated(const QGeoPositionInfo &amp;info);   private: QGeoPositionInfoSourceGpsd *sourceGpsd; QTcpSocket *tcpSocket;   };   #include \"navigation.h\"   Navigation::Navigation(QObject *parent) : QObject(parent) { tcpSocket = new QTcpSocket(this);     tcpSocket-&gt;connectToHost(QHostAddress::LocalHost, 2947);       tcpSocket-&gt;write(\"?WATCH={\\\"enable\\\":true,\\\"nmea\\\":true}\\n\"); sourceGpsd = new QGeoPositionInfoSourceGpsd(this);     sourceGpsd-&gt;setUpdateInterval(1000); sourceGpsd-&gt;setDevice(tcpSocket);         connect(sourceGpsd, &amp;QGeoPositionInfoSourceGpsd::positionUpdated, this, &amp;Navigation::gpsPositionUpdated); sourceGpsd-&gt;startUpdates(); }   void Navigation::gpsPositionUpdated(const QGeoPositionInfo &amp;info) {     auto coords = info.coordinate();   QString temp = QString(\"Latitude %1\\n\").arg(coords.latitude()) + QString(\"Longitude %1\\n\").arg(coords.longitude());   emit coordinates(temp, QString::number(coords.altitude()) + \" m\"); }   #include &lt;QCoreApplication&gt; #include \"navigation.h\"   int main(int argc, char *argv[]) { QCoreApplication a(argc, argv);   Navigation navigation; QObject::connect(&amp;navigation, &amp;Navigation::coordinates, [](QString pos, QString height)     {     qDebug() &lt;&lt; pos &lt;&lt; \" \" &lt;&lt; height; });   return a.exec(); }<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<pre><code class=\"cpp\"> tcpSocket-&gt;connectToHost(QHostAddress::LocalHost, 2947);<\/code><\/pre>\n<p>gpsd \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 TCP\/IP-\u0441\u0435\u0440\u0432\u0438\u0441, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u043a \u043f\u043e\u0440\u0442\u0443 2947. \u041e\u043d \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u0441\u043e\u043a\u0435\u0442, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0442\u0443\u0442:<\/p>\n<pre><code class=\"cpp\">tcpSocket-&gt;write(\"?WATCH={\\\"enable\\\":true,\\\"nmea\\\":true}\\n\");<\/code><\/pre>\n<p>\u043c\u044b \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u043c \u044d\u0442\u043e\u043c\u0443 \u0441\u0435\u0440\u0432\u0438\u0441\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u201cnmea\u201d.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043a\u043e\u0434 \u0435\u0441\u0442\u044c \u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041a\u0430\u043a \u0431\u044b \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c? \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u043a \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0430\u0442\u044c \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e \u0441 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430. \u041d\u043e \u0435\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2013 gpsfake. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"cpp\"> sudo apt install gpsd-clients<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0444\u0435\u0439\u043a\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b \u0438\u0445 \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u0437\u044f\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u0432\u043e\u0442 \u0442\u0443\u0442:<br \/><a href=\"https:\/\/nmeagen.org\/\"><u>https:\/\/nmeagen.org\/<\/u><\/a>. \u0414\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0444\u0430\u0439\u043b\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 NMEA \u2013 \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c gpsd:<\/p>\n<pre><code class=\"cpp\">sudo systemctl stop gpsd.service sudo systemctl stop gpsd.socket<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c gpsfake \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0438\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438:<\/p>\n<pre><code class=\"cpp\">sudo gpsfake -P 2947 -t -c 1 -l -D4 \/home\/user\/output.nmea<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c 2947 \u2013 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e\u0440\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0441\u043b\u0443\u0448\u0430\u0435\u043c, \/home\/user\/output.nmea \u2013 \u0444\u0430\u0439\u043b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438. \u0418 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/man.archlinux.org\/man\/gpsfake.1.en\"><u>\u0442\u0443\u0442<\/u><\/a>.<\/p>\n<p>\u0412\u044b\u0432\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0438\u043c (\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u043e\u0441\u044c \u0432 Ubuntu 22):<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0430\u0448\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c:  <\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u0435\u0441\u0442\u044c \u2013 \u0441 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0435\u0439 \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c!<\/p>\n<h2>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0441\u0435\u0442\u0438<\/h2>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f\u043c \u043e \u0441\u0435\u0442\u0438. \u041d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0435\u0433\u043e \u0442\u0438\u043f, \u0438 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f Wi-Fi \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.\u00a0<\/p>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u2013 \u0441 \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0430 Wi-Fi. \u0412 Qt 5.12 \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441 QNetworkConfiguration. \u0418\u0437 \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435. \u041d\u043e \u043f\u0440\u043e \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u2013 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Qt \u043f\u043e\u0445\u043e\u0436\u0435 \u00ab\u0437\u0430\u0431\u044b\u043b\u0438\u00bb. \u041d\u0443 \u043d\u0438\u0447\u0435\u0433\u043e, \u0441\u0430\u043c\u0438 \u0441\u043f\u0440\u0430\u0432\u0438\u043c\u0441\u044f.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u2013 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<p><code>watch -d -t -n 1 \"awk 'NR==3 {printf(\\\"WiFi Signal Strength = %.0f%%\\\\n\\\",\\$3*10\/7)}' \/proc\/net\/wireless\"<\/code><\/p>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0451 \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 <code>\/proc\/net\/wireless<\/code>. \u0422\u0430\u043c \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u0435\u0441\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440.<\/p>\n<p>\u0412\u043e\u0442 \u0442\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0410 \u0432\u043e\u0442 \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:  <\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0442\u043e\u0442 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432\u044b\u0448\u0435 \u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 Qt. \u0414\u0443\u043c\u0430\u0435\u0442\u0435, \u044d\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u043e? \u0412\u043e\u0432\u0441\u0435 \u043d\u0435\u0442, \u0432 Qt \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441 QProcess \u2013 \u0432\u043e\u0442 \u0438\u043c \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f.  <\/p>\n<pre><code class=\"cpp\">        #include &lt;QCoreApplication&gt; #include &lt;QProcess&gt; #include &lt;QDebug&gt; #include &lt;QTimer&gt;  int main(int argc, char *argv[]) {    QCoreApplication a(argc, argv);     QByteArray data;    QProcess mProcess;    QTimer mWiFiTimer;    mWiFiTimer.start(1000);     QObject::connect(&amp;mWiFiTimer, &amp;QTimer::timeout, [&amp;]()    {    mProcess.start(\"awk NR==3 \/proc\/net\/wireless\", QIODevice::ReadOnly);    });     QObject::connect(&amp;mProcess,&amp;QProcess::readyReadStandardOutput,[&amp;]()    {    data = mProcess.readAllStandardOutput();    QString stringData = \"\";     if(!data.isEmpty())    {        stringData = QString::fromStdString(data.toStdString());        stringData = stringData.section(\" \", 4, 4);        stringData.chop(1);        auto val = stringData.toInt();         val = val * 10 \/ 7;        qDebug() &lt;&lt; \"Wi-Fi signal level:\" &lt;&lt; val;    }    });     return<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-430644","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/430644","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=430644"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/430644\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=430644"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=430644"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=430644"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}