OVH Cloud OVH Cloud

Installation

2 réponses
Avatar
G.Delafond
Bonjour !

J'ai récupéré une clé de verrouillage PC USB publicitaire, fournie avec CD
Windows, comme toujours.

Il s'agit d'une petite clé USB + un émetteur.

Lorsque le porteur de l'émetteur s'éloigne à plus de 2 m de l'ordi (avec le
programme résidant installé), il se met en veille. La remise en route
nécessite d'approcher à nouveau l'émetteur de la clé USB ou de taper un
code.

Lorsque je connecte le bidule à ma Linux Box, il est trouvé comme

Bus 001 Device 005: ID 13b7:7417

Le bazar de configuration de Mandriva me trouve ça :

Connexion
Bus: ?USB
Bus PCI n°: ?1
Périphérique PCI n°: ?7
Identifiant du Vendeur: ?5047
Identifiant du périphérique: ?29719

Divers
Vendeur: ?KeyMark Semi.
Description: ?Wireless PC Lock
Classe de matériel: ?Human Interface Devices|Boot Interface Subclass|Mouse

Module: ?usbmouse

(Curieusement, il est trouvé comme souris, et les numéros ne correspondent
pas à ceux donnés par lsusb ou /proc/bus/usb/devices, ce qui est habituel
dans la config Mandriva)

Je me demande si ce bazar peut fonctionner sous Linux. Enfin, c'est par pure
curiosité, parce que je n'en ai pas vraiment besoin...
Si quelqu'un se sent capable de le hacker, je peux le lui prêter.
--
G.Delafond
http://www.delafond.org

2 réponses

Avatar
Julien Salgado
G.Delafond a écrit(wrote):
Bonjour !



Bonsoir,

J'ai récupéré une clé de verrouillage PC USB publicitaire, fournie avec CD
Windows, comme toujours.

Il s'agit d'une petite clé USB + un émetteur.

Lorsque le porteur de l'émetteur s'éloigne à plus de 2 m de l'ordi (avec le
programme résidant installé), il se met en veille. La remise en route
nécessite d'approcher à nouveau l'émetteur de la clé USB ou de taper un
code.

Lorsque je connecte le bidule à ma Linux Box, il est trouvé comme

Bus 001 Device 005: ID 13b7:7417

Le bazar de configuration de Mandriva me trouve ça :

Connexion
Bus: ?USB
Bus PCI n°: ?1
Périphérique PCI n°: ?7
Identifiant du Vendeur: ?5047
Identifiant du périphérique: ?29719

Divers
Vendeur: ?KeyMark Semi.
Description: ?Wireless PC Lock
Classe de matériel: ?Human Interface Devices|Boot Interface Subclass|Mouse

Module: ?usbmouse

(Curieusement, il est trouvé comme souris, et les numéros ne correspondent
pas à ceux donnés par lsusb ou /proc/bus/usb/devices, ce qui est habituel
dans la config Mandriva)


Il n'y a que ceux de /proc/bus/usb/devices qui compte (ou ceux de lsusb
vu qu'il ne fait que d'afficher sous forme plus lisible le contenu).

Je me demande si ce bazar peut fonctionner sous Linux. Enfin, c'est par pure
curiosité, parce que je n'en ai pas vraiment besoin...
Si quelqu'un se sent capable de le hacker, je peux le lui prêter.


Pourquoi pas... il faut savoir quels sont les évenements associés. Je
suppose que c'est juste un seuil lié à la puissance d'un signal. La clef
envoie peut-être des informations sur la puissance du signal. Un petit
coup de usbmon fait par un courageux (pas moi) pourrait aider.

--
Julien

Avatar
l'indien
On Mon, 19 Sep 2005 12:11:23 +0200, G.Delafond wrote:

Bonjour !

J'ai récupéré une clé de verrouillage PC USB publicitaire, fournie avec CD
Windows, comme toujours.

Il s'agit d'une petite clé USB + un émetteur.

Lorsque le porteur de l'émetteur s'éloigne à plus de 2 m de l'ordi (avec le
programme résidant installé), il se met en veille. La remise en route
nécessite d'approcher à nouveau l'émetteur de la clé USB ou de taper un
code.

Lorsque je connecte le bidule à ma Linux Box, il est trouvé comme

Bus 001 Device 005: ID 13b7:7417

Le bazar de configuration de Mandriva me trouve ça :

Connexion
Bus: ?USB
Bus PCI n°: ?1
Périphérique PCI n°: ?7
Identifiant du Vendeur: ?5047
Identifiant du périphérique: ?29719

Divers
Vendeur: ?KeyMark Semi.
Description: ?Wireless PC Lock
Classe de matériel: ?Human Interface Devices|Boot Interface Subclass|Mouse

Module: ?usbmouse

(Curieusement, il est trouvé comme souris, et les numéros ne correspondent
pas à ceux donnés par lsusb ou /proc/bus/usb/devices, ce qui est habituel
dans la config Mandriva)

Je me demande si ce bazar peut fonctionner sous Linux.


Oui. C'est un device HID standard donc il fonctionnera.
Pour récupérer les évènements, il suffit de faire un petit programme
qui lit /dev/input/hid<n> (ou n est le numéro de la "souris") et de
dumper les évènements.
Voici un petit exemple:

/*
* LPGL code Copyright 2003 by J. Mayer
*/

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/input.h>

#define TICK_PER_SEC (100)
#define MS(n) (n * TICK_PER_SEC / 1000)

#define BITS_PER_LONG (sizeof(unsigned long) * 8)
#define NBITS(x) ((((x) - 1) / BITS_PER_LONG) + 1)

static __inline__ int test_bit(int nr, const volatile void * addr)
{
return ((1UL << (nr & 31)) &
(((const volatile unsigned int *)addr)[nr >> 5])) != 0;
}

static volatile unsigned int ticks;

int main (int argc, char **argv)
{
struct input_event event;
struct timeval timeout;
fd_set fdset;
unsigned char *event_type_names[EV_MAX] = { NULL, };
unsigned long bits[NBITS(KEY_MAX)];
unsigned char name[256];
unsigned short ids[4];
const char *device;
int fd;
int i;
int ret;

if (argc != 2) {
fprintf(stderr, "Bad number of argumentsn");
return 1;
}
device = argv[1];
fd = open(device, O_RDONLY);
if (fd < 0) {
fprintf(stderr, "Open - %s: %mn", device);
return 1;
}
/* Get device's ID */
if (ioctl(fd, EVIOCGID, ids) < 0) {
fprintf(stderr, "EVIOCGID - %s: %mn", device);
return 1;
}
/* Get device's name */
if (ioctl(fd, EVIOCGNAME(256), name) < 0) {
fprintf(stderr, "EVIOCGNAME - %s: %mn", device);
return 1;
}
printf("Bus: %04x Vendor: %04x Product: %04x Version: %04xn"
"name: %sn", ids[0], ids[1], ids[2], ids[3], name);
/* Get events types */
memset(bits, 0, NBITS(0x1FF) * sizeof(unsigned long));
if (ioctl(fd,
EVIOCGBIT(0, NBITS(0x1FF) * sizeof(unsigned long)), bits) < 0) {
fprintf(stderr, "EVIOCGNAME - %s: %mn", device);
return 1;
}
event_type_names[EV_RST] = "Reset";
event_type_names[EV_KEY] = "Key";
event_type_names[EV_REL] = "Relative";
event_type_names[EV_ABS] = "Absolute";
event_type_names[EV_MSC] = "Misc";
event_type_names[EV_LED] = "Led";
event_type_names[EV_SND] = "Sound";
event_type_names[EV_REP] = "Autorepeat";
event_type_names[EV_FF] = "Effects";


for (i = 0; i < EV_MAX; i++) {
if (test_bit(i, bits)) {
if (event_type_names[i] != NULL)
printf("Handle: %sn", event_type_names[i]);
else
printf("Handle unknown (%d)n", i);
}
}
/* Wait for events */
while (1) {
FD_ZERO(&fdset);
FD_SET(fd, &fdset);
timeout.tv_sec = 0;
timeout.tv_usec = 1000 * 1000 / TICK_PER_SEC;
ret = select(fd + 1, &fdset, NULL, NULL, &timeout);
ticks++;
if (ret > 0) {
read(fd, &event, sizeof(struct input_event));
printf("Got event type: %d code: %d value: %dn",
event.type, event.code, event.value);
switch (event.type) {
case EV_KEY:
handle_key_event(event.code, event.value, &event.time);
break;
case EV_REL:
handle_relative_event(event.code, event.value, &event.time);
break;
case EV_ABS:
handle_absolute_event(event.code, event.value, &event.time);
break;
case EV_MSC:
handle_misc_event(event.code, event.value, &event.time);
break;
case EV_LED:
handle_led_event(event.code, event.value, &event.time);
break;
case EV_SND:
handle_sound_event(event.code, event.value, &event.time);
break;
case EV_REP:
handle_repeat_event(event.code, event.value, &event.time);
break;
case EV_FF:
handle_effects_event(event.code, event.value, &event.time);
break;
default:
printf("Got unknown event type: %d code: %d value: %dn",
event.type, event.code, event.value);
break;
}
}
}

return 0;
}

chaque fonction handle_xxx_event étant du style:

static void handle_xxx_event (unsigned short code, unsigned int value,
struct timeval *timestamp)
{
printf("get event %s : %d %dn", __func__, code, value);
}