From 83d129ade30abf40e6c7be99932b3f2264133d00 Mon Sep 17 00:00:00 2001 From: Links2004 Date: Wed, 13 Dec 2023 19:46:41 +0100 Subject: [PATCH 1/5] add $HOME/.local/share/slimevr to the possible dirs of the sockets (fix #43) --- src/bridge/bridge-unix-sockets.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/bridge/bridge-unix-sockets.cpp b/src/bridge/bridge-unix-sockets.cpp index e53e721..61ec8e3 100644 --- a/src/bridge/bridge-unix-sockets.cpp +++ b/src/bridge/bridge-unix-sockets.cpp @@ -33,6 +33,7 @@ #include #define TMP_DIR "/tmp" +#define SLIMEVR_HOME_LOCAL_DIR ".local/share/slimevr" #define SOCKET_NAME "SlimeVRDriver" namespace fs = std::filesystem; @@ -156,13 +157,27 @@ bool sendBridgeMessage(messages::ProtobufMessage& message, SlimeVRDriver::VRDriv BridgeStatus runBridgeFrame(SlimeVRDriver::VRDriver& driver) { try { if (!client.IsOpen()) { + fs::path socket; // TODO: do this once in the constructor or something if(const char* ptr = std::getenv("XDG_RUNTIME_DIR")) { const fs::path xdg_runtime = ptr; - client.Open((xdg_runtime / SOCKET_NAME).native()); - } else { - client.Open((fs::path(TMP_DIR) / SOCKET_NAME).native()); + socket = (xdg_runtime / SOCKET_NAME); } + if(!fs::exists(socket)) { + socket = (fs::path(TMP_DIR) / SOCKET_NAME); + } + // try using home dir if the vrserver is run in a chroot like + if(!fs::exists(socket)) { + if(const char* ptr = std::getenv("HOME")) { + const fs::path home = ptr; + socket = (home / SLIMEVR_HOME_LOCAL_DIR / SOCKET_NAME); + } + } + if(!fs::exists(socket)) { + throw std::runtime_error("socket " SOCKET_NAME " not found"); + } + driver.Log("bridge socket: " + std::string(socket)); + client.Open(socket.native()); } client.UpdateOnce(); From 165263bb91fe305aae4fb8bd1113b03d5b3dcb94 Mon Sep 17 00:00:00 2001 From: Kitlith Date: Mon, 5 Feb 2024 19:53:50 -0800 Subject: [PATCH 2/5] Don't throw exception when socket fails to open Co-authored-by: Uriel --- src/bridge/bridge-unix-sockets.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/bridge/bridge-unix-sockets.cpp b/src/bridge/bridge-unix-sockets.cpp index 61ec8e3..7e3069d 100644 --- a/src/bridge/bridge-unix-sockets.cpp +++ b/src/bridge/bridge-unix-sockets.cpp @@ -173,11 +173,10 @@ BridgeStatus runBridgeFrame(SlimeVRDriver::VRDriver& driver) { socket = (home / SLIMEVR_HOME_LOCAL_DIR / SOCKET_NAME); } } - if(!fs::exists(socket)) { - throw std::runtime_error("socket " SOCKET_NAME " not found"); + if(fs::exists(socket)) { + driver.Log("bridge socket: " + std::string(socket)); + client.Open(socket.native()); } - driver.Log("bridge socket: " + std::string(socket)); - client.Open(socket.native()); } client.UpdateOnce(); From 7509236d06fc9d70a6800ec359e66f397a4a552c Mon Sep 17 00:00:00 2001 From: Uriel Date: Tue, 6 Feb 2024 01:20:24 -0300 Subject: [PATCH 3/5] Add path constants Co-authored-by: Kitlith --- src/bridge/bridge-unix-sockets.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/bridge/bridge-unix-sockets.cpp b/src/bridge/bridge-unix-sockets.cpp index 7e3069d..f2c1684 100644 --- a/src/bridge/bridge-unix-sockets.cpp +++ b/src/bridge/bridge-unix-sockets.cpp @@ -33,7 +33,8 @@ #include #define TMP_DIR "/tmp" -#define SLIMEVR_HOME_LOCAL_DIR ".local/share/slimevr" +#define XDG_DATA_DIR_DEFAULT ".local/share" +#define SLIMEVR_DATA_DIR "slimevr" #define SOCKET_NAME "SlimeVRDriver" namespace fs = std::filesystem; From 348650446739201b53f6242e6898e4a9816b5298 Mon Sep 17 00:00:00 2001 From: Uriel Date: Tue, 6 Feb 2024 01:20:33 -0300 Subject: [PATCH 4/5] Update src/bridge/bridge-unix-sockets.cpp Co-authored-by: Kitlith --- src/bridge/bridge-unix-sockets.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/bridge/bridge-unix-sockets.cpp b/src/bridge/bridge-unix-sockets.cpp index f2c1684..d5337e0 100644 --- a/src/bridge/bridge-unix-sockets.cpp +++ b/src/bridge/bridge-unix-sockets.cpp @@ -169,9 +169,12 @@ BridgeStatus runBridgeFrame(SlimeVRDriver::VRDriver& driver) { } // try using home dir if the vrserver is run in a chroot like if(!fs::exists(socket)) { - if(const char* ptr = std::getenv("HOME")) { + if (const char* ptr = std::getenv("XDG_DATA_DIR")) { + const fs::path data_dir = ptr; + socket = (ptr / SLIMEVR_DATA_DIR / SOCKET_NAME); + } else if (const char* ptr = std::getenv("HOME")) { const fs::path home = ptr; - socket = (home / SLIMEVR_HOME_LOCAL_DIR / SOCKET_NAME); + socket = (home / XDG_DATA_DIR_DEFAULT / SLIMEVR_DATA_DIR / SOCKET_NAME); } } if(fs::exists(socket)) { From 63aea0cf2ce5259a3ef97cf7356283c56def5adb Mon Sep 17 00:00:00 2001 From: Kitlith Date: Mon, 5 Feb 2024 20:23:47 -0800 Subject: [PATCH 5/5] fixup! --- src/bridge/bridge-unix-sockets.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bridge/bridge-unix-sockets.cpp b/src/bridge/bridge-unix-sockets.cpp index d5337e0..8a78bc3 100644 --- a/src/bridge/bridge-unix-sockets.cpp +++ b/src/bridge/bridge-unix-sockets.cpp @@ -171,7 +171,7 @@ BridgeStatus runBridgeFrame(SlimeVRDriver::VRDriver& driver) { if(!fs::exists(socket)) { if (const char* ptr = std::getenv("XDG_DATA_DIR")) { const fs::path data_dir = ptr; - socket = (ptr / SLIMEVR_DATA_DIR / SOCKET_NAME); + socket = (data_dir / SLIMEVR_DATA_DIR / SOCKET_NAME); } else if (const char* ptr = std::getenv("HOME")) { const fs::path home = ptr; socket = (home / XDG_DATA_DIR_DEFAULT / SLIMEVR_DATA_DIR / SOCKET_NAME);