GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So richten Sie eine Wifi-Direct-Verbindung zwischen Android und Linux ein

Ich habe viel an diesem Problem gearbeitet und hier sind die Antworten, die ich gefunden habe:

  • Antwort 1.1 Es gibt viele Möglichkeiten und die richtige hängt davon ab, was Sie erreichen möchten. Sie finden die verschiedenen Möglichkeiten hier:http://processors.wiki.ti.com/index.php/OMAP_Wireless_Connectivity_NLCP_WiFi_Direct_Configuration_Scripts

Ich wollte Linux als GO und Android als Client, also hat bei Linux folgendes für mich funktioniert:

// Kill current supplicant and avoid its automatic recreation
system("mv /usr/share/dbus-1/system-services/fi.* .");
system("killall udhcpd");
system("wpa_cli -i wlan0 terminate -B");
usleep(300000);

// Start new supplicant
system("wpa_supplicant -Dnl80211 -iwlan0 -c /etc/p2p_supplicant.conf -B");
system("wpa_cli -iwlan0 p2p_group_add");
system("ifconfig p2p-wlan0-0 192.168.1.2");

// Connect with a peer
for (;;) {
  system("wpa_cli -ip2p-wlan0-0 wps_pbc");
  system("udhcpd /etc/udhcpd.conf");
  // Here start your TCP server on a port
  Server server([port]);
  server.startServer();
}

Hinweis:Um die P2P-Verbindung zu zerstören und die normale neu zu starten, verwende ich dieses Skript:

#!/bin/bash
wpa_cli -i wlan0 terminate -B
wpa_cli -i p2p-wlan0-0 terminate -B
cp ./fi.* /usr/share/dbus-1/system-services/
service network-manager restart

Hier wartet der Server auf eine Verbindung und der Android-Client stellt eine Verbindung her. Ich habe einen sehr einfachen TCP-Server verwendet, der auf der ersten Website zu finden ist, und er hat wie ein Zauber funktioniert. Es ist wichtig, den udhcpd zu starten, sonst wird das Symbol "verbunden" in Android nicht angezeigt. Für die Android-Seite bin ich dem gefolgt, was ich gesehen habe http://developer.android.com/training/connect-devices-wireless/wifi-direct.html und es hat perfekt funktioniert.

  • Antwort 1.2 Von wpa_cli können Sie viele verschiedene Warnungen und Fehler erhalten. Ich habe gesehen, dass das einfache Aufrufen der Funktion (wie ich es im vorherigen Snippet getan habe) trotz der Warnungen alles funktioniert hat. Ich habe sie ignoriert.

  • Antwort 1.3 Die Verbindung mit PIN funktioniert, als ich es versuchte, startete ich den udhcpd nicht und das stürzte jedes Mal meine Verbindung ab. Es lag nicht an PIN oder PBC.

  • Antwort 2.1 Sowohl der Server als auch der Client wechseln die Schnittstelle. Es ist ein sehr ähnliches Verhalten wie bei Sockets. Sie erstellen einen lauschenden Socket, jemand stellt eine Verbindung her, Sie erstellen einen neuen Socket, um diesen Client in einem separaten Thread zu handhaben, während der lauschende Socket noch da ist und auf andere Benutzer wartet. Das gleiche machen Sie mit Schnittstellen. Das Starten eines wpa_cli, das die wlan0-Schnittstelle überwacht, und eines, das die p2p-wlan0-0-Schnittstelle überwacht, gibt eine gute Vorstellung davon, was während der Änderung passiert.

  • Antwort 2.2 Der Client ist auf die andere Schnittstelle „gegangen“ und ist nun bereit, eine IP zu empfangen. Starten Sie die DHCP- und TCP-Server!

  • Antwort 2.3 Verwenden Sie keine statische IP. Nur für den Server ist ok, der Client sollte eine DHCP IP verwenden. Vielleicht gibt es eine Möglichkeit, mit statischen IPs umzugehen, aber es war für meine Ziele nicht nützlich.

  • Antwort 2.4 Fertig. Das war die ganze Zeit das Problem

  • Antwort 1.4 Das funktioniert auch mit Android/Linux einwandfrei.

Tut mir leid, wenn ich in meiner Antwort einen Fehler gemacht habe, ich verstehe immer noch nicht das ganze Bild von WiFi-Direct-Verbindungen, ich hoffe einfach, dass dies jemand anderem helfen kann.


(Möglicherweise keine vollständige Antwort, aber die richtige Richtung)

Das Problem liegt auf der Linux-Seite. Ich stoße auf ähnliche Probleme zwischen einem Cyanogenmod (Android 5) und Fedora 22, wenn ich versuche, Wifi Direct (Wifi P2P) für Intels Wireless Display Software für Linux OS (WDS) zu verwenden.

Insbesondere Intels Connman wich (von Grund auf neu geschrieben) im Jahr 2009 von dem ab, was in Linux Standard war, NetworkManager. Connman scheint die einzige Implementierung von Wifi Direct (Wifi P2P) für Linux zu sein und wurde für den eingebetteten (mobilen) Markt geschrieben.

Aufgrund eines RPM-Problems bleibt connman auf meinem System ungetestet, aber die Software sollte die Dbus-Kommunikation bereitstellen, die Linux benötigt.

Website:https://01.org/connman


Linux
  1. Stellen Sie eine SSH-Verbindung zwischen Windows und Linux her

  2. So setzen und löschen Sie lokale, benutzer- und systemweite Umgebungsvariablen in Linux

  3. So legen Sie den System-Hostnamen unter Linux fest oder ändern ihn

  4. So überprüfen Sie die Betriebssystem- und Linux-Version

  5. So mounten und unmounten Sie ein Dateisystem unter Linux

So installieren und verwenden Sie YouTube-DL auf einem Linux-System

So ändern Sie den Benutzernamen und den Hostnamen auf einem Linux-System

So installieren und konfigurieren Sie AnyDesk auf einem Linux-System

So installieren und konfigurieren Sie Django auf einem Linux-System

So installieren und konfigurieren Sie PrestaShop auf einem Linux-System

So legen Sie $PATH im Linux-System dauerhaft fest