edited wpa functions, added scripts

This commit is contained in:
arcan1s 2014-02-06 16:32:01 +04:00
parent 4a2a27176f
commit d9571b76cf
9 changed files with 102 additions and 25 deletions

View File

@ -19,6 +19,7 @@ option (WITH_DEBUG_MODE "Build with debug mode" OFF)
option (BUILD_GUI "Build GUI" ON) option (BUILD_GUI "Build GUI" ON)
option (BUILD_DATAENGINE "Build data engine" ON) option (BUILD_DATAENGINE "Build data engine" ON)
option (BUILD_PLASMOID "Build plasmoid" ON) option (BUILD_PLASMOID "Build plasmoid" ON)
option (BUILD_SCRIPTS "Build special scripts" ON)
# verbose # verbose
set (CMAKE_VERBOSE_MAKEFILE ON) set (CMAKE_VERBOSE_MAKEFILE ON)
@ -50,3 +51,6 @@ endif ()
if (BUILD_PLASMOID) if (BUILD_PLASMOID)
add_subdirectory (plasmoid) add_subdirectory (plasmoid)
endif () endif ()
if (BUILD_SCRIPTS)
add_subdirectory (scripts)
endif()

View File

@ -15,5 +15,3 @@ set (HEADERS "")
add_subdirectory (${SUBPROJECT_SOURCE_DIR}) add_subdirectory (${SUBPROJECT_SOURCE_DIR})
install (FILES ${SUBPROJECT}.desktop DESTINATION share/applications/) install (FILES ${SUBPROJECT}.desktop DESTINATION share/applications/)
install (FILES ${SUBPROJECT}-logo.png DESTINATION share/pixmaps/)
install (FILES ${SUBPROJECT}.png DESTINATION share/icons/hicolor/32x32/apps/)

10
sources/gui/netctl-gui.desktop Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env xdg-open
[Desktop Entry]
Name=Netctl GUI
Comment=GUI written on Qt4 for netctl
Exec=netctl-gui
Icon=netctl-gui.png
Terminal=false
Encoding=UTF-8
Type=Application
Categories=Network

View File

@ -18,6 +18,8 @@
#include "mainwindow.h" #include "mainwindow.h"
#include "ui_mainwindow.h" #include "ui_mainwindow.h"
#include <QProcess>
#include "netctlinteract.h" #include "netctlinteract.h"
#include "wpasupinteract.h" #include "wpasupinteract.h"
#include <cstdio> #include <cstdio>
@ -37,15 +39,16 @@ MainWindow::MainWindow(QWidget *parent)
// temporary block // temporary block
netctlPath = QString("/usr/bin/netctl"); netctlPath = QString("/usr/bin/netctl");
profileDir = QString("/etc/netctl"); profileDir = QString("/etc/netctl");
sudoPath = QString("/usr/bin/kdesu"); sudoPath = QString("/usr/bin/sudo");
wpaConfig.append(QString("/usr/bin/wpa_cli")); wpaConfig.append(QString("/usr/bin/wpa_cli"));
wpaConfig.append(QString("/usr/bin/wpa_supplicant")); wpaConfig.append(QString("/usr/bin/wpa_supplicant"));
ifaceDir = QString("/sys/class/net/"); ifaceDir = QString("/sys/class/net/");
preferedInterface = QString("wifi0"); preferedInterface = QString("");
// additional settings // additional settings
wpaConfig.append(QString("/run/wpa_supplicant_netctl-gui.pid")); wpaConfig.append(QString("/run/wpa_supplicant_netctl-gui.pid"));
wpaConfig.append(QString("nl80211,wext")); wpaConfig.append(QString("nl80211,wext"));
wpaConfig.append(QString("/run/wpa_supplicant_netctl-gui")); wpaConfig.append(QString("/run/wpa_supplicant_netctl-gui"));
wpaConfig.append(QString("users"));
netctlCommand = new Netctl(this, netctlPath, profileDir, sudoPath); netctlCommand = new Netctl(this, netctlPath, profileDir, sudoPath);
wpaCommand = new WpaSup(this, wpaConfig, sudoPath, ifaceDir, preferedInterface); wpaCommand = new WpaSup(this, wpaConfig, sudoPath, ifaceDir, preferedInterface);
@ -54,6 +57,7 @@ MainWindow::MainWindow(QWidget *parent)
updateMainTab(); updateMainTab();
} }
MainWindow::~MainWindow() MainWindow::~MainWindow()
{ {
delete netctlCommand; delete netctlCommand;
@ -62,6 +66,21 @@ MainWindow::~MainWindow()
} }
bool MainWindow::checkExternalApps()
{
QProcess command;
command.start(QString("which ") + netctlPath +
QString(" ") + sudoPath +
QString(" ") + wpaConfig[0] +
QString(" ") + wpaConfig[1]);
command.waitForFinished(-1);
if (command.exitCode() != 0)
return false;
else
return true;
}
// window signals // window signals
void MainWindow::createActions() void MainWindow::createActions()
{ {
@ -89,11 +108,13 @@ void MainWindow::updateTabs(const int tab)
void MainWindow::updateMainTab() void MainWindow::updateMainTab()
{ {
if (!checkExternalApps())
return;
QStringList profiles = netctlCommand->getProfileList(); QStringList profiles = netctlCommand->getProfileList();
QStringList descriptions = netctlCommand->getProfileDescriptions(profiles); QStringList descriptions = netctlCommand->getProfileDescriptions(profiles);
QStringList statuses = netctlCommand->getProfileStatuses(profiles); QStringList statuses = netctlCommand->getProfileStatuses(profiles);
ui->tableWidget_main->setRowCount(profiles.count()); ui->tableWidget_main->setRowCount(profiles.count());
ui->tableWidget_main->sortByColumn(0, Qt::AscendingOrder); ui->tableWidget_main->sortByColumn(0, Qt::AscendingOrder);
@ -113,15 +134,19 @@ void MainWindow::updateMainTab()
void MainWindow::updateWifiTab() void MainWindow::updateWifiTab()
{ {
if (!checkExternalApps())
return;
QList<QStringList> scanResults = wpaCommand->scanWifi(); QList<QStringList> scanResults = wpaCommand->scanWifi();
for (int i=0; i<scanResults.count(); i++)
printf("%s\n", scanResults[i][0].toUtf8().data());
} }
// main tab slots // main tab slots
void MainWindow::mainTabEnableProfile() void MainWindow::mainTabEnableProfile()
{ {
if (!checkExternalApps())
return;
ui->tableWidget_main->setDisabled(true); ui->tableWidget_main->setDisabled(true);
QString profile = ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 0)->text(); QString profile = ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 0)->text();
netctlCommand->enableProfile(profile); netctlCommand->enableProfile(profile);
@ -144,6 +169,9 @@ void MainWindow::mainTabEnableProfile()
void MainWindow::mainTabRestartProfile() void MainWindow::mainTabRestartProfile()
{ {
if (!checkExternalApps())
return;
ui->tableWidget_main->setDisabled(true); ui->tableWidget_main->setDisabled(true);
QString profile = ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 0)->text(); QString profile = ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 0)->text();
netctlCommand->restartProfile(profile); netctlCommand->restartProfile(profile);
@ -158,6 +186,9 @@ void MainWindow::mainTabRestartProfile()
void MainWindow::mainTabStartProfile() void MainWindow::mainTabStartProfile()
{ {
if (!checkExternalApps())
return;
ui->tableWidget_main->setDisabled(true); ui->tableWidget_main->setDisabled(true);
QString profile = ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 0)->text(); QString profile = ui->tableWidget_main->item(ui->tableWidget_main->currentItem()->row(), 0)->text();
netctlCommand->startProfile(profile); netctlCommand->startProfile(profile);
@ -181,12 +212,11 @@ void MainWindow::mainTabStartProfile()
void MainWindow::mainTabRefreshButtons(QTableWidgetItem *current, QTableWidgetItem *previous) void MainWindow::mainTabRefreshButtons(QTableWidgetItem *current, QTableWidgetItem *previous)
{ {
Q_UNUSED(previous); Q_UNUSED(previous);
if (!checkExternalApps())
return;
QString profile = ui->tableWidget_main->item(current->row(), 0)->text(); QString profile = ui->tableWidget_main->item(current->row(), 0)->text();
bool isActive = netctlCommand->isProfileActive(profile); if (netctlCommand->isProfileActive(profile)) {
bool isEnable = netctlCommand->isProfileEnabled(profile);
if (isActive) {
ui->pushButton_mainRestart->setEnabled(true); ui->pushButton_mainRestart->setEnabled(true);
ui->pushButton_mainStart->setText(QApplication::translate("MainWindow", "Stop")); ui->pushButton_mainStart->setText(QApplication::translate("MainWindow", "Stop"));
} }
@ -194,7 +224,7 @@ void MainWindow::mainTabRefreshButtons(QTableWidgetItem *current, QTableWidgetIt
ui->pushButton_mainRestart->setDisabled(true); ui->pushButton_mainRestart->setDisabled(true);
ui->pushButton_mainStart->setText(QApplication::translate("MainWindow", "Start")); ui->pushButton_mainStart->setText(QApplication::translate("MainWindow", "Start"));
} }
if (isEnable) if (netctlCommand->isProfileEnabled(profile))
ui->pushButton_mainEnable->setText(QApplication::translate("MainWindow", "Disable")); ui->pushButton_mainEnable->setText(QApplication::translate("MainWindow", "Disable"));
else else
ui->pushButton_mainEnable->setText(QApplication::translate("MainWindow", "Enable")); ui->pushButton_mainEnable->setText(QApplication::translate("MainWindow", "Enable"));

View File

@ -43,8 +43,10 @@ public:
wpaSupplicantPath = 1, wpaSupplicantPath = 1,
wpaPidPath = 2, wpaPidPath = 2,
wpadSupDrivers = 3, wpadSupDrivers = 3,
wpaConfDir = 4 wpaConfDir = 4,
wpaConfGroup = 5
}; };
bool checkExternalApps();
private slots: private slots:
void updateTabs(const int tab); void updateTabs(const int tab);

View File

@ -31,9 +31,10 @@ WpaSup::WpaSup(MainWindow *wid, QStringList wpaConfig, QString sudoPath, QString
ifaceDirectory(new QDir(ifaceDir)), ifaceDirectory(new QDir(ifaceDir)),
mainInterface(preferedInterface) mainInterface(preferedInterface)
{ {
if (QFile(wpaConf[2]).exists()) { // remove old files if they exist
if (QFile(wpaConf[2]).exists() || QDir(wpaConf[4]).exists()) {
QProcess command; QProcess command;
command.start(sudoCommand + QString(" /usr/bin/rm -f ") + wpaConf[2]); command.start(sudoCommand + QString(" /usr/bin/rm -f ") + wpaConf[2] + QString(" ") + wpaConf[4]);
command.waitForFinished(-1); command.waitForFinished(-1);
} }
} }
@ -70,8 +71,8 @@ bool WpaSup::wpaCliCall(QString commandLine)
{ {
QString interface = getInterfaceList()[0]; QString interface = getInterfaceList()[0];
QProcess command; QProcess command;
command.start(sudoCommand + QString(" ") + wpaConf[0] + QString(" -i ") + interface + command.start(wpaConf[0] + QString(" -i ") + interface + QString(" -p ") + wpaConf[4] +
QString(" -p ") + wpaConf[4] + QString(" ") + commandLine); QString(" ") + commandLine);
command.waitForFinished(-1); command.waitForFinished(-1);
SleepThread::sleep(1); SleepThread::sleep(1);
if (command.exitCode() == 0) if (command.exitCode() == 0)
@ -85,8 +86,8 @@ QString WpaSup::getWpaCliOutput(QString commandLine)
{ {
QString interface = getInterfaceList()[0]; QString interface = getInterfaceList()[0];
QProcess command; QProcess command;
command.start(sudoCommand + QString(" ") + wpaConf[0] + QString(" -i ") + interface + command.start(wpaConf[0] + QString(" -i ") + interface + QString(" -p ") + wpaConf[4] +
QString(" -p ") + wpaConf[4] + QString(" ") + commandLine); QString(" ") + commandLine);
command.waitForFinished(-1); command.waitForFinished(-1);
return command.readAllStandardOutput(); return command.readAllStandardOutput();
} }
@ -98,7 +99,8 @@ bool WpaSup::startWpaSupplicant()
QString interface = getInterfaceList()[0]; QString interface = getInterfaceList()[0];
QProcess command; QProcess command;
command.start(sudoCommand + QString(" ") + wpaConf[1] + QString(" -B -P ") + wpaConf[2] + command.start(sudoCommand + QString(" ") + wpaConf[1] + QString(" -B -P ") + wpaConf[2] +
QString(" -i ") + interface + QString(" -D ") + wpaConf[3] + QString(" -C ") + wpaConf[4]); QString(" -i ") + interface + QString(" -D ") + wpaConf[3] +
QString(" -C \"DIR=") + wpaConf[4] + QString(" GROUP=") + wpaConf[5]);
command.waitForFinished(-1); command.waitForFinished(-1);
SleepThread::sleep(1); SleepThread::sleep(1);
if (command.exitCode() != 0) if (command.exitCode() != 0)
@ -124,6 +126,7 @@ QList<QStringList> WpaSup::scanWifi()
QStringList rawOutput = getWpaCliOutput(QString("scan_results")).split(QString("\n")); QStringList rawOutput = getWpaCliOutput(QString("scan_results")).split(QString("\n"));
rawOutput.removeFirst(); rawOutput.removeFirst();
rawOutput.removeLast();
for (int i=0; i<rawOutput.count()-1; i++) for (int i=0; i<rawOutput.count()-1; i++)
if (rawOutput[i].split(QString(" "), QString::SkipEmptyParts).count() > 4) if (rawOutput[i].split(QString(" "), QString::SkipEmptyParts).count() > 4)
for (int j=i+1; j<rawOutput.count(); j++) for (int j=i+1; j<rawOutput.count(); j++)
@ -135,13 +138,27 @@ QList<QStringList> WpaSup::scanWifi()
for (int i=0; i<rawOutput.count(); i++) { for (int i=0; i<rawOutput.count(); i++) {
QStringList wifiPoint; QStringList wifiPoint;
if (rawOutput[i].split(QString(" "), QString::SkipEmptyParts).count() > 4) // point name
wifiPoint.append(rawOutput[i].split(QString(" "), QString::SkipEmptyParts)[4]); if (rawOutput[i].split(QString("\t"), QString::SkipEmptyParts).count() > 4)
wifiPoint.append(rawOutput[i].split(QString("\t"), QString::SkipEmptyParts)[4]);
else else
wifiPoint.append(QString("<hidden>")); wifiPoint.append(QString("<hidden>"));
wifiPoint.append(rawOutput[i].split(QString(" "), QString::SkipEmptyParts)[2]); // point signal
wifiPoint.append(rawOutput[i].split(QString(" "), QString::SkipEmptyParts)[1]); wifiPoint.append(rawOutput[i].split(QString("\t"), QString::SkipEmptyParts)[2]);
wifiPoint.append(rawOutput[i].split(QString(" "), QString::SkipEmptyParts)[0]); // point security
QString security = rawOutput[i].split(QString("\t"), QString::SkipEmptyParts)[3];
if (security.indexOf(QString("WPA2")))
security = QString("WPA2");
else if (security.indexOf(QString("WPA")))
security = QString("WPA");
else if (security.indexOf(QString("WEP")))
security = QString("WEP");
else
security = QString("none");
wifiPoint.append(security);
// point bssid
wifiPoint.append(rawOutput[i].split(QString("\t"), QString::SkipEmptyParts)[0]);
// profile existance
scanResults.append(wifiPoint); scanResults.append(wifiPoint);
} }

View File

@ -0,0 +1,8 @@
# set project name
set (SUBPROJECT netctl-gui-scripts)
message (STATUS "Subproject ${SUBPROJECT}")
install (FILES netctl-gui-netctl DESTINATION bin
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
install (FILES netctl-gui-wpa_supplicant DESTINATION bin
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)

View File

@ -0,0 +1,4 @@
#!/bin/bash
/usr/bin/netctl $@

View File

@ -0,0 +1,4 @@
#!/bin/bash
wpa_supplicant $@