Index: src/slic3r/GUI/Mouse3DController.cpp
--- src/slic3r/GUI/Mouse3DController.cpp.orig
+++ src/slic3r/GUI/Mouse3DController.cpp
@@ -57,6 +57,8 @@ static const std::vector<int> _3DCONNEXION_DEVICES =
 namespace Slic3r {
 namespace GUI {
 
+#define hid_init hidapi_hid_init
+
 #if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
 template<typename T>
 void update_maximum(std::atomic<T>& maximum_value, T const& value) noexcept
@@ -1064,7 +1066,7 @@ bool Mouse3DController::connect_device()
 
     for (const DetectedDevices::value_type& device : detected_devices) {
         if (device.second.size() == 1) {
-#if defined(__linux__)
+#if defined(__linux__) || defined(__OpenBSD__)
             hid_device* test_device = hid_open(device.first.first, device.first.second, nullptr);
             if (test_device == nullptr) {
                 BOOST_LOG_TRIVIAL(error) << "3DConnexion device cannot be opened: " << device.second.front().path <<
@@ -1089,7 +1091,7 @@ bool Mouse3DController::connect_device()
                 std::cout << "Test device: " << std::hex << device.first.first << std::dec << "/" << std::hex << device.first.second << std::dec << " \"" << data.path << "\"";
 #endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
 
-#ifdef __linux__
+#if defined(__linux__) || defined(__OpenBSD__)
                 hid_device* test_device = hid_open_path(data.path.c_str());
                 if (test_device != nullptr) {
                     path = data.path;
