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_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -Wall -Wextra")
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
option(USE_USER_BUS "Uses user bus" OFF)
|
||||
|
||||
find_package(Git REQUIRED)
|
||||
|
||||
# Set version number and update submodules
|
||||
@ -46,5 +48,9 @@ message("LogiOps Version Number: ${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/logid)
|
||||
|
@ -33,12 +33,18 @@ To build this project, run:
|
||||
```bash
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
cmake -DCMAKE_BUILD_TYPE=Release ..
|
||||
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.
|
||||
|
||||
## 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
|
||||
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})
|
||||
|
||||
pkg_check_modules(PC_EVDEV libevdev REQUIRED)
|
||||
pkg_check_modules(DBUS "dbus-1")
|
||||
pkg_check_modules(SYSTEMD "systemd")
|
||||
pkg_check_modules(LIBCONFIG libconfig 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)
|
||||
|
||||
if (SYSTEMD_FOUND AND "${SYSTEMD_SERVICES_INSTALL_DIR}" STREQUAL "")
|
||||
execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE}
|
||||
--variable=systemdsystemunitdir systemd
|
||||
OUTPUT_VARIABLE SYSTEMD_SERVICES_INSTALL_DIR)
|
||||
string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_SERVICES_INSTALL_DIR
|
||||
"${SYSTEMD_SERVICES_INSTALL_DIR}")
|
||||
configure_file(logid.service.cmake ${CMAKE_BINARY_DIR}/logid.service)
|
||||
if (SYSTEMD_FOUND)
|
||||
if ("${SYSTEMD_SERVICES_INSTALL_DIR}" STREQUAL "")
|
||||
execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE}
|
||||
--variable=systemdsystemunitdir systemd
|
||||
OUTPUT_VARIABLE SYSTEMD_SERVICES_INSTALL_DIR)
|
||||
string(REGEX REPLACE "[ \t\n]+" "" SYSTEMD_SERVICES_INSTALL_DIR
|
||||
"${SYSTEMD_SERVICES_INSTALL_DIR}")
|
||||
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}")
|
||||
install(FILES ${CMAKE_BINARY_DIR}/logid.service
|
||||
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)
|
||||
message(FATAL_ERROR "systemd is not found w/ pkg-config but SYSTEMD_SERVICES_INSTALL_DIR is defined.")
|
||||
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>();
|
||||
}
|
||||
|
||||
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
|
||||
try {
|
||||
@ -161,6 +167,7 @@ int main(int argc, char** argv) {
|
||||
server->start();
|
||||
} catch (ipcgull::connection_failed& e) {
|
||||
logPrintf(ERROR, "Lost IPC connection, terminating.");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
|
@ -8,7 +8,6 @@ Wants=multi-user.target
|
||||
Type=simple
|
||||
ExecStart=${CMAKE_INSTALL_PREFIX}/bin/logid
|
||||
User=root
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
Restart=on-failure
|
||||
|
||||
[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