By putting usb_modeswitch in verbose mode (flag EnableLogging in /etc/usb_modeswitch.conf), I was able to see that, when plugging the key after boot, usb_modeswitch gets the configuration file from the entry 12d1:1446 in /usr/share/usb_modeswitch/configPack.tar.gz.
USB_ModeSwitch log from Sun May 15 10:48:53 CEST 2011 raw args from udev: /2-1.2:1.0 Using global config file: /etc/usb_modeswitch.conf Bus ID for device not given by udev. Trying to determine it from kernel name (2-1.2:1.0) ... USB dir exists: /sys/bus/usb/devices/2-1.2 Warning: USB attribute "serial" not found. ---------------- USB values from sysfs: manufacturer HUAWEI Technology product HUAWEI Mobile serial ---------------- Found packed config collection /usr/share/usb_modeswitch/configPack.tar.gz Searching overriding entries named: /etc/usb_modeswitch.d/12d1:1446* SCSI attributes not needed, moving on checking config: 12d1:1446 Extracting config 12d1:1446 from collection /usr/share/usb_modeswitch/configPack.tar.gz ! matched, now switching (running command: /usr/sbin/usb_modeswitch -I -W -c /var/lib/usb_modeswitch/current_cfg) So I unpacked the entry in /etc/usb_modeswitch.d/ and put the following line in /etc/rc.local /usr/sbin/usb_modeswitch -I -W -c /etc/usb_modeswitch.d/12d1\:1446 This way the key works is correctly initialized at boot. What I don't understand is why usb_modeswitch is called by udev ("raw args from udev: /2-1.2:1.0") when the key is plugged in after boot while it doesn't appear to be called at boot.