Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Discussions


Index du Forum » Discussions » Erreurs de détection de calculatrices en USB sous Linux
Lephenixnoir En ligne Administrateur Points: 25909 Défis: 174 Message

Erreurs de détection de calculatrices en USB sous Linux

Posté le 16/08/2026 16:33

Ce matin ma Math+ n'est plus auto-détectée en USB sous Linux. Le périphérique existe (e.g. /dev/sda1), et je peux la monter à la main avec mount en ligne de commande, mais le périphérique n'est plus listé dans l'explorateur de fichiers et n'est plus détecté par fxlink.

Quitte à debugger ça et à y passer la journée, je voulais laisser quelque notes pour les gens qui auraient le même problème ou des problèmes similaires et cherchent des mots-clés.

TL;DR : C'est les I/O error et ma solution est de patcher libblkid dans util-linux comme un sagouin pour les ignorer.

fxlink utilise udisks2 pour lister les calculatrices et les auto-monter. udisksctl dump (ou monitor) permet de voir les propriétés des objets, et initialement la partition de la Math+ n'est pas détectée comme un système de fichiers (sortie abrégée):

% udisks dump
/org/freedesktop/UDisks2/block_devices/sda1: # Graph Math+
  org.freedesktop.UDisks2.Block:
    Drive:                      '/org/freedesktop/UDisks2/drives/CASIO_ColorGraph_0000mpLMb3D2'
    IdType:                    
    IdUsage:                    
    IdVersion:                  
    Size:                       4766208

/org/freedesktop/UDisks2/block_devices/sdb1: # Graph 90+E
  org.freedesktop.UDisks2.Block:
    Drive:                      '/org/freedesktop/UDisks2/drives/CASIO_ColorGraph_0000IGQcGRe9'
    IdType:                     vfat
    IdUsage:                    filesystem
    IdVersion:                  FAT16
    Size:                       16837632

J'ai creusé dans le code source de udisks et ultimement IdUsage est affecté à partir de la propriété ID_FS_USAGE déclarée par udev.

De fait, udev montre bien une différence de détection :

% sudo udevadm info --root --name=/dev/sda1 # Graph Math+
(...)
E: ID_PART_TABLE_TYPE=dos

% sudo udevadm info --root --name=/dev/sdb1 # Graph 90+E
(...)
E: ID_FS_VERSION=FAT16
E: ID_FS_BLOCKSIZE=4096
E: ID_FS_SIZE=16837632
E: ID_FS_TYPE=vfat
E: ID_FS_USAGE=filesystem
E: ID_PART_ENTRY_SCHEME=dos
E: ID_PART_ENTRY_TYPE=0xe
E: ID_PART_ENTRY_NUMBER=1
E: ID_PART_ENTRY_OFFSET=29
E: ID_PART_ENTRY_SIZE=32886
E: ID_PART_ENTRY_DISK=8:16

udev fait partie de systemd, donc pour le code c'est systemd. CalcLoverHK avait déjà identifié que la montée de version de systemd 260 à 261 déclenchait le problème pour lui, donc on approche sans doute. La ligne ID_FS_USAGE est générée à cet endroit à partir de la propriété "USAGE" d'un blkid_probe de libblkid. C'est cette lib qui est chargée de détecter le type des périphériques blocs ; blkid(8) pour plus d'infos.

Mais blkid détecte bien les deux périphériques :

% sudo blkid --probe /dev/sda1 # Graph Math+
/dev/sda1: SEC_TYPE="msdos" LABEL_FATBOOT="CASIO" VERSION="FAT12" FSBLOCKSIZE="4096" BLOCK_SIZE="512" FSSIZE="4766208" TYPE="vfat" USAGE="filesystem" PART_ENTRY_SCHEME="dos" PART_ENTRY_TYPE="0x1" PART_ENTRY_NUMBER="1" PART_ENTRY_OFFSET="29" PART_ENTRY_SIZE="9309" PART_ENTRY_DISK="8:0"

% sudo blkid --probe /dev/sdb1 # Garph 90+E
/dev/sdb1: SEC_TYPE="msdos" LABEL_FATBOOT="CASIO" VERSION="FAT16" FSBLOCKSIZE="4096" BLOCK_SIZE="512" FSSIZE="16837632" TYPE="vfat" USAGE="filesystem" PART_ENTRY_SCHEME="dos" PART_ENTRY_TYPE="0xe" PART_ENTRY_NUMBER="1" PART_ENTRY_OFFSET="29" PART_ENTRY_SIZE="32886" PART_ENTRY_DISK="8:16"

La fonction de udev qui invoque blkid étant un builtin, on peut également l'invoquer en ligne de commande. Et là, le résultat diffère selon le moment. Après avoir branché la calto, j'ai une erreur de permissions, mais monter manuellement avec mount donne le résultat attendu.

% sudo udevadm test-builtin blkid /dev/sda1 # Graph Math+
(...)
Loaded shared library 'libblkid.so.1' via dlopen().
sda1: Probe /dev/sda1 with raid and offset=0
sda1: Failed to probe superblocks: Operation not permitted
Builtin command 'blkid' fails: Operation not permitted

% sudo mount /dev/sda1 /mnt

% sudo udevadm test-builtin blkid /dev/sda1 # Graph Math+
(...)
Loaded shared library 'libblkid.so.1' via dlopen().
sda1: Probe /dev/sda1 with raid and offset=0
ID_FS_VERSION=FAT12
ID_FS_BLOCKSIZE=4096
ID_FS_SIZE=4766208
ID_FS_TYPE=vfat
ID_FS_USAGE=filesystem
ID_PART_ENTRY_SCHEME=dos
ID_PART_ENTRY_TYPE=0x1
ID_PART_ENTRY_NUMBER=1
ID_PART_ENTRY_OFFSET=29
ID_PART_ENTRY_SIZE=9309
ID_PART_ENTRY_DISK=8:0

blkid a un cache donc il est possible que les données aient été entrées dans le cache par le kernel au moment du montage.

Je note que "Operation not permitted" (EPERM) c'est pas le même genre d'erreur que l'habituel "Permission denied (EACCES), mais je n'en vois pas d'occurrence explicite dans libblkid, ça doit être un code d'erreur qui remonte d'un syscall.

Bon là ça devient technique mais après avoir bien fouillé, les logs de libblkid s'activent avec une variable d'environnement, et on peut rejouer l'application des règles udev avec udevadm test.

% sudo env LIBBLKID_DEBUG=lowprobe udevadm test /dev/sda1
(...)
Processing udev rules (verbose logs can be shown by -v/--verbose)...
sda1: /usr/lib/udev/rules.d/50-udev-default.rules:93 GROUP="disk": Set group ID: 995
sda1: /usr/lib/udev/rules.d/60-persistent-storage.rules:78 SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}$env{.PART_SUFFIX}": Added device node symlink "disk/by-id/usb-CASIO_ColorGraph_0000mpLMb3D2-0:0-part1".
sda1: /usr/lib/udev/rules.d/60-persistent-storage.rules:114 SYMLINK+="disk/by-path/$env{ID_PATH}$env{.PART_SUFFIX}": Added device node symlink "disk/by-path/pci-0000:c1:00.3-usb-0:2.3.3:1.0-scsi-0:0:0:0-part1".
sda1: /usr/lib/udev/rules.d/60-persistent-storage.rules:116 SYMLINK+="disk/by-path/$env{ID_PATH_WITH_USB_REVISION}$env{.PART_SUFFIX}": Added device node symlink "disk/by-path/pci-0000:c1:00.3-usbv2-0:2.3.3:1.0-scsi-0:0:0:0-part1".
sda1: /usr/lib/udev/rules.d/60-persistent-storage.rules:133 IMPORT{builtin}="blkid": Importing properties from results of builtin command "blkid".
3068011: libblkid:     INIT: library debug mask: 0x0102
3068011: libblkid:     INIT: library version: 2.42.2 [16-Jun-2026]
Loaded shared library 'libblkid.so.1' via dlopen().
3068011: libblkid: LOWPROBE: allocate a new probe
3068011: libblkid: LOWPROBE: zeroize wiper
3068011: libblkid: LOWPROBE: ready for low-probing, offset=0, size=4766208, zonesize=0, iosize=512
3068011: libblkid: LOWPROBE: whole-disk: NO, regfile: NO
sda1: Probe /dev/sda1 with raid and offset=0
3068011: libblkid: LOWPROBE: start probe
3068011: libblkid: LOWPROBE: zeroize wiper
3068011: libblkid: LOWPROBE: chain safeprobe superblocks ENABLED
3068011: libblkid: LOWPROBE: --> starting probing loop [SUBLKS idx=-1]
3068011: libblkid: LOWPROBE: [0] crypto_LUKS:
3068011: libblkid: LOWPROBE:     call probefunc()
3068011: libblkid: LOWPROBE:     read: off=0 len=512
3068011: libblkid: LOWPROBE: [1] linux_raid_member:
3068011: libblkid: LOWPROBE:     call probefunc()
3068011: libblkid: LOWPROBE:     read: off=4653056 len=512
3068011: libblkid: LOWPROBE:     read: off=4755456 len=512
3068011: libblkid: LOWPROBE:     read: off=4096 len=512
3068011: libblkid: LOWPROBE: [2] ddf_raid_member:
3068011: libblkid: LOWPROBE:     call probefunc()
3068011: libblkid: LOWPROBE:     read: off=4765696 len=512
3068011: libblkid: LOWPROBE:     read: off=4634624 len=512
3068011: libblkid: LOWPROBE: [3] isw_raid_member:
3068011: libblkid: LOWPROBE:     call probefunc()
3068011: libblkid: LOWPROBE: [4] lsi_mega_raid_member:
3068011: libblkid: LOWPROBE:     call probefunc()
3068011: libblkid: LOWPROBE: [5] via_raid_member:
3068011: libblkid: LOWPROBE:     call probefunc()
3068011: libblkid: LOWPROBE: [6] silicon_medley_raid_member:
3068011: libblkid: LOWPROBE:     call probefunc()
3068011: libblkid: LOWPROBE: [7] nvidia_raid_member:
3068011: libblkid: LOWPROBE:     call probefunc()
3068011: libblkid: LOWPROBE: [8] promise_fasttrack_raid_member:
3068011: libblkid: LOWPROBE:     call probefunc()
3068011: libblkid: LOWPROBE: [9] hpt45x_raid_member:
3068011: libblkid: LOWPROBE:     call probefunc()
3068011: libblkid: LOWPROBE: [10] hpt37x_raid_member:
3068011: libblkid: LOWPROBE:     read: off=4608 len=512
3068011: libblkid: LOWPROBE: [11] adaptec_raid_member:
3068011: libblkid: LOWPROBE:     call probefunc()
3068011: libblkid: LOWPROBE: [12] jmicron_raid_member:
3068011: libblkid: LOWPROBE:     call probefunc()
3068011: libblkid: LOWPROBE: [13] bcache:
3068011: libblkid: LOWPROBE: [14] bcachefs:
3068011: libblkid: LOWPROBE:     read: off=2097152 len=512
3068011: libblkid: LOWPROBE:     read: off=3717632 len=512
3068011: libblkid: LOWPROBE: [15] ceph_bluestore:
3068011: libblkid: LOWPROBE: [16] drbd:
3068011: libblkid: LOWPROBE:     read: off=4762112 len=512
3068011: libblkid: LOWPROBE: [17] drbdmanage_control_volume:
3068011: libblkid: LOWPROBE: [18] drbdproxy_datalog:
3068011: libblkid: LOWPROBE: [19] LVM2_member:
3068011: libblkid: LOWPROBE:     read: off=512 len=512
3068011: libblkid: LOWPROBE:     read: off=1024 len=512
3068011: libblkid: LOWPROBE:     read: off=1536 len=512
3068011: libblkid: LOWPROBE: [20] LVM1_member:
3068011: libblkid: LOWPROBE: [21] DM_snapshot_cow:
3068011: libblkid: LOWPROBE: [22] DM_verity_hash:
3068011: libblkid: LOWPROBE: [23] DM_integrity:
3068011: libblkid: LOWPROBE: [24] crypto_LUKS:
3068011: libblkid: LOWPROBE:     call probefunc()
3068011: libblkid: LOWPROBE: [25] VMFS_volume_member:
3068011: libblkid: LOWPROBE:     read: off=1048576 len=512
3068011: libblkid: LOWPROBE: [26] ubi:
3068011: libblkid: LOWPROBE: [27] vdo:
3068011: libblkid: LOWPROBE: [28] stratis:
3068011: libblkid: LOWPROBE: [29] BitLocker:
3068011: libblkid: LOWPROBE: [30] cs_fvault2:
3068011: libblkid: LOWPROBE: [31] vfat:
3068011: libblkid: LOWPROBE:     magic sboff=54, kboff=0
3068011: libblkid: LOWPROBE:     call probefunc()
3068011: libblkid: LOWPROBE:     look for label in root-dir (entries: 512, offset: 9728)
3068011: libblkid: LOWPROBE:     read: off=9728 len=16384
3068011: libblkid: LOWPROBE:     read failed: Success
3068011: libblkid: LOWPROBE: assigning SEC_TYPE [superblocks]
3068011: libblkid: LOWPROBE: assigning LABEL_FATBOOT [superblocks]
3068011: libblkid: LOWPROBE: assigning VERSION [superblocks]
3068011: libblkid: LOWPROBE: assigning FSBLOCKSIZE [superblocks]
3068011: libblkid: LOWPROBE: assigning BLOCK_SIZE [superblocks]
3068011: libblkid: LOWPROBE: assigning FSSIZE [superblocks]
3068011: libblkid: LOWPROBE: assigning TYPE [superblocks]
3068011: libblkid: LOWPROBE: assigning USAGE [superblocks]
3068011: libblkid: LOWPROBE: <-- leaving probing loop (type=vfat) [SUBLKS idx=31]
3068011: libblkid: LOWPROBE: saving superblocks values
3068011: libblkid: LOWPROBE: --> starting probing loop [SUBLKS idx=31]
3068011: libblkid: LOWPROBE: [32] swsuspend:
3068011: libblkid: LOWPROBE:     read: off=3584 len=512
3068011: libblkid: LOWPROBE:     read: off=7680 len=512
3068011: libblkid: LOWPROBE:     read: off=15872 len=512
3068011: libblkid: LOWPROBE:     read: off=32256 len=512
3068011: libblkid: LOWPROBE:     read failed: Input/output error
3068011: libblkid: LOWPROBE: <-- leaving probing loop (failed=-5) [SUBLKS idx=32]
3068011: libblkid: LOWPROBE: freeing values list
3068011: libblkid: LOWPROBE:  free value SEC_TYPE
3068011: libblkid: LOWPROBE:  free value LABEL_FATBOOT
3068011: libblkid: LOWPROBE:  free value VERSION
3068011: libblkid: LOWPROBE:  free value FSBLOCKSIZE
3068011: libblkid: LOWPROBE:  free value BLOCK_SIZE
3068011: libblkid: LOWPROBE:  free value FSSIZE
3068011: libblkid: LOWPROBE:  free value TYPE
3068011: libblkid: LOWPROBE:  free value USAGE
3068011: libblkid: LOWPROBE: end probe
3068011: libblkid: LOWPROBE: zeroize wiper
sda1: Failed to probe superblocks: Operation not permitted
3068011: libblkid: LOWPROBE:  buffers summary: 8704 bytes by 17 read() calls
3068011: libblkid: LOWPROBE: free probe
sda1: /usr/lib/udev/rules.d/60-persistent-storage.rules:133 IMPORT{builtin}="blkid": Failed to run builtin "blkid": Operation not permitted
sda1: /usr/lib/udev/rules.d/60-persistent-storage.rules:152 SYMLINK+="disk/by-path/$env{ID_PATH}-part/by-partnum/%n": Added device node symlink "disk/by-path/pci-0000:c1:00.3-usb-0:2.3.3:1.0-scsi-0:0:0:0-part/by-partnum/1".
sda1: /usr/lib/udev/rules.d/60-persistent-storage.rules:164 SYMLINK+="disk/by-diskseq/$env{DISKSEQ}$env{.PART_SUFFIX}": Added device node symlink "disk/by-diskseq/81-part1".
Processing udev rules done.
(...)

Notez que le disque est identifié comme FAT à [31], mais durant la suite des tests sur [32] swsuspend une erreur de lecture se produit et donne failed=-5 (EIO 5 I/O Error). Le EPERM est probablement faux (e.g. confusion avec valeur d'erreur -1 venant d'ailleurs).

Et c'est là l'explication donc, les I/O Error sans fin de la calto nous rattrapent. Pour contexte, les caltos en USB font des I/O Error tout le temps, en voici un sample (ci-dessous dmesg lors de la connection) :

[  +0.000291] scsi host0: usb-storage 1-2.3.3:1.0
[  +1.046329] scsi 0:0:0:0: Direct-Access     CASIO    ColorGraph       1.00 PQ: 0 ANSI: 0 CCS
[  +0.000757] sd 0:0:0:0: Attached scsi generic sg0 type 0
[  +0.001665] sd 0:0:0:0: [sda] 32915 512-byte logical blocks: (16.9 MB/16.1 MiB)
[  +0.000290] sd 0:0:0:0: [sda] Write Protect is off
[  +0.000007] sd 0:0:0:0: [sda] Mode Sense: 07 00 00 08
[  +0.000165] sd 0:0:0:0: [sda] No Caching mode page found
[  +0.000005] sd 0:0:0:0: [sda] Assuming drive cache: write through
[  +0.029237]  sda: sda1
[  +0.000189] sd 0:0:0:0: [sda] Attached SCSI removable disk
[  +0.023962] scsi_io_completion_action: 6 callbacks suppressed
[  +0.000007] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK cmd_age=0s
[  +0.000006] sd 0:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 00 00 00 20 00 00 18 00
[  +0.000003] blk_print_req_error: 6 callbacks suppressed
[  +0.000001] I/O error, dev sda, sector 32 op 0x0:(READ) flags 0x880700 phys_seg 3 prio class 2
[  +0.007333] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK cmd_age=0s
[  +0.000006] sd 0:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 00 00 00 40 00 00 38 00
[  +0.000003] I/O error, dev sda, sector 64 op 0x0:(READ) flags 0x80700 phys_seg 7 prio class 2
[  +0.030848] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK cmd_age=0s
[  +0.000011] sd 0:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 00 00 00 80 00 00 f0 00
[  +0.000005] I/O error, dev sda, sector 128 op 0x0:(READ) flags 0x84700 phys_seg 30 prio class 2
[  +0.016601] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK cmd_age=0s
[  +0.000012] sd 0:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 00 00 01 70 00 00 80 00
[  +0.000005] I/O error, dev sda, sector 368 op 0x0:(READ) flags 0x80700 phys_seg 16 prio class 2
[  +0.126252] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK cmd_age=0s
[  +0.000011] sd 0:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 00 00 01 f0 00 00 10 00
[  +0.000006] I/O error, dev sda, sector 496 op 0x0:(READ) flags 0x880700 phys_seg 2 prio class 2
[  +0.028607] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK cmd_age=0s
[  +0.000007] sd 0:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 00 00 00 1d 00 00 20 00
[  +0.000003] I/O error, dev sda, sector 29 op 0x0:(READ) flags 0x880700 phys_seg 4 prio class 2
[  +0.030409] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK cmd_age=0s
[  +0.000012] sd 0:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 00 00 00 3d 00 00 40 00
[  +0.000006] I/O error, dev sda, sector 61 op 0x0:(READ) flags 0x80700 phys_seg 2 prio class 2
[  +0.036291] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK cmd_age=0s
[  +0.000014] sd 0:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 00 00 00 7d 00 00 80 00
[  +0.000006] I/O error, dev sda, sector 125 op 0x0:(READ) flags 0x80700 phys_seg 3 prio class 2
[  +0.085522] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK cmd_age=0s
[  +0.000008] sd 0:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 00 00 00 3d 00 00 20 00
[  +0.000004] I/O error, dev sda, sector 61 op 0x0:(READ) flags 0x800000 phys_seg 32 prio class 2
[  +0.000007] buffer_io_error: 564 callbacks suppressed
[  +0.000002] Buffer I/O error on dev sda1, logical block 32, async page read
[  +0.000005] Buffer I/O error on dev sda1, logical block 33, async page read
[  +0.000003] Buffer I/O error on dev sda1, logical block 34, async page read
[  +0.000003] Buffer I/O error on dev sda1, logical block 35, async page read
[  +0.000002] Buffer I/O error on dev sda1, logical block 36, async page read
[  +0.000003] Buffer I/O error on dev sda1, logical block 37, async page read
[  +0.000003] Buffer I/O error on dev sda1, logical block 38, async page read
[  +0.000003] Buffer I/O error on dev sda1, logical block 39, async page read
[  +0.000002] Buffer I/O error on dev sda1, logical block 40, async page read
[  +0.000020] Buffer I/O error on dev sda1, logical block 41, async page read

Ça a toujours été, et jamais été un problème (encore que les "Buffer I/O" je les reconnais pas, c'est peut-être nouveau/ça). Mais là ça se met à tomber pile sur les requêtes de libblkid et donc libblkid abandonne avant de renvoyer son résultat, qui est que c'est un système de fichiers FAT x3

Je vous passe les détails, mais j'ai réussi à patcher libblkid pour que ces erreurs soient ignorées. Ça pourrait avoir euh... des effets involontaires donc à utiliser à vos risque et périls, enfin moi ça m'empêchera pas de dormir la nuit d'avoir ça sur mon système.

Patch : libblkid.patch (zippé)

Comment l'utiliser dépendra de votre distro ; dans mon cas sous Arch Linux, en gros :

1. yay -G util-linux et modifier le PKGBUILD
2. Appliquer le patch dans prepare()
3. Commenter les tests dans check() (trop lent)
4. makepkg -fsi (après plusieurs fois install plante stupidement, auquel cas faut deep clean)
5. Tester avec blkid(8) et udevadm test
6. systemctl restart systemd-udevd une fois que c'est bon

Voilà en fin de compte c'est bordélique mais ma calto remarche~

Fichier joint



LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
captcha
Rafraîchissez la page si vous souhaitez obtenir un nouveau CAPTCHA.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2026 | Il y a 169 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd