aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorvaxerski <[email protected]>2022-06-03 17:41:57 +0200
committervaxerski <[email protected]>2022-06-03 17:41:57 +0200
commit6f3b004199a6b1bb0a8f5431d677ab926bdf19f3 (patch)
tree227dec00bfbcefa60cf0ebe7329508f439237c62
parent19b17b590c8a2dc19e79542796c7b1b8e65301de (diff)
downloadHyprland-6f3b004199a6b1bb0a8f5431d677ab926bdf19f3.tar.gz
Hyprland-6f3b004199a6b1bb0a8f5431d677ab926bdf19f3.zip
IPC and log changes, introduce signature
-rw-r--r--hyprctl/main.cpp17
-rw-r--r--src/Compositor.cpp11
-rw-r--r--src/Compositor.hpp1
-rw-r--r--src/debug/HyprCtl.cpp8
-rw-r--r--src/debug/Log.cpp10
-rw-r--r--src/debug/Log.hpp3
-rw-r--r--src/main.cpp4
-rw-r--r--src/managers/EventManager.cpp8
8 files changed, 46 insertions, 16 deletions
diff --git a/hyprctl/main.cpp b/hyprctl/main.cpp
index 60ee9606..d0c7d9ed 100644
--- a/hyprctl/main.cpp
+++ b/hyprctl/main.cpp
@@ -45,12 +45,25 @@ void request(std::string arg) {
return;
}
+ // get the instance signature
+ auto instanceSig = getenv("HYPRLAND_INSTANCE_SIGNATURE");
+
+ if (!instanceSig) {
+ std::cout << "HYPRLAND_INSTANCE_SIGNATURE was not set! (Is Hyprland running?)";
+ return;
+ }
+
+ std::string instanceSigStr = std::string(instanceSig);
+
sockaddr_un serverAddress = {0};
serverAddress.sun_family = AF_UNIX;
- strcpy(serverAddress.sun_path, "/tmp/hypr/.socket.sock");
+
+ std::string socketPath = "/tmp/hypr/" + instanceSigStr + "/.socket.sock";
+
+ strcpy(serverAddress.sun_path, socketPath.c_str());
if (connect(SERVERSOCKET, (sockaddr*)&serverAddress, SUN_LEN(&serverAddress)) < 0) {
- std::cout << "Couldn't connect to /tmp/hypr/.socket.sock. (3) Is Hyprland running?";
+ std::cout << "Couldn't connect to " << socketPath << ". (3)";
return;
}
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index f7f1d68f..c9a89603 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -1,11 +1,14 @@
#include "Compositor.hpp"
CCompositor::CCompositor() {
- unlink("/tmp/hypr/hyprland.log");
- unlink("/tmp/hypr/hyprlandd.log");
- unlink("/tmp/hypr/.hyprlandrq");
+ m_szInstanceSignature = GIT_COMMIT_HASH + std::string("_") + std::to_string(time(NULL));
- system("mkdir -p /tmp/hypr");
+ Debug::log(LOG, "Instance Signature: %s", m_szInstanceSignature.c_str());
+
+ setenv("HYPRLAND_INSTANCE_SIGNATURE", m_szInstanceSignature.c_str(), true);
+
+ const auto INSTANCEPATH = "/tmp/hypr/" + m_szInstanceSignature;
+ mkdir(INSTANCEPATH.c_str(), S_IRWXU | S_IRWXG);
m_sWLDisplay = wl_display_create();
diff --git a/src/Compositor.hpp b/src/Compositor.hpp
index d3e76819..92cb1f55 100644
--- a/src/Compositor.hpp
+++ b/src/Compositor.hpp
@@ -63,6 +63,7 @@ public:
const char* m_szWLDisplaySocket;
+ std::string m_szInstanceSignature = "";
std::list<SMonitor> m_lMonitors;
std::list<CWindow> m_lWindows;
diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp
index c890dbb2..a8030992 100644
--- a/src/debug/HyprCtl.cpp
+++ b/src/debug/HyprCtl.cpp
@@ -266,11 +266,11 @@ void HyprCtl::startHyprCtlSocket() {
return;
}
- unlink("/tmp/hypr/.socket.sock");
-
sockaddr_un SERVERADDRESS = {.sun_family = AF_UNIX};
- strcpy(SERVERADDRESS.sun_path, "/tmp/hypr/.socket.sock");
+ std::string socketPath = "/tmp/hypr/" + g_pCompositor->m_szInstanceSignature + "/.socket.sock";
+
+ strcpy(SERVERADDRESS.sun_path, socketPath.c_str());
bind(SOCKET, (sockaddr*)&SERVERADDRESS, SUN_LEN(&SERVERADDRESS));
@@ -282,7 +282,7 @@ void HyprCtl::startHyprCtlSocket() {
char readBuffer[1024] = {0};
- Debug::log(LOG, "Hypr socket started.");
+ Debug::log(LOG, "Hypr socket started at %s", socketPath.c_str());
while(1) {
const auto ACCEPTEDCONNECTION = accept(SOCKET, (sockaddr*)&clientAddress, &clientSize);
diff --git a/src/debug/Log.cpp b/src/debug/Log.cpp
index 3a008758..b3d13583 100644
--- a/src/debug/Log.cpp
+++ b/src/debug/Log.cpp
@@ -4,12 +4,18 @@
#include <fstream>
#include <iostream>
+void Debug::init() {
+ if (ISDEBUG)
+ logFile = "/tmp/hypr/hyprlandd-" + std::to_string(time(NULL)) + ".log";
+ else
+ logFile = "/tmp/hypr/hyprland-" + std::to_string(time(NULL)) + ".log";
+}
+
void Debug::log(LogLevel level, const char* fmt, ...) {
// log to a file
- const std::string DEBUGPATH = ISDEBUG ? "/tmp/hypr/hyprlandd.log" : "/tmp/hypr/hyprland.log";
std::ofstream ofs;
- ofs.open(DEBUGPATH, std::ios::out | std::ios::app);
+ ofs.open(logFile, std::ios::out | std::ios::app);
switch (level) {
case LOG:
diff --git a/src/debug/Log.hpp b/src/debug/Log.hpp
index 7dca950f..d5aa6958 100644
--- a/src/debug/Log.hpp
+++ b/src/debug/Log.hpp
@@ -12,5 +12,8 @@ enum LogLevel {
};
namespace Debug {
+ void init();
void log(LogLevel level, const char* fmt, ...);
+
+ inline std::string logFile;
}; \ No newline at end of file
diff --git a/src/main.cpp b/src/main.cpp
index cdad06e7..a6f2469c 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -19,6 +19,10 @@ int main(int argc, char** argv) {
ignoreSudo = true;
}
+ system("mkdir -p /tmp/hypr");
+
+ Debug::init();
+
if (!ignoreSudo) {
if (Init::isSudo()) {
Debug::log(CRIT, "Hyprland shall not be run as the root user. If you really want to, use the --i-am-really-stupid flag.");
diff --git a/src/managers/EventManager.cpp b/src/managers/EventManager.cpp
index a8bde442..eed0e6e5 100644
--- a/src/managers/EventManager.cpp
+++ b/src/managers/EventManager.cpp
@@ -1,4 +1,5 @@
#include "EventManager.hpp"
+#include "../Compositor.hpp"
#include <errno.h>
#include <fcntl.h>
@@ -26,10 +27,9 @@ void CEventManager::startThread() {
return;
}
- unlink("/tmp/hypr/.socket2.sock");
-
sockaddr_un SERVERADDRESS = {.sun_family = AF_UNIX};
- strcpy(SERVERADDRESS.sun_path, "/tmp/hypr/.socket2.sock");
+ std::string socketPath = "/tmp/hypr/" + g_pCompositor->m_szInstanceSignature + "/.socket2.sock";
+ strcpy(SERVERADDRESS.sun_path, socketPath.c_str());
bind(SOCKET, (sockaddr*)&SERVERADDRESS, SUN_LEN(&SERVERADDRESS));
@@ -41,7 +41,7 @@ void CEventManager::startThread() {
sockaddr_in clientAddress;
socklen_t clientSize = sizeof(clientAddress);
- Debug::log(LOG, "Hypr socket 2 started.");
+ Debug::log(LOG, "Hypr socket 2 started at %s", socketPath.c_str());
// set the socket nonblock
int flags = fcntl(SOCKET, F_GETFL, 0);