- int print_usec = argc > 1 && strcmp(argv[1], "--usec") == 0;
- int fd = open("/dev/input/by-path/platform-i8042-serio-0-event-kbd", O_RDONLY);
- if (fd < 0) {
- err(EX_NOINPUT, "Could not open keyboard event file");
+ int print_usec = 0;
+ char* device = strdup("/dev/input/by-path/*kbd*");
+ struct option long_options[] = {
+ {"device", required_argument, 0, 'd' },
+ {"usec", no_argument, &print_usec, 1 },
+ {0, 0, 0, 0 },
+ };
+ while (1) {
+ int c = getopt_long(argc, argv, "", long_options, NULL);
+ if (c == -1) break;
+ if (c == 'd') {
+ free(device);
+ device = strdup(optarg);
+ continue;
+ }
+ if (c != 0) exit(EX_USAGE);
+ }
+
+ fd_set all_inputs;
+ FD_ZERO(&all_inputs);
+ int maxfd = 0;
+ glob_t glob_result;
+ int glob_return = glob(device, GLOB_ERR | GLOB_NOSORT, NULL, &glob_result);
+ if (glob_return == GLOB_NOMATCH) {
+ errx(EX_NOINPUT, "Could not find keyboard event file(s): %s", device);