3 Commits

Author SHA1 Message Date
Self Not Found 695f963991 More general build steps for Linux
Tested on Ubuntu 18.04.6 and 23.10.1
2023-11-03 23:32:55 +08:00
Self Not Found 38c7916715 Merge pull request #54 from setime/workaround-ubuntu-22_04
Workaround to get the GUI working on Ubuntu 22.04
2023-10-29 02:27:54 +08:00
setime 687c27672f Workaround to get the GUI working on Ubuntu 22.04 2023-10-28 19:12:59 +02:00
4 changed files with 36 additions and 27 deletions
+6 -6
View File
@@ -53,21 +53,23 @@ You can also download them in SourceForge
[![Download Proxmark3GUI](https://a.fsdn.com/con/app/sf-download-button)](https://sourceforge.net/projects/proxmark3gui/files/latest/download) [![Download Proxmark3GUI](https://a.fsdn.com/con/app/sf-download-button)](https://sourceforge.net/projects/proxmark3gui/files/latest/download)
## Build on Linux ## Build on Linux
``` ```bash
cd ~ cd ~
# sudo add-apt-repository universe
sudo apt-get update sudo apt-get update
sudo apt-get install git build-essential # sudo apt-get install git build-essential
sudo apt-get install qt5-default libqt5serialport5-dev sudo apt-get install qtbase5-dev qt5-qmake libqt5serialport5-dev
git clone https://github.com/wh201906/Proxmark3GUI.git --depth=1 git clone https://github.com/wh201906/Proxmark3GUI.git --depth=1
cd Proxmark3GUI cd Proxmark3GUI
mkdir build && cd build mkdir build && cd build
export QT_SELECT=qt5
qmake ../src qmake ../src
make -j4 && make clean make -j4 && make clean
./Proxmark3GUI ./Proxmark3GUI
``` ```
## Build on macOS ## Build on macOS
``` ```zsh
cd ~ cd ~
brew update brew update
brew install qt@5 brew install qt@5
@@ -82,8 +84,6 @@ open Proxmark3GUI.app
> In order for the GUI to connect to the device in macOS, you'd need to tweak the settings a little bit > In order for the GUI to connect to the device in macOS, you'd need to tweak the settings a little bit
Client Path must be path to pm3 console client like "/usr/local/bin/pm3/"
![macOS_settings](doc/README/macOS_settings.png) ![macOS_settings](doc/README/macOS_settings.png)
*** ***
+6 -4
View File
@@ -53,21 +53,23 @@ SourceForge平台上也可下载
[![Download Proxmark3GUI](https://a.fsdn.com/con/app/sf-download-button)](https://sourceforge.net/projects/proxmark3gui/files/latest/download) [![Download Proxmark3GUI](https://a.fsdn.com/con/app/sf-download-button)](https://sourceforge.net/projects/proxmark3gui/files/latest/download)
## 在Linux系统下编译 ## 在Linux系统下编译
``` ```bash
cd ~ cd ~
# sudo add-apt-repository universe
sudo apt-get update sudo apt-get update
sudo apt-get install git build-essential # sudo apt-get install git build-essential
sudo apt-get install qt5-default libqt5serialport5-dev sudo apt-get install qtbase5-dev qt5-qmake libqt5serialport5-dev
git clone https://github.com/wh201906/Proxmark3GUI.git --depth=1 git clone https://github.com/wh201906/Proxmark3GUI.git --depth=1
cd Proxmark3GUI cd Proxmark3GUI
mkdir build && cd build mkdir build && cd build
export QT_SELECT=qt5
qmake ../src qmake ../src
make -j4 && make clean make -j4 && make clean
./Proxmark3GUI ./Proxmark3GUI
``` ```
## 在macOS系统下编译 ## 在macOS系统下编译
``` ```zsh
cd ~ cd ~
brew update brew update
brew install qt@5 brew install qt@5
+23 -17
View File
@@ -22,7 +22,6 @@ void PM3Process::connectPM3(const QString& path, const QStringList args)
QString result; QString result;
Util::ClientType clientType; Util::ClientType clientType;
setRequiringOutput(true); setRequiringOutput(true);
QRegularExpression osPattern("(os:\\s+|OS\\.+\\s+)");
// stash for reconnect // stash for reconnect
currPath = path; currPath = path;
@@ -36,35 +35,30 @@ void PM3Process::connectPM3(const QString& path, const QStringList args)
waitForReadyRead(10000); waitForReadyRead(10000);
setRequiringOutput(false); setRequiringOutput(false);
result = *requiredOutput; result = *requiredOutput;
// Workaround for wayland system, e.g. Ubuntu 22.04
// The issue is that the warning is read and nothing else, hence the process is killed.
if(result.contains("Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway."))
{
setRequiringOutput(true);
readWaitForConnection(&result);
}
if(result.contains("[=]")) if(result.contains("[=]"))
{ {
clientType = Util::CLIENTTYPE_ICEMAN; clientType = Util::CLIENTTYPE_ICEMAN;
setRequiringOutput(true); setRequiringOutput(true);
write("hw version\n"); write("hw version\n");
for(int i = 0; i < 50; i++) readWaitForConnection(&result);
{
waitForReadyRead(200);
result += *requiredOutput;
// if(result.contains("os: "))
if(osPattern.match(result).hasMatch())
break;
}
setRequiringOutput(false);
} }
else else
{ {
clientType = Util::CLIENTTYPE_OFFICIAL; clientType = Util::CLIENTTYPE_OFFICIAL;
} }
// if(result.contains("os: ")) // make sure the PM3 is connected if(result.contains("os: ")) // make sure the PM3 is connected
if(osPattern.match(result).hasMatch())
{ {
emit changeClientType(clientType); emit changeClientType(clientType);
// result = result.mid(result.indexOf("os: ")); result = result.mid(result.indexOf("os: "));
QRegularExpressionMatch osMatch = osPattern.match(result);
result = result.mid(osMatch.capturedStart());
result = result.left(result.indexOf("\n")); result = result.left(result.indexOf("\n"));
// result = result.mid(4, result.indexOf(" ", 4) - 4); result = result.mid(4, result.indexOf(" ", 4) - 4);
result = result.mid(osMatch.capturedLength(), result.indexOf(" ", osMatch.capturedLength()) - osMatch.capturedLength());
emit PM3StatedChanged(true, result); emit PM3StatedChanged(true, result);
} }
else else
@@ -78,6 +72,18 @@ void PM3Process::connectPM3(const QString& path, const QStringList args)
setRequiringOutput(false); setRequiringOutput(false);
} }
void PM3Process::readWaitForConnection(QString *result)
{
for(int i = 0; i < 50; i++)
{
waitForReadyRead(200);
(*result) += *requiredOutput;
if(result->contains("os: "))
break;
}
setRequiringOutput(false);
}
void PM3Process::reconnectPM3() void PM3Process::reconnectPM3()
{ {
connectPM3(currPath, currArgs); connectPM3(currPath, currArgs);
+1
View File
@@ -38,6 +38,7 @@ private:
bool isRequiringOutput; bool isRequiringOutput;
QString* requiredOutput; // It only works in this class now QString* requiredOutput; // It only works in this class now
void setRequiringOutput(bool st);// It only works in this class now void setRequiringOutput(bool st);// It only works in this class now
void readWaitForConnection(QString *result);
QTimer* serialListener; QTimer* serialListener;
QSerialPortInfo* portInfo; QSerialPortInfo* portInfo;
QString currPath; QString currPath;