2012-03-19 9 views
5

Che cosa è un infallibile metodo diper trovare il nodo del dispositivo evento per l'hardware tastiera o del mouse?Trova dispositivo di eventi per la tastiera, il mouse

Quello che ho cercato è quello di leggere /proc/bus/input/dispositivi e la ricerca di 'tastiera' o 'Mouse' nel nome del dispositivo, ma questo non funziona sempre, come il i nomi dei dispositivi variano molto.

L'altra opzione era quella di selezionare quelli con gestori = kbd e gestori = mouseX, ma su un computer portatile, ci sono altri dispositivi come pulsante 'Power', 'bus Video' con gestori = kbd pure.

risposta

0

Tutti i dispositivi di input hanno il valore &input_class nel campo dev->class. Quindi puoi scorrere su tutti i dispositivi e controllare (dev->class == &input_class). Successivamente, per ogni dispositivo di input che hai trovato dovrai vedere se ha un nome valido per la tastiera/il mouse (per esempio "mouse", "mouse% d", ecc.).

+0

I nomi dei dispositivi variano molto e non necessariamente contenere le parole mouse, mouse o tastiera! – vikraman

0

Questo è ad esempio per trovare eventi di tastiera:

const std::string get_dev_event_kbd() 
{ 
    std::string sline, sdev="/dev/input/", sH="", sBEV=""; 
    std::ifstream ifs("/proc/bus/input/devices"); 
    auto trimstr=[](std::string &s) 
    { 
     int i=0, n=s.length(); //left 
     while ((i<n)&&((s[i]==' ')||(s[i]=='\t'))) i++; 
     s=(i>0)?s.substr(i):s; 
     n=s.length()-1; i=n; //right 
     while ((i>0)&&((s[i]==' ')||(s[i]=='\t')||(s[i]=='\n')||(s[i]=='\r'))) i--; 
     s=(i<n)?s.substr(0,i+1):s; 
    }; 

    while (std::getline(ifs,sline).good()) 
    { 
     if (sline[0]=='H') 
     { 
      sH=sline.substr(sline.rfind(" event")); 
      trimstr(sH); 
     } 
     if (sline.substr(0,5)=="B: EV") 
     { 
      sBEV=sline.substr(sline.find('=')+1); 
      trimstr(sBEV); 
     } 
     if (sBEV=="120013") break; 
    } 
    sdev+=sH; 
    return sdev; 
} 

See: this e this per maggiori dettagli. Inoltre, se si verifica un errore 13 (Autorizzazione negata) quando si esegue open() sul dispositivo, verificare se il gruppo "input" è definito per esso e aggiungere l'utente al gruppo

Problemi correlati