diff --color -ru a/usbguard-notifier-0.0.6/man/usbguard-notifier.1 b/usbguard-notifier-0.0.6/man/usbguard-notifier.1 --- a/usbguard-notifier-0.0.6/man/usbguard-notifier.1 2021-10-14 12:44:57.816146101 +0200 +++ b/usbguard-notifier-0.0.6/man/usbguard-notifier.1 2021-10-14 12:46:14.442519466 +0200 @@ -39,7 +39,12 @@ .PP \fB\-w, \-\-wait\fR .RS 4 -Wait until an active IPC connection is estabilished\&. +Wait until an active IPC connection is estabilished\&. ie\&. infinite number of attempts\&. +.RE +.PP +\fB\-n, \-\-num\-attempts\fR \fInum\fR +.RS 4 +Number of IPC connection attempts. Window between each attempt is 1 second\&. The default number of attempts is 3\&. .RE .PP \fB\-d, \-\-debug\fR @@ -51,6 +56,64 @@ .RS 4 Show help\&. .RE +.SH "HOW TO START" +.sp +In order to make usbguard\-notifier work properly, you will need to perform certain actions: +.sp +.RS 4 +.ie n \{\ +\h'-04' 1.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 1." 4.2 +.\} +Each user who wants to run usbguard\-notifier service needs to have sufficient IPC privileges to connect to the usbguard IPC interface\&. To allow a specific user to listen to the device signals you can use the following command: + + +\fB$ sudo usbguard add\-user\fR +\fIUSER\fR +\fB\-d listen\fR + +Or you can allow a group of users: + + +\fB$ sudo usbguard add\-user \-g\fR +\fIGROUP\fR +\fB\-d listen\fR +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 2.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 2." 4.2 +.\} +Now, you need a running usbguard\-daemon instance to connect to\&. Start the usbguard service or restart it if it is already running\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04' 3.\h'+01'\c +.\} +.el \{\ +.sp -1 +.IP " 3." 4.2 +.\} +After configuring IPC privileges and starting up the usbguard\-daemon, the user can now start the usbguard\-notifier service: + + +\fB$ systemctl start \-\-user usbguard\-notifier\&.service\fR + +Optionally, the user can enable the usbguard\-notifier service to start automatically after the login: + + +\fB$ systemctl enable \-\-user usbguard\-notifier\&.service\fR +.RE +.sp +The usbguard\-notifier should now be running\&. Anytime a USB device gets inserted/ejected or allowed/blocked a message will pop up in the user\(cqs graphical interface\&. .SH "SEE ALSO" .sp usbguard(1) diff --color -ru a/usbguard-notifier-0.0.6/src/Main.cpp b/usbguard-notifier-0.0.6/src/Main.cpp --- a/usbguard-notifier-0.0.6/src/Main.cpp 2020-03-04 08:59:49.138771474 +0100 +++ b/usbguard-notifier-0.0.6/src/Main.cpp 2021-10-14 12:46:14.443519484 +0200 @@ -20,6 +20,7 @@ #include "Log.hpp" #include "Notifier.hpp" +#include #include #include #include @@ -27,10 +28,11 @@ #include -static const char* short_options = "wdh"; +static const char* short_options = "wn:dh"; static const struct ::option long_options[] = { { "wait", no_argument, nullptr, 'w' }, + { "num-attempts", required_argument, nullptr, 'n' }, { "debug", no_argument, nullptr, 'd' }, { "help", no_argument, nullptr, 'h' } }; @@ -40,22 +42,26 @@ out << "Usage: " << app_name << " [OPTIONS]" << std::endl; out << std::endl; out << "Options:" << std::endl; - out << " -w, --wait Wait until an active IPC connection is estabilished." << std::endl; - out << " -d, --debug Enable debug mode." << std::endl; - out << " -h, --help Show this usage message." << std::endl; + out << " -w, --wait Wait until an active IPC connection is estabilished." << std::endl; + out << " -n, --num-attempts Number of IPC connection attempts." << std::endl; + out << " -d, --debug Enable debug mode." << std::endl; + out << " -h, --help Show this usage message." << std::endl; } int main(int argc, char** argv) { const std::string app_name(::basename(*argv)); bool wait_connection = false, debug = false; - int opt; + int opt, num_attempts = 3; while ((opt = getopt_long(argc, argv, short_options, long_options, nullptr)) != -1) { switch (opt) { case 'w': wait_connection = true; break; + case 'n': + num_attempts = std::atoi(optarg); + break; case 'd': debug = true; break; @@ -71,23 +77,26 @@ } NOTIFIER_LOGGER.setDebugMode(debug); - for (;;) { + bool print_err = true; + for (int i = 0; wait_connection || i < num_attempts; ++i) { try { usbguardNotifier::Notifier notifier(app_name); notifier.connect(); std::cout << "Connection has been established" << std::endl; + print_err = true; + i = 0; notifier.wait(); } catch (const std::runtime_error& e) { std::cerr << "Error:" << e.what() << std::endl; return EXIT_FAILURE; } catch (const usbguard::Exception& e) { - std::cerr << "IPC connection failure!" << e.message() << std::endl; - std::cerr << "Check if usbguard-daemon is running in the background" << std::endl; - if (!wait_connection) { - break; + if (print_err) { + print_err = false; + std::cerr << "IPC connection failure!" << e.message() << std::endl; + std::cerr << "Check if usbguard-daemon is running in the background" << std::endl; } - sleep(1); } + sleep(1); } return EXIT_SUCCESS; } diff --color -ru a/usbguard-notifier-0.0.6/usbguard-notifier.service.in b/usbguard-notifier-0.0.6/usbguard-notifier.service.in --- a/usbguard-notifier-0.0.6/usbguard-notifier.service.in 2020-03-04 09:00:32.019254871 +0100 +++ b/usbguard-notifier-0.0.6/usbguard-notifier.service.in 2021-10-14 12:46:14.444519502 +0200 @@ -3,7 +3,7 @@ After=usbguard.service [Service] -ExecStart=%bindir%/usbguard-notifier -w +ExecStart=%bindir%/usbguard-notifier [Install] WantedBy=default.target