mirror of
https://github.com/PixlOne/logiops.git
synced 2025-09-14 13:56:50 +08:00
Add support for using system bus
This commit is contained in:
parent
e50e566f20
commit
fed7e0cacc
@ -8,9 +8,11 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -Wall -Wextra")
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -Wall -Wextra")
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
|
option(USE_USER_BUS "Uses user bus" OFF)
|
||||||
|
|
||||||
find_package(Git REQUIRED)
|
find_package(Git REQUIRED)
|
||||||
|
|
||||||
# Set version number and update submodules
|
# Set version number and update submodules
|
||||||
@ -46,5 +48,9 @@ message("LogiOps Version Number: ${LOGIOPS_VERSION}")
|
|||||||
|
|
||||||
add_definitions( -DLOGIOPS_VERSION="${LOGIOPS_VERSION}")
|
add_definitions( -DLOGIOPS_VERSION="${LOGIOPS_VERSION}")
|
||||||
|
|
||||||
|
if(USE_USER_BUS)
|
||||||
|
add_definitions(-DUSE_USER_BUS)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_subdirectory(src/ipcgull)
|
add_subdirectory(src/ipcgull)
|
||||||
add_subdirectory(src/logid)
|
add_subdirectory(src/logid)
|
||||||
|
@ -33,12 +33,18 @@ To build this project, run:
|
|||||||
```bash
|
```bash
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
cmake ..
|
cmake -DCMAKE_BUILD_TYPE=Release ..
|
||||||
make
|
make
|
||||||
```
|
```
|
||||||
|
|
||||||
To install, run `sudo make install` after building. You can set the daemon to start at boot by running `sudo systemctl enable logid` or `sudo systemctl enable --now logid` if you want to enable and start the daemon.
|
To install, run `sudo make install` after building. You can set the daemon to start at boot by running `sudo systemctl enable logid` or `sudo systemctl enable --now logid` if you want to enable and start the daemon.
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
The project may only run as root, but for development purposes, you may find it
|
||||||
|
convenient to run as non-root on the user bus. You must compile with the CMake
|
||||||
|
flag `-DUSE_USER_BUS=ON` to use the user bus.
|
||||||
|
|
||||||
## Donate
|
## Donate
|
||||||
This program is (and will always be) provided free of charge. If you would like to support the development of this project by donating, you can donate to my Ko-Fi below.
|
This program is (and will always be) provided free of charge. If you would like to support the development of this project by donating, you can donate to my Ko-Fi below.
|
||||||
|
|
||||||
|
@ -69,6 +69,7 @@ add_executable(logid
|
|||||||
set_target_properties(logid PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
|
set_target_properties(logid PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||||
|
|
||||||
pkg_check_modules(PC_EVDEV libevdev REQUIRED)
|
pkg_check_modules(PC_EVDEV libevdev REQUIRED)
|
||||||
|
pkg_check_modules(DBUS "dbus-1")
|
||||||
pkg_check_modules(SYSTEMD "systemd")
|
pkg_check_modules(SYSTEMD "systemd")
|
||||||
pkg_check_modules(LIBCONFIG libconfig REQUIRED)
|
pkg_check_modules(LIBCONFIG libconfig REQUIRED)
|
||||||
pkg_check_modules(LIBUDEV libudev REQUIRED)
|
pkg_check_modules(LIBUDEV libudev REQUIRED)
|
||||||
@ -88,13 +89,17 @@ target_link_libraries(logid ${CMAKE_THREAD_LIBS_INIT} ${EVDEV_LIBRARY} config++
|
|||||||
|
|
||||||
install(TARGETS logid DESTINATION bin)
|
install(TARGETS logid DESTINATION bin)
|
||||||
|
|
||||||
if (SYSTEMD_FOUND AND "${SYSTEMD_SERVICES_INSTALL_DIR}" STREQUAL "")
|
if (SYSTEMD_FOUND)
|
||||||
|
if ("${SYSTEMD_SERVICES_INSTALL_DIR}" STREQUAL "")
|
||||||
execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE}
|
execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE}
|
||||||
--variable=systemdsystemunitdir systemd
|
--variable=systemdsystemunitdir systemd
|
||||||
OUTPUT_VARIABLE SYSTEMD_SERVICES_INSTALL_DIR)
|
OUTPUT_VARIABLE SYSTEMD_SERVICES_INSTALL_DIR)
|
||||||
string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_SERVICES_INSTALL_DIR
|
string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_SERVICES_INSTALL_DIR
|
||||||
"${SYSTEMD_SERVICES_INSTALL_DIR}")
|
"${SYSTEMD_SERVICES_INSTALL_DIR}")
|
||||||
configure_file(logid.service.cmake ${CMAKE_BINARY_DIR}/logid.service)
|
endif ()
|
||||||
|
|
||||||
|
# Install systemd service
|
||||||
|
configure_file(logid.service.in ${CMAKE_BINARY_DIR}/logid.service)
|
||||||
message(STATUS "systemd units will be installed at ${SYSTEMD_SERVICES_INSTALL_DIR}")
|
message(STATUS "systemd units will be installed at ${SYSTEMD_SERVICES_INSTALL_DIR}")
|
||||||
install(FILES ${CMAKE_BINARY_DIR}/logid.service
|
install(FILES ${CMAKE_BINARY_DIR}/logid.service
|
||||||
DESTINATION ${SYSTEMD_SERVICES_INSTALL_DIR}
|
DESTINATION ${SYSTEMD_SERVICES_INSTALL_DIR}
|
||||||
@ -102,3 +107,14 @@ if (SYSTEMD_FOUND AND "${SYSTEMD_SERVICES_INSTALL_DIR}" STREQUAL "")
|
|||||||
elseif (NOT SYSTEMD_FOUND AND SYSTEMD_SERVICES_INSTALL_DIR)
|
elseif (NOT SYSTEMD_FOUND AND SYSTEMD_SERVICES_INSTALL_DIR)
|
||||||
message(FATAL_ERROR "systemd is not found w/ pkg-config but SYSTEMD_SERVICES_INSTALL_DIR is defined.")
|
message(FATAL_ERROR "systemd is not found w/ pkg-config but SYSTEMD_SERVICES_INSTALL_DIR is defined.")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
if(DBUS_FOUND)
|
||||||
|
# Install DBus conf
|
||||||
|
# TODO: Is there a better way of setting the system policy directory?
|
||||||
|
set(DBUS_SYSTEM_POLICY_INSTALL_DIR "/usr/share/dbus-1/system.d")
|
||||||
|
configure_file(logiops-dbus.conf.in ${CMAKE_BINARY_DIR}/pizza.pixl.LogiOps.conf)
|
||||||
|
message(STATUS "dbus system policy will be installed at ${DBUS_SYSTEM_POLICY_INSTALL_DIR}")
|
||||||
|
install(FILES ${CMAKE_BINARY_DIR}/pizza.pixl.LogiOps.conf
|
||||||
|
DESTINATION ${DBUS_SYSTEM_POLICY_INSTALL_DIR}
|
||||||
|
COMPONENT cp)
|
||||||
|
endif()
|
@ -142,7 +142,13 @@ int main(int argc, char** argv) {
|
|||||||
config = std::make_shared<Configuration>();
|
config = std::make_shared<Configuration>();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto server = ipcgull::make_server(SERVICE_ROOT_NAME, server_root_node, ipcgull::IPCGULL_USER);
|
#ifdef USE_USER_BUS
|
||||||
|
auto server_bus = ipcgull::IPCGULL_USER;
|
||||||
|
#else
|
||||||
|
auto server_bus = ipcgull::IPCGULL_SYSTEM;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
auto server = ipcgull::make_server(SERVICE_ROOT_NAME, server_root_node, server_bus);
|
||||||
|
|
||||||
//Create a virtual input device
|
//Create a virtual input device
|
||||||
try {
|
try {
|
||||||
@ -161,6 +167,7 @@ int main(int argc, char** argv) {
|
|||||||
server->start();
|
server->start();
|
||||||
} catch (ipcgull::connection_failed& e) {
|
} catch (ipcgull::connection_failed& e) {
|
||||||
logPrintf(ERROR, "Lost IPC connection, terminating.");
|
logPrintf(ERROR, "Lost IPC connection, terminating.");
|
||||||
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
@ -8,7 +8,6 @@ Wants=multi-user.target
|
|||||||
Type=simple
|
Type=simple
|
||||||
ExecStart=${CMAKE_INSTALL_PREFIX}/bin/logid
|
ExecStart=${CMAKE_INSTALL_PREFIX}/bin/logid
|
||||||
User=root
|
User=root
|
||||||
ExecReload=/bin/kill -HUP $MAINPID
|
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
|
|
||||||
[Install]
|
[Install]
|
16
src/logid/logiops-dbus.conf.in
Normal file
16
src/logid/logiops-dbus.conf.in
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<!DOCTYPE busconfig PUBLIC
|
||||||
|
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
|
||||||
|
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
|
||||||
|
|
||||||
|
<busconfig>
|
||||||
|
<!-- Only root user can own the service -->
|
||||||
|
<policy user="root">
|
||||||
|
<allow own="pizza.pixl.LogiOps"/>
|
||||||
|
</policy>
|
||||||
|
|
||||||
|
<!-- Allow anyone to invoke methods on server, except SetHostName -->
|
||||||
|
<policy context="default">
|
||||||
|
<allow send_destination="pizza.pixl.LogiOps"/>
|
||||||
|
<allow receive_sender="pizza.pixl.LogiOps"/>
|
||||||
|
</policy>
|
||||||
|
</busconfig>
|
Loading…
Reference in New Issue
Block a user