Keyboard-Interceptor.install.sh 1.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #/bin/bash
  2. if [ "$1" == "" ]; then OUT="/usr/sbin/Keyboard-Interceptor"; else OUT=$1; fi
  3. cat <<EOF | gcc -xc -o $OUT - && echo "Der Keyboard-Interceptor wurde nach $OUT kompiliert." && exit 0;
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <fcntl.h>
  7. #include <linux/input.h>
  8. /*
  9. * Dieses Programm fängt die Eingaben eines Event-HIDs ab und gibt den Scan-Code nach StdOut aus.
  10. * Dies ermöglicht, spezielle HIDs wie Barcode-Scanner oder Nummernblöcke, durch gezielte Scripte
  11. * zu verarbeiten und die Eingaben nicht den regulären Betriebsfluss stören zu lassen.
  12. *
  13. * Das Programm erfordert als Argument den Pfad zu dem gewünschten HID.
  14. * Empfohlen ist die Angabe eines Pfades wie "/dev/input/by-id/_____kbd".
  15. *
  16. */
  17. int main(int argc, char* argv[]) {
  18. if (argc != 2) {
  19. fprintf(stderr, "Syntax: %s [Devicepath].\n", argv[0]);
  20. exit(1);
  21. }
  22. struct input_event ev[64];
  23. int dev = -1;
  24. int size = sizeof(struct input_event);
  25. char name[256] = "< Unbekanntes Gerät >";
  26. dev = open(argv[1], O_RDONLY);
  27. if (dev == -1) {
  28. fprintf(stderr, "Das Gerät %s konnte nicht geöffnet werden.\n", argv[1]);
  29. exit(1);
  30. }
  31. ioctl(dev, EVIOCGNAME(sizeof(name)), name);
  32. fprintf (stderr, "Fange das folgende Gerät ab: %s\n", name);
  33. if (ioctl(dev, EVIOCGRAB, 1)) {
  34. fprintf(stderr, "Der exklusive Zugriff auf das Gerät wurde nicht genehmigt.\n");
  35. exit(1);
  36. }
  37. while (1) {
  38. if (read(dev, ev, size * 64) < size) break;
  39. if (ev[0].value != ' ' && ev[1].value == 1 && ev[1].type == 1) fprintf(stdout, "%d\n", (ev[1].code));
  40. fflush(stdout);
  41. }
  42. fprintf(stderr, "Exiting.\n");
  43. ioctl(dev, EVIOCGRAB, 1);
  44. close(dev);
  45. return 0;
  46. }
  47. EOF