Hallo,

man kann alle Tasten in C abfragen. Du kannst sogar auf die Numlock-Taste im Programm reagieren.

Anbei ein auf das Wesentliche reduzierte Testprogramm:
Code:
// Compile with: GCC -o /var/scripte/tastaturtest /var/scripte/tastaturtest.c  -L/usr/local/lib -lpthread
//nice -1 /var/scripte/tastaturtest < /dev/input/event0 &

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdint.h>
#include <sys/sysinfo.h>
#include <time.h>
#include <linux/input.h>
#include <pthread.h>

int ziffer=0;
int beenden=2;
int zeit=0;
int shiftl=0;
int shiftr=0;
int strgl=0;
int strgr=0;
int capsl=0;


unsigned char runterfahren(){
    system("halt");
}

unsigned char zahlentaste()
{
    printf("Zahlentaste: %d\n", ziffer);
}

unsigned char tnull()
{
    ziffer=0;
    zahlentaste();
}

unsigned char teins()
{
    ziffer=1;
    zahlentaste();
    
}

unsigned char tzwei()
{
    ziffer=2;
    zahlentaste();
    
}
unsigned char tdrei()
{
    ziffer=3;
    zahlentaste();
    
}
unsigned char tvier()
{
    ziffer=4;
    zahlentaste();
    
}
unsigned char tfuenf()
{
    ziffer=5;
    zahlentaste();
    
}
unsigned char tsechs()
{
    ziffer=6;
    zahlentaste();
    
}
unsigned char tsieben()
{
    ziffer=7;
    zahlentaste();
    
}
unsigned char tacht()
{
    ziffer=8;
    zahlentaste();
    
}
unsigned char tneun()
{
    ziffer=9;
    zahlentaste();
    
}
unsigned char tdel()
{
    printf("Delete\n");
}

unsigned char tnum()
{
printf("Numlock\n");    
}

unsigned char tenter()
{    printf("Enter\n");
    
}
unsigned char tplus()
{
printf("Plus\n");    
}
unsigned char tminus()
{
printf("Minus\n");
}
unsigned char tmal()
{
printf("Mal\n");    
}

unsigned char tgeteilt()
{
    printf("Geteilt\n");    
}

unsigned char tbs()
{
    printf("Backspace\n");
}

unsigned char tq()
{
    beenden=1;
}

unsigned char status()
{
    printf("SHIFTL: %d, SHIFTR: %d, STRGL: %d, STRGR: %d\n",shiftl,shiftr,strgl,strgr);
}

unsigned char tf1()
{
    if(shiftl>=1 || shiftr>=1){
        printf("SHIFT + F1\n");
    }else{
        printf("F1\n");
    }
}

void tastatur(void *name)
{
    struct input_event event;
    while ((read(0, &event, sizeof(event)) > 0) && (beenden==2) ) {
        if (event.type != EV_KEY) continue;
//        if (event.value != EV_KEY) continue; //Nur Tastendrücke erkennen, kein Loslassen. 0=losgelassen, 1=gedrückt, 2=Wiederholung(lang gedrückt)
    printf("Typ: %d; Wert: %d; Code: %d\n",event.type,event.value,event.code);

        switch (event.code) {
            case 42: shiftl=event.value; break;
            case 54: shiftr=event.value; break;
            case 29: strgl=event.value; break;
            case 97: strgr=event.value; break;
            case 16: tq(); break; //q
            case 82: tnull(); break; //0
            case 79: teins(); break; //1
            case 80: tzwei(); break; //2
            case 81: tdrei(); break; //3
            case 75: tvier(); break; //4
            case 76: tfuenf(); break; //5
            case 77: tsechs(); break; //6
            case 71: tsieben(); break; //7
            case 72: tacht(); break; //8
            case 73: tneun(); break; //9
            case 83: tdel(); break; //DEL
            case 96: tenter(); break; //ENTER
            case 78: tplus(); break; //+
            case 74: tminus(); break; //-
            case 55: tmal(); break; //*
            case 98: tgeteilt(); break; ///
            case 14: tbs(); break; //Backspace
            case 69: tnum(); break; //NumLock
            case 59: tf1(); break; //F1
            case 31: status(); break; //s
        }
    }
    beenden=0;
    pthread_exit((void *) 0);
}

int main(int argc, char** argv)
{
    pthread_t t1;
    if(pthread_create(&t1, NULL, (void *)&tastatur, (void *)"Tastatur") != 0)
    {
      fprintf(stderr, "Fehler bei Tastatur......\n");
      exit(0);
    }  
    
    while (beenden > 0)
        {     sleep(1);
            zeit++;
            if (zeit==30)
            {
                zeit=0;
                printf("Wieder 30 Sekunden um.\n");
            }
    } 
    usleep(50);
    printf("***********Ende************\n");
    return 0;
}
Dieses Programm zeigt die Codes an, welche an einer AM RASPI ANGESCHLOSSENEN Tastatur gedrückten / losgelassenen Taste entspricht. Ein Beispiel mit F1 ohne und mit SHIFT habe ich eingefügt.

Das Programm wird mit q beendet. Als Startparameter muss das Device der Tastatur angegeben werden. Bei nur einer Tastatur reicht die zweite Zeile im Programmkopf zum Starten. Den Pfad (auch den zum zum kompilieren) natürlich anpassen.