One thing that annoys me with Debian and Linux distributions in +general, is that there is a great package management system with the +ability to automatically install software packages by downloading them +from the distribution mirrors, but no way to get it to automatically +install the packages I need to use the hardware I plug into my +machine. Even if the package to use it is easily available from the +Linux distribution. When I plug in a LEGO Mindstorms NXT, it could +suggest to automatically install the python-nxt, nbc and t2n packages +I need to talk to it. When I plug in a Yubikey, it could propose the +yubikey-personalization package. The information required to do this +is available, but no-one have pulled all the pieces together.
+ +Many years ago, I proposed to +use +the discover subsystem to implement this. The idea is fairly +simple: + +
-
+
+
- Add a desktop entry in /usr/share/autostart/ pointing to a program + starting when a user log in. + +
- Set this program up to listen for kernel events emitted when new + hardware is inserted into the computer. + +
- When new hardware is inserted, look up the hardware ID in a + database mapping to packages, and take note of any non-installed + packages. + +
- Show a message to the user proposing to install the discovered + package, and make it easy to install it. + +
I am not sure what the best way to implement this is, but my +initial idea was to use dbus events to discover new hardware, the +discover database to find packages and +PackageKit to install +packages.
+ +Yesterday, I found time to try to implement this idea, and the +draft package is now checked into +the +Debian Edu subversion repository. In the process, I updated the +discover-data +package to map the USB ids of LEGO Mindstorms and Yubikey devices to +the relevant packages in Debian, and uploaded a new version +2.2013.01.09 to unstable. I also discovered that the current +discover +package in Debian no longer discovered any USB devices, because +/proc/bus/usb/devices is no longer present. I ported it to use +libusb as a fall back option to get it working. The fixed package +version 2.1.2-6 is now in experimental (didn't upload it to unstable +because of the freeze).
+ +With this prototype in place, I can insert my Yubikey, and get this +desktop notification to show up (only once, the first time it is +inserted):
+ +For this prototype to be really useful, some way to automatically +install the proposed packages by pressing the "Please install +program(s)" button should to be implemented.
+ +If this idea seem useful to you, and you want to help make it +happen, please help me update the discover-data database with mappings +from hardware to Debian packages. Check if 'discover-pkginstall -l' +list the package you would like to have installed when a given +hardware device is inserted into your computer, and report bugs using +reportbug if it isn't. Or, if you know of a better way to provide +such mapping, please let me know.
+ +This prototype need more work, and there are several questions that +should be considered before it is ready for production use. Is dbus +the correct way to detect new hardware? At the moment I look for HAL +dbus events on the system bus, because that is the events I could see +on my Debian Squeeze KDE desktop. Are there better events to use? +How should the user be notified? Is the desktop notification +mechanism the best option, or should the background daemon raise a +popup instead? How should packages be installed? When should they +not be installed?
+ +If you want to help getting such feature implemented in Debian, +please send me an email. :)
+