[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

udev : création d'un périphérique pour ma tablette graphique



Bonjour,

J'ai une tablette wacom et je voudrais que son nom soit constant. Il varie de /dev/inout/event0 à /dev/input/event3 selon... l'humeur du système (bon, il doit bien y a voir une raie raison mais je n'ai pas trouvé).

J'ai donc réé une entrée /etc/udev/rules.d que j'ai appelé 'tablet" et qui contient :

BUS="usb", SYSFS{idVendor}="056a", SYSFS{idProduct}="0011", NAME="%k", SYMLINK="input/tablet"

056a:0111 est l'id USB de ma tablette.

dans /dev/input, il y a :
crw-------  1 root root 13, 64 2005-02-05 14:30 event0
crw-------  1 root root 13, 65 2005-02-05 14:30 event1
crw-------  1 root root 13, 66 2005-02-05 14:30 event2
crw-------  1 root root 13, 67 2005-02-05 14:30 event3
crw-------  1 root root 13, 63 2005-02-05 14:30 mice
crw-------  1 root root 13, 32 2005-02-05 14:30 mouse0
crw-------  1 root root 13, 33 2005-02-05 14:30 mouse1

dans ce cas, il me lie tablet à mouse0

J'ai fait un strace sur udevstart et il créé bien
d'abord* le bon lien (event1) puis ensuite le défait et le recréé pour les autres entrées, la dernière se voyant affctée à la tablette.

J'ai essyé de ruser en mettant un eligne comme :
BUS="usb", SYSFS{idVendor}="056a", SYSFS{idProduct}="0011", NAME="event%n", SYMLINK="input/tablet"

Il procède de même, il créé le lien vers event1 (celui que je souhaite) et ensuite le défait et termine alors par even0...


open("/sys/devices/pci0000:00/0000:00:10.0/usb1/1-1/idVendor", O_RDONLY) = 3
read(3, "056a\n", 4096)                 = 5
close(3)                                = 0

Ca, c'est mon idVendor

lstat64("/sys/class/input/event1/idProduct", 0xbfffcf9c) = -1 ENOENT (No such file or directory) open("/sys/class/input/event1", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3fstat64(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
getdents64(3, /* 5 entries */, 4096)    = 136
lstat64("/sys/class/input/event1/dev", {st_mode=S_IFREG|0444, st_size=4096, ...}) = 0 lstat64("/sys/class/input/event1/driver", {st_mode=S_IFLNK|0777, st_size=0, ...}) = 0 lstat64("/sys/class/input/event1/device", {st_mode=S_IFLNK|0777, st_size=0, ...}) = 0
getdents64(3, /* 0 entries */, 4096)    = 0
close(3)                                = 0
open("/sys/devices/pci0000:00/0000:00:10.0/usb1/1-1/idProduct", O_RDONLY) = 3
read(3, "0011\n", 4096)                 = 5
close(3)                                = 0


Ca c'est mon idVendor

(jusqu'ici tout va bien...)

[ ... ]

stat64("/dev/event1", {st_mode=S_IFCHR|0660, st_rdev=makedev(13, 65), ...}) = 0
chmod("/dev/event1", 020660)            = 0
stat64("/dev/input", {st_mode=S_IFDIR|0755, st_size=200, ...}) = 0
unlink("/dev/input/tablet")             = 0
symlink("../event1", "/dev/input/tablet") = 0

Hop ! il me créé le bon lien (content ;) )

chmod("/dev/event0", 020660)            = 0
stat64("/dev/input", {st_mode=S_IFDIR|0755, st_size=200, ...}) = 0
unlink("/dev/input/tablet")             = 0
symlink("../event0", "/dev/input/tablet") = 0
stat64("/dev/.udevdb", {st_mode=S_IFDIR|0755, st_size=23540, ...}) = 0
open("/dev/.udevdb/class@input@mouse0", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3

Et plus loin, il me défait le travail si bien commencé ....

event0 n'est lié à rien et event2 est mon clavier USB, event3? la souris

Si je ne mets pas NAME"event%n" masi NAME="%k", il me balaie tout ce qui se trouve dans /dev/input en commençant par le bon (!) et en terminant par mouse0 (sniff)

Une idée avant le BTS ?

Jean-Luc


Attachment: pgpdcR8TY2eC6.pgp
Description: PGP signature


Reply to: