Quiero crear un programa en C que acepte entradas de un joypad ( /dev/input/js0
), las procese y luego las envíe a un archivo de dispositivo falso (carácterobloque) etiquetado como un teclado (oh, y quées¿El archivo de dispositivo para un teclado? Me gustaría saber si es posible hacer esto y, de ser así, cómo.
Respuesta1
Mire de cerca un extracto de un ls -al /dev
comando en mi sistema:
brw-rw---- 1 root floppy 8, 0 Jun 7 19:55 sda
brw-rw---- 1 root floppy 8, 1 Jun 7 19:55 sda1
brw-rw---- 1 root floppy 8, 2 Jun 7 19:55 sda2
brw-rw---- 1 root floppy 8, 3 Jun 7 19:55 sda3
brw-rw---- 1 root floppy 8, 5 Jun 7 19:56 sda5
brw-rw---- 1 root floppy 8, 6 Jun 7 19:56 sda6
brw-rw---- 1 root floppy 8, 7 Jun 7 19:56 sda7
brw-rw---- 1 root floppy 8, 8 Jun 7 19:57 sda8
brw-rw---- 1 root floppy 8, 16 Jun 7 19:55 sdb
brw-rw---- 1 root floppy 8, 32 Jun 7 19:55 sdc
brw-rw---- 1 root floppy 8, 33 Jun 7 19:55 sdc1
brw-rw---- 1 root floppy 8, 34 Jun 11 10:39 sdc2
brw-rw---- 1 root floppy 8, 35 Jun 7 19:56 sdc3
Los dos números después del ID del grupo pero antes de la fecha son los números mayor y menor del archivo del dispositivo. Este es básicamente el "tipo" de dispositivo que es. 8 en este caso es una unidad de disco SCSI (o SCSI emulada).
http://lxr.linux.no/linux/Documentation/devices.txtes una lista algo no tan reciente de todos los números mayores y menores. No estoy seguro de la ubicación oficial de la última versión de la lista.
De todos modos, estos archivos se crean con el mknod
comando ( mknod [OPTION]... NAME TYPE [MAJOR MINOR]
, algunos tipos son b
para bloque, c
para carácter). También hay una mknod()
llamada al sistema. No conozco completamente las implicaciones si crea otro archivo con el mismo mayor/menor que un dispositivo existente.
uinput
como se describe en los comentarios es probablemente lo que está buscando, aunque en el hardware de la PC hay un /dev/psaux
que lee/escribe directamente en el puerto PS/2 si su sistema es lo suficientemente antiguo como para tener uno. Ni siquiera podría decirte por dónde empezar con los teclados USB...
Si solo desea un archivo de dispositivo falso y no le importa lo que suceda con los datos que le envía, siempre existe /dev/zero
. Además, los enlaces simbólicos pueden ser una solución realmente simple en ese caso.