2015-06-03 14 views
6

Ho un server in esecuzione in modalità multiutente che è collegato a una tastiera e un monitor. Su un computer separato, desidero eseguire SSH sul server ed eseguire un programma che acquisisce l'input dalla tastiera e stampa il testo sul monitor. La tastiera e il monitor non saranno mai utilizzati per altri scopi.Come posso acquisire eventi di tastiera e utilizzare un monitor come display di testo su Linux?

Al momento, all'avvio del server, sul monitor viene visualizzata una schermata di accesso (di testo). So che posso scrivere sul corrispondente dispositivo /dev/tty. Tuttavia, anche la tastiera scrive nello stesso punto.

Come posso acquisire eventi di tastiera e utilizzare un monitor come display di testo su Linux?

Potrei mancare alcune delle nozioni di base sull'interfaccia hardware su Linux. Cosa devo sapere?

Funzionando dal tempo di taglie - Se qualcuno vuole carne questo fuori ulteriormente sarò premio di conseguenza:

ho fatto quanto segue per evitare che tutti i programmi d'accesso a partire da:

systemctl mask [email protected] 
systemctl mask systemd-logind 
systemctl mask [email protected] 

allora sono si esegue il mio programma quando richiesto con:

openvt -c 1 -f /path/to/my/program 

Questa sarebbe una soluzione pienamente soddisfacente, tranne che per quel fastidioso -f. Che cosa è in esecuzione su tty1? C'è qualcosa che posso fare per fermarlo? Dovrei fermarlo?

In particolare, questa soluzione fa soddisfare tutte le mie esigenze - Per quanto ho capito, mi prendo il tty e quindi ottenere l'accesso al suo stdin (la ricezione di uscita dalla tastiera) e stdout (stampa per monitorare).

+0

Perché non basta che sshd esegua il programma appropriato all'accesso? –

+0

Puoi elaborare? Non vedo la connessione tra "come avviare il programma" e "come fa il programma a raggiungere i suoi obiettivi". – ToBeReplaced

+0

Oh, capisco. La tastiera e il monitor con cui si desidera interfacciarsi sono collegati al * server *. Ecco a cosa serve "openvt". –

risposta

2

Se si desidera accedere alla programmazione di basso livello, non è necessario gestire stdin o stdout. Parla direttamente con il dispositivo della tastiera e il dispositivo della console.

Dai un'occhiata al codice sorgente di input-events da input-utils. Usa dati grezzi per leggere tastiera, mouse o qualsiasi altro dispositivo di input.

Per evitare l'elaborazione standard della tastiera utilizza la modalitàafferrare (-g nella CLI), che si traduce in un:

ioctl(fd,EVIOCGRAB,1) 

nel descrittore file di dispositivo. La lettura degli eventi non elaborati da /dev/input/event* è più o meno immediata: , fai la cosa che vuoi e poi leggi le strutture struct input_event dal dispositivo.

Per scrivere alla console, se non si vuole fare confusione con la follia TTY, e ora che si è in modalità di basso livello, si può scegliere di scrivere direttamente a /dev/vcs, o /dev/vcsa per il colore (un per l'attributo attributo).

Fondamentalmente il vcs ha un byte per cella dello schermo che contiene il codice del carattere visualizzato. In vcs ci sono due byte: il carattere e gli attributi. Vedi man vcs per i dettagli.