diff --git a/man/logkeys.8 b/man/logkeys.8 index dc99c42..c398ee1 100644 --- a/man/logkeys.8 +++ b/man/logkeys.8 @@ -49,6 +49,8 @@ Set ouput log file to \fIlogfile\fR. If no \fB-o\fR option is provided, logkeys appends to \fI/var/log/logkeys.log\fR file. If \fIlogfile\fR doesn't exist, logkeys creates the file with 600 permissions. .IP +To print output to standard output, use '-' as logfile: \fB-o\fR \fI-\fR. +.IP See also \fBLOGFILE FORMAT\fR section. .TP diff --git a/src/logkeys.cc b/src/logkeys.cc index 58bf5b8..c94b4e4 100644 --- a/src/logkeys.cc +++ b/src/logkeys.cc @@ -393,6 +393,11 @@ int main(int argc, char **argv) if (!args.keymap.empty() && (!(args.flags & FLAG_EXPORT_KEYMAP) && args.us_keymap)) { // exporting uses args.keymap also error(EXIT_FAILURE, 0, "Incompatible flags '-m' and '-u'. See usage."); } + + // check for incompatible flags: if posting remote and output is set to stdout + if (args.post_size != 0 && ( args.logfile == "-" )) { + error(EXIT_FAILURE, 0, "Incompatible flags [--post-size | --post-http] and --output to stdout"); + } set_utf8_locale(); @@ -423,7 +428,11 @@ int main(int argc, char **argv) int noclose = 1; // don't close streams (stderr used) if (daemon(nochdir, noclose) == -1) // become daemon error(EXIT_FAILURE, errno, "Failed to become daemon"); - close(STDIN_FILENO); close(STDOUT_FILENO); // leave stderr open + close(STDIN_FILENO); + // leave stderr open + if (args.logfile != "-") { + close(STDOUT_FILENO); + } // open input device for reading input_fd = open(args.device.c_str(), O_RDONLY); @@ -439,7 +448,13 @@ int main(int argc, char **argv) // open log file (if file doesn't exist, create it with safe 0600 permissions) umask(0177); - FILE *out = fopen(args.logfile.c_str(), "a"); + FILE *out = NULL; + if (args.logfile == "-") { + out = stdout; + } + else { + out = fopen(args.logfile.c_str(), "a"); + } if (!out) error(EXIT_FAILURE, errno, "Error opening output file '%s'", args.logfile.c_str()); diff --git a/src/usage.cc b/src/usage.cc index c734614..dde8bd5 100644 --- a/src/usage.cc +++ b/src/usage.cc @@ -19,7 +19,7 @@ void usage() "\n" " -s, --start start logging keypresses\n" " -m, --keymap=FILE use keymap FILE\n" -" -o, --output=FILE log output to FILE [" DEFAULT_LOG_FILE "]\n" +" -o, --output=FILE log output to FILE [" DEFAULT_LOG_FILE "] or standard output '-'\n" " -u, --us-keymap use en_US keymap instead of configured default\n" " -k, --kill kill running logkeys process\n" " -d, --device=FILE input event device [eventX from " INPUT_EVENT_PATH "]\n"