#!/usr/bin/perl use strict; use warnings; use Data::Dumper; # meine USB-Tastatur liegt auf "/dev/hidraw2" my $input=shift(@ARGV) || "/dev/hidraw2"; open(my $fh, '<', $input) or die("ERROR open $input ($!)\n"); binmode($fh); while(1) { my @keys=read_all($fh); print Dumper(\@keys) if(@keys); print localtime()."\n"; sleep(1); } close($fh); sub read_all { my $fh=shift; my @keys; eval{ local $SIG{ALRM}=sub{die}; while(1) { my $buffer; alarm(1); read($fh,$buffer,8); alarm(0); my @l=unpack('CxC*',$buffer); # Fehler gemeldet (zu viele Tasten auf einmal) next if($l[3]==1 && $l[4]==1 && $l[5]==1 && $l[6]==1); push(@keys, [@l[0,1,2]]); } }; return @keys; }