コード例 #1
0
ファイル: QNetCtlTool.cpp プロジェクト: flatr0ze/qnetctl
void QNetCtlTool::chain()
{
    QProcess *proc = static_cast<QProcess*>(sender());
    const QString tag = proc->property("QNetCtlTag").toString();
    const QString info = proc->property("QNetCtlInfo").toString();
    if (proc->exitStatus() != QProcess::NormalExit || proc->exitCode()) {
        myClient->call(QDBus::NoBlock, "reply", tag, QString("ERROR: %1, %2").arg(proc->exitStatus()).arg(proc->exitCode()));
        return;
    }
    myClient->call(QDBus::NoBlock, "reply", tag, QString::fromLocal8Bit(proc->readAllStandardOutput()));

    QString cmd;
    if (tag == "remove_profile") {
        QFile::remove(gs_profilePath + info);
    } else if (tag == "scan_wifi") {
        myScanningDevices.removeAll(info);
        myUplinkingDevices.removeAll(info);
        cmd = TOOL(ip) + " link set " + info + " down";
    }

    if (cmd.isNull()) // should not happen
        return;

    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
    env.remove("LC_ALL");
    env.remove("LANG");
    proc = new QProcess(this);
    proc->setProcessEnvironment(env);
//     proc->setProperty("QNetCtlTag", tag);
//     connect (proc, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(reply()));
    connect (proc, SIGNAL(finished(int, QProcess::ExitStatus)), proc, SLOT(deleteLater()));
    proc->start(cmd, QIODevice::ReadOnly);
}
コード例 #2
0
ファイル: QNetCtlTool.cpp プロジェクト: flatr0ze/qnetctl
void QNetCtlTool::scanWifi(QString device)
{
    if (device.isNull() && sender())
        device = sender()->property("QNetCtlScanDevice").toString();

    if (myScanningDevices.contains(device))
        return;

    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
    env.remove("LC_ALL");
    env.remove("LANG");
    QProcess *proc = new QProcess(this);
    proc->setProcessEnvironment(env);

    bool isDown = false;
    proc->start(TOOL(ip) + " link show " + device, QIODevice::ReadOnly);
    proc->waitForFinished();
    if (proc->exitStatus() == QProcess::NormalExit && !proc->exitCode())
        isDown = !QString::fromLocal8Bit(proc->readAllStandardOutput()).section('>', 0, 0).contains("UP");

    bool waitsForUp = myUplinkingDevices.contains(device);

    if (isDown) {
        if (!waitsForUp) {
            waitsForUp = true;
            myUplinkingDevices << device;
            proc->start(TOOL(ip) + " link set " + device + " up", QIODevice::ReadOnly);
            proc->waitForFinished();
        }

        // we're waiting for the device to come up
        delete proc;
        QTimer *t = new QTimer(this);
        t->setProperty("QNetCtlScanDevice", device);
        t->setSingleShot(true);
        connect(t, SIGNAL(timeout()), this, SLOT(scanWifi()));
        connect(t, SIGNAL(timeout()), t, SLOT(deleteLater()));
        t->start(500);
        return;
    }

    myScanningDevices << device;

    proc->setProperty("QNetCtlTag", "scan_wifi");
    proc->setProperty("QNetCtlInfo", device);
    // if we set it up, we've to set it back down through the chain slot
    connect(proc, SIGNAL(finished(int, QProcess::ExitStatus)), waitsForUp ? SLOT(chain()) : SLOT(reply()));
    connect(proc, SIGNAL(finished(int, QProcess::ExitStatus)), proc, SLOT(deleteLater()));
    proc->start(TOOL(iw) + " dev " + device + " scan");
}
コード例 #3
0
ファイル: unixcommand.cpp プロジェクト: aarnt/octoxbps
/*
 * Executes given command and returns the StandardError Output.
 */
QString UnixCommand::runCommand(const QString& commandToRun)
{
  QProcess proc;
  QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
  env.remove("LANG");
  env.remove("LC_MESSAGES");
  env.insert("LANG", "C");
  env.insert("LC_MESSAGES", "C");
  proc.setProcessEnvironment(env);
  proc.start(commandToRun);
  proc.waitForStarted();
  proc.waitForFinished(-1);

  QString res = proc.readAllStandardError();
  proc.close();

  return res;
}
コード例 #4
0
/*
 * Setup QPorcess object
 */
void lamexp_init_process(QProcess &process, const QString &wokringDir, const bool bReplaceTempDir)
{
	//Environment variable names
	static const char *const s_envvar_names_temp[] =
	{
		"TEMP", "TMP", "TMPDIR", "HOME", "USERPROFILE", "HOMEPATH", NULL
	};
	static const char *const s_envvar_names_remove[] =
	{
		"WGETRC", "SYSTEM_WGETRC", "HTTP_PROXY", "FTP_PROXY", "NO_PROXY", "GNUPGHOME", "LC_ALL", "LC_COLLATE", "LC_CTYPE", "LC_MESSAGES", "LC_MONETARY", "LC_NUMERIC", "LC_TIME", "LANG", NULL
	};

	//Initialize environment
	QProcessEnvironment env = process.processEnvironment();
	if(env.isEmpty()) env = QProcessEnvironment::systemEnvironment();

	//Clean a number of enviroment variables that might affect our tools
	for(size_t i = 0; s_envvar_names_remove[i]; i++)
	{
		env.remove(QString::fromLatin1(s_envvar_names_remove[i]));
		env.remove(QString::fromLatin1(s_envvar_names_remove[i]).toLower());
	}

	const QString tempDir = QDir::toNativeSeparators(lamexp_temp_folder2());

	//Replace TEMP directory in environment
	if(bReplaceTempDir)
	{
		for(size_t i = 0; s_envvar_names_temp[i]; i++)
		{
			env.insert(s_envvar_names_temp[i], tempDir);
		}
	}

	//Setup PATH variable
	const QString path = env.value("PATH", QString()).trimmed();
	env.insert("PATH", path.isEmpty() ? tempDir : QString("%1;%2").arg(tempDir, path));
	
	//Setup QPorcess object
	process.setWorkingDirectory(wokringDir);
	process.setProcessChannelMode(QProcess::MergedChannels);
	process.setReadChannel(QProcess::StandardOutput);
	process.setProcessEnvironment(env);
}
コード例 #5
0
ファイル: utils.cpp プロジェクト: flying-sheep/octopi
/*
 * The needed constructor
 */
utils::ProcessWrapper::ProcessWrapper(QObject *parent) :
  QObject(parent)
{
  m_process = new QProcess(parent);
  QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
  //env.insert("LANG", "C");
  //env.insert("LC_MESSAGES", "C");
  env.remove("LANG");
  env.remove("LC_MESSAGES");
  env.insert("LANG", QLocale::system().name() + ".UTF-8");
  env.insert("LC_MESSAGES", QLocale::system().name() + ".UTF-8");

  m_process->setProcessEnvironment(env);

  m_timerSingleShot = new QTimer(parent);
  m_timerSingleShot->setSingleShot(true);
  m_timer = new QTimer(parent);
  m_timer->setInterval(1000);

  connect(m_timerSingleShot, SIGNAL(timeout()), this, SLOT(onSingleShot()));
  connect(m_timer, SIGNAL(timeout()), this, SLOT(onTimer()));
  connect(m_process, SIGNAL(started()), SLOT(onProcessStarted()));
}
コード例 #6
0
void tst_QProcessEnvironment::insert()
{
    QProcessEnvironment e;
    e.insert("FOO", "bar");
    QVERIFY(!e.isEmpty());
    QVERIFY(e.contains("FOO"));
    QCOMPARE(e.value("FOO"), QString("bar"));

    e.remove("FOO");
    QVERIFY(!e.contains("FOO"));
    QVERIFY(e.value("FOO").isNull());

    e.clear();
    QVERIFY(!e.contains("FOO"));
}
コード例 #7
0
void tst_QProcessEnvironment::emptyNull()
{
    QProcessEnvironment e;

    e.insert("FOO", "");
    QVERIFY(e.contains("FOO"));
    QVERIFY(e.value("FOO").isEmpty());
    QVERIFY(!e.value("FOO").isNull());

    e.insert("FOO", QString());
    QVERIFY(e.contains("FOO"));
    QVERIFY(e.value("FOO").isEmpty());
    // don't test if it's NULL, since we shall not make a guarantee

    e.remove("FOO");
    QVERIFY(!e.contains("FOO"));
}
コード例 #8
0
ファイル: unixcommand.cpp プロジェクト: aarnt/octoxbps
/*
 * Performs a pacman query
 * Overloaded with QString parameter
 */
QByteArray UnixCommand::performQuery(const QString &args)
{
  QByteArray result("");
  QProcess pacman;
  QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
  env.remove("COLUMNS");
  env.insert("COLUMNS", "170");
  env.insert("LANG", "C");
  env.insert("LC_MESSAGES", "C");
  env.insert("LC_ALL", "C");
  pacman.setProcessEnvironment(env);

  pacman.start("xbps-" + args);
  pacman.waitForFinished();
  result = pacman.readAllStandardOutput();
  pacman.close();
  return result;
}
コード例 #9
0
static PyObject *meth_QProcessEnvironment_remove(PyObject *sipSelf, PyObject *sipArgs)
{
    PyObject *sipParseErr = NULL;

    {
        const QString* a0;
        int a0State = 0;
        QProcessEnvironment *sipCpp;

        if (sipParseArgs(&sipParseErr, sipArgs, "BJ1", &sipSelf, sipType_QProcessEnvironment, &sipCpp, sipType_QString,&a0, &a0State))
        {
            sipCpp->remove(*a0);
            sipReleaseType(const_cast<QString *>(a0),sipType_QString,a0State);

            Py_INCREF(Py_None);
            return Py_None;
        }
    }

    /* Raise an exception if the arguments couldn't be parsed. */
    sipNoMethod(sipParseErr, sipName_QProcessEnvironment, sipName_remove, doc_QProcessEnvironment_remove);

    return NULL;
}
コード例 #10
0
ファイル: terminal.cpp プロジェクト: Acidburn0zzz/octopi
/*
 * Executes the given command list with root credentials
 */
void Terminal::runCommandInTerminal(const QStringList &commandList)
{
  QFile *ftemp = UnixCommand::getTemporaryFile();
  QTextStream out(ftemp);

  foreach(QString line, commandList)
    out << line;

  out.flush();
  ftemp->close();

  QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
  env.remove("LANG");
  env.remove("LC_MESSAGES");
  env.insert("LANG", QLocale::system().name() + ".UTF-8");
  env.insert("LC_MESSAGES", QLocale::system().name() + ".UTF-8");
  m_process->setProcessEnvironment(env);

  QString suCommand = WMHelper::getSUCommand();

  if (m_selectedTerminal == ctn_AUTOMATIC)
  {
    if (UnixCommand::getLinuxDistro() == ectn_MOOOSLINUX && UnixCommand::hasTheExecutable(ctn_RXVT_TERMINAL))
    {
      QString cmd =
          suCommand + " \"" + ctn_RXVT_TERMINAL + " -title pacman -name pacman -e bash -c " + ftemp->fileName() + "\"";

      m_process->start(cmd);
    }
    else if(WMHelper::isXFCERunning() && UnixCommand::hasTheExecutable(ctn_XFCE_TERMINAL)){
      QString cmd = suCommand + " \"" + ctn_XFCE_TERMINAL + " -e \'bash -c " + ftemp->fileName() + "'\"";
      m_process->start(cmd);
    }
    else if (WMHelper::isKDERunning() && UnixCommand::hasTheExecutable(ctn_KDE_TERMINAL)){
      QString cmd;

      if (UnixCommand::isRootRunning())
      {
        cmd = "dbus-launch " + ctn_KDE_TERMINAL + " --nofork -e bash -c " + ftemp->fileName();
      }
      else
      {
        cmd = suCommand + " \"" + ctn_KDE_TERMINAL + " --nofork -e bash -c " + ftemp->fileName() + "\"";
      }

      m_process->start(cmd);
    }
    else if (WMHelper::isTDERunning() && UnixCommand::hasTheExecutable(ctn_TDE_TERMINAL)){
      QString cmd = suCommand + " \"" + ctn_TDE_TERMINAL + " --nofork -e bash -c " + ftemp->fileName() + "\"";
      m_process->start(cmd);
    }
    else if (WMHelper::isLXDERunning() && UnixCommand::hasTheExecutable(ctn_LXDE_TERMINAL)){
      QString cmd = suCommand + " \"" + ctn_LXDE_TERMINAL + " -e \'bash -c " + ftemp->fileName() + "'\"";
      m_process->start(cmd);
    }
    else if (WMHelper::isMATERunning() && UnixCommand::hasTheExecutable(ctn_MATE_TERMINAL)){
      QString cmd = suCommand + " \"" + ctn_MATE_TERMINAL + " -e \'bash -c " + ftemp->fileName() + "'\"";
      m_process->start(cmd);
    }
    else if (WMHelper::isLXQTRunning() && UnixCommand::hasTheExecutable(ctn_LXQT_TERMINAL)){
      QString cmd = suCommand + " \"" + ctn_LXQT_TERMINAL + " -e \'bash -c " + ftemp->fileName() + "'\"";
      m_process->start(cmd);
    }
    else if (UnixCommand::hasTheExecutable(ctn_XFCE_TERMINAL)){
      QString cmd = suCommand + " \"" + ctn_XFCE_TERMINAL + " -e \'bash -c " + ftemp->fileName() + "'\"";
      m_process->start(cmd);
    }
    else if (UnixCommand::hasTheExecutable(ctn_LXDE_TERMINAL)){
      QString cmd = suCommand + " \"" + ctn_LXDE_TERMINAL + " -e \'bash -c " + ftemp->fileName() + "'\"";
      m_process->start(cmd);
    }
    else if (UnixCommand::hasTheExecutable(ctn_XTERM)){
      QString cmd = suCommand + " \"" + ctn_XTERM +
          " -fn \"*-fixed-*-*-*-18-*\" -fg White -bg Black -title xterm -e \'bash -c " + ftemp->fileName() + "'\"";
      m_process->start(cmd);
    }
  }
  else //User has chosen his own terminal...
  {
    if (m_selectedTerminal == ctn_RXVT_TERMINAL)
    {
      QString cmd =
          suCommand + " \"" + ctn_RXVT_TERMINAL + " -title pacman -name pacman -e bash -c " + ftemp->fileName() + "\"";

      m_process->start(cmd);
    }
    else if(m_selectedTerminal == ctn_XFCE_TERMINAL){
      QString cmd = suCommand + " \"" + ctn_XFCE_TERMINAL + " -e \'bash -c " + ftemp->fileName() + "'\"";
      m_process->start(cmd);
    }
    else if (m_selectedTerminal == ctn_KDE_TERMINAL){
      QString cmd;

      if (UnixCommand::isRootRunning())
      {
        cmd = "dbus-launch " + ctn_KDE_TERMINAL + " --nofork -e bash -c " + ftemp->fileName();
      }
      else
      {
        cmd = suCommand + " \"" + ctn_KDE_TERMINAL + " --nofork -e bash -c " + ftemp->fileName() + "\"";
      }

      m_process->start(cmd);
    }
    else if (m_selectedTerminal == ctn_TDE_TERMINAL){
      QString cmd = suCommand + " \"" + ctn_TDE_TERMINAL + " --nofork -e bash -c " + ftemp->fileName() + "\"";
      m_process->start(cmd);
    }
    else if (m_selectedTerminal == ctn_LXDE_TERMINAL){
      QString cmd = suCommand + " \"" + ctn_LXDE_TERMINAL + " -e \'bash -c " + ftemp->fileName() + "'\"";
      m_process->start(cmd);
    }
    else if (m_selectedTerminal == ctn_MATE_TERMINAL){
      QString cmd = suCommand + " \"" + ctn_MATE_TERMINAL + " -e \'bash -c " + ftemp->fileName() + "'\"";
      m_process->start(cmd);
    }
    else if (m_selectedTerminal == ctn_LXQT_TERMINAL){
      QString cmd = suCommand + " \"" + ctn_LXQT_TERMINAL + " -e \'bash -c " + ftemp->fileName() + "'\"";
      m_process->start(cmd);
    }
    else if (m_selectedTerminal == ctn_XTERM){
      QString cmd = suCommand + " \"" + ctn_XTERM +
          " -fn \"*-fixed-*-*-*-18-*\" -fg White -bg Black -title xterm -e \'bash -c " + ftemp->fileName() + "'\"";
      m_process->start(cmd);
    }
  }
}
コード例 #11
0
ファイル: QNetCtlTool.cpp プロジェクト: flatr0ze/qnetctl
void QNetCtlTool::request(const QString tag, const QString information)
{
    QString cmd;
    bool chain = false;
//     debug(tag + information);
    if (tag == "switch_to_profile") {
        cmd = TOOL(netctl) + " switch-to " + information;
    } else if (tag == "stop_profile") {
        cmd = TOOL(netctl) + " stop " + information;
    } else if (tag == "scan_wifi") {
        scanWifi(information);
        return;
    } else if (tag == "enable_profile") {
        cmd = TOOL(netctl) + " enable " + information;
    } else if (tag == "enable_service") {
        if (information.startsWith("netctl-"))
            cmd = TOOL(systemctl) + " enable " + information;
    }
    else if (tag == "disable_profile") {
        cmd = TOOL(netctl) + " disable " + information;
    } else if (tag == "disable_service") {
        if (information.startsWith("netctl-"))
            cmd = TOOL(systemctl) + " disable " + information;
    } else if (tag == "remove_profile") {
        chain = true;
        cmd = TOOL(netctl) + " disable " + information;
    } else if (tag.startsWith("write_profile")) {
        QString name = tag.section(' ', 1);
        QFile file(gs_profilePath + name);
        if (file.open(QIODevice::WriteOnly|QIODevice::Text)) {
            file.write(information.toLocal8Bit());
            file.close();
            myClient->call(QDBus::NoBlock, "reply", tag, "SUCCESS");
        } else {
            myClient->call(QDBus::NoBlock, "reply", tag, "ERROR");
        }
        return; // no process to run
    } else if (tag == "reparse_config") {
        return;
    } else if (tag == "quit") {
        quit();
        return;
    }

    if (cmd.isNull()) {
        myClient->call(QDBus::NoBlock, "reply", tag, "ERROR: unsupported command / request:" + information);
        return;
    }

    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
    env.remove("LC_ALL");
    env.remove("LANG");
    QProcess *proc = new QProcess(this);
    proc->setProcessEnvironment(env);
    proc->setProperty("QNetCtlTag", tag);
    if (chain) {
        proc->setProperty("QNetCtlInfo", information);
        connect (proc, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(chain()));
    } else {
        connect (proc, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(reply()));
    }
    connect (proc, SIGNAL(finished(int, QProcess::ExitStatus)), proc, SLOT(deleteLater()));
//     debug(cmd);
    proc->start(cmd, QIODevice::ReadOnly);
}