]> pere.pagekite.me Git - homepage.git/blob - blog/tags/isenkram/index.html
e295f7a9075ec6d52c267a7113c6604758aa655c
[homepage.git] / blog / tags / isenkram / index.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
4 <head>
5 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
6 <title>Petter Reinholdtsen: Entries Tagged isenkram</title>
7 <link rel="stylesheet" type="text/css" media="screen" href="http://people.skolelinux.org/pere/blog/style.css" />
8 <link rel="stylesheet" type="text/css" media="screen" href="http://people.skolelinux.org/pere/blog/vim.css" />
9 <link rel="alternate" title="RSS Feed" href="isenkram.rss" type="application/rss+xml" />
10 </head>
11 <body>
12 <div class="title">
13 <h1>
14 <a href="http://people.skolelinux.org/pere/blog/">Petter Reinholdtsen</a>
15
16 </h1>
17
18 </div>
19
20
21 <h3>Entries tagged "isenkram".</h3>
22
23 <div class="entry">
24 <div class="title">
25 <a href="http://people.skolelinux.org/pere/blog/What_is_the_most_supported_MIME_type_in_Debian_in_2018_.html">What is the most supported MIME type in Debian in 2018?</a>
26 </div>
27 <div class="date">
28 9th July 2018
29 </div>
30 <div class="body">
31 <p>Five years ago,
32 <a href="http://people.skolelinux.org/pere/blog/What_is_the_most_supported_MIME_type_in_Debian_.html">I
33 measured what the most supported MIME type in Debian was</a>, by
34 analysing the desktop files in all packages in the archive. Since
35 then, the DEP-11 AppStream system has been put into production, making
36 the task a lot easier. This made me want to repeat the measurement,
37 to see how much things changed. Here are the new numbers, for
38 unstable only this time:
39
40 <p><strong>Debian Unstable:</strong></p>
41
42 <pre>
43 count MIME type
44 ----- -----------------------
45 56 image/jpeg
46 55 image/png
47 49 image/tiff
48 48 image/gif
49 39 image/bmp
50 38 text/plain
51 37 audio/mpeg
52 34 application/ogg
53 33 audio/x-flac
54 32 audio/x-mp3
55 30 audio/x-wav
56 30 audio/x-vorbis+ogg
57 29 image/x-portable-pixmap
58 27 inode/directory
59 27 image/x-portable-bitmap
60 27 audio/x-mpeg
61 26 application/x-ogg
62 25 audio/x-mpegurl
63 25 audio/ogg
64 24 text/html
65 </pre>
66
67 <p>The list was created like this using a sid chroot: "cat
68 /var/lib/apt/lists/*sid*_dep11_Components-amd64.yml.gz| zcat | awk '/^
69 - \S+\/\S+$/ {print $2 }' | sort | uniq -c | sort -nr | head -20"</p>
70
71 <p>It is interesting to see how image formats have passed text/plain
72 as the most announced supported MIME type. These days, thanks to the
73 AppStream system, if you run into a file format you do not know, and
74 want to figure out which packages support the format, you can find the
75 MIME type of the file using "file --mime &lt;filename&gt;", and then
76 look up all packages announcing support for this format in their
77 AppStream metadata (XML or .desktop file) using "appstreamcli
78 what-provides mimetype &lt;mime-type&gt;. For example if you, like
79 me, want to know which packages support inode/directory, you can get a
80 list like this:</p>
81
82 <p><blockquote><pre>
83 % appstreamcli what-provides mimetype inode/directory | grep Package: | sort
84 Package: anjuta
85 Package: audacious
86 Package: baobab
87 Package: cervisia
88 Package: chirp
89 Package: dolphin
90 Package: doublecmd-common
91 Package: easytag
92 Package: enlightenment
93 Package: ephoto
94 Package: filelight
95 Package: gwenview
96 Package: k4dirstat
97 Package: kaffeine
98 Package: kdesvn
99 Package: kid3
100 Package: kid3-qt
101 Package: nautilus
102 Package: nemo
103 Package: pcmanfm
104 Package: pcmanfm-qt
105 Package: qweborf
106 Package: ranger
107 Package: sirikali
108 Package: spacefm
109 Package: spacefm
110 Package: vifm
111 %
112 </pre></blockquote></p>
113
114 <p>Using the same method, I can quickly discover that the Sketchup file
115 format is not yet supported by any package in Debian:</p>
116
117 <p><blockquote><pre>
118 % appstreamcli what-provides mimetype application/vnd.sketchup.skp
119 Could not find component providing 'mimetype::application/vnd.sketchup.skp'.
120 %
121 </pre></blockquote></p>
122
123 <p>Yesterday I used it to figure out which packages support the STL 3D
124 format:</p>
125
126 <p><blockquote><pre>
127 % appstreamcli what-provides mimetype application/sla|grep Package
128 Package: cura
129 Package: meshlab
130 Package: printrun
131 %
132 </pre></blockquote></p>
133
134 <p>PS: A new version of Cura was uploaded to Debian yesterday.</p>
135
136 <p>As usual, if you use Bitcoin and want to show your support of my
137 activities, please send Bitcoin donations to my address
138 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
139
140 </div>
141 <div class="tags">
142
143
144 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
145
146
147 </div>
148 </div>
149 <div class="padding"></div>
150
151 <div class="entry">
152 <div class="title">
153 <a href="http://people.skolelinux.org/pere/blog/Appstream_just_learned_how_to_map_hardware_to_packages_too_.html">Appstream just learned how to map hardware to packages too!</a>
154 </div>
155 <div class="date">
156 23rd December 2016
157 </div>
158 <div class="body">
159 <p>I received a very nice Christmas present today. As my regular
160 readers probably know, I have been working on the
161 <a href="http://packages.qa.debian.org/isenkram">the Isenkram
162 system</a> for many years. The goal of the Isenkram system is to make
163 it easier for users to figure out what to install to get a given piece
164 of hardware to work in Debian, and a key part of this system is a way
165 to map hardware to packages. Isenkram have its own mapping database,
166 and also uses data provided by each package using the AppStream
167 metadata format. And today,
168 <a href="https://tracker.debian.org/pkg/appstream">AppStream</a> in
169 Debian learned to look up hardware the same way Isenkram is doing it,
170 ie using fnmatch():</p>
171
172 <p><pre>
173 % appstreamcli what-provides modalias \
174 usb:v1130p0202d0100dc00dsc00dp00ic03isc00ip00in00
175 Identifier: pymissile [generic]
176 Name: pymissile
177 Summary: Control original Striker USB Missile Launcher
178 Package: pymissile
179 % appstreamcli what-provides modalias usb:v0694p0002d0000
180 Identifier: libnxt [generic]
181 Name: libnxt
182 Summary: utility library for talking to the LEGO Mindstorms NXT brick
183 Package: libnxt
184 ---
185 Identifier: t2n [generic]
186 Name: t2n
187 Summary: Simple command-line tool for Lego NXT
188 Package: t2n
189 ---
190 Identifier: python-nxt [generic]
191 Name: python-nxt
192 Summary: Python driver/interface/wrapper for the Lego Mindstorms NXT robot
193 Package: python-nxt
194 ---
195 Identifier: nbc [generic]
196 Name: nbc
197 Summary: C compiler for LEGO Mindstorms NXT bricks
198 Package: nbc
199 %
200 </pre></p>
201
202 <p>A similar query can be done using the combined AppStream and
203 Isenkram databases using the isenkram-lookup tool:</p>
204
205 <p><pre>
206 % isenkram-lookup usb:v1130p0202d0100dc00dsc00dp00ic03isc00ip00in00
207 pymissile
208 % isenkram-lookup usb:v0694p0002d0000
209 libnxt
210 nbc
211 python-nxt
212 t2n
213 %
214 </pre></p>
215
216 <p>You can find modalias values relevant for your machine using
217 <tt>cat $(find /sys/devices/ -name modalias)</tt>.
218
219 <p>If you want to make this system a success and help Debian users
220 make the most of the hardware they have, please
221 help<a href="https://wiki.debian.org/AppStream/Guidelines">add
222 AppStream metadata for your package following the guidelines</a>
223 documented in the wiki. So far only 11 packages provide such
224 information, among the several hundred hardware specific packages in
225 Debian. The Isenkram database on the other hand contain 101 packages,
226 mostly related to USB dongles. Most of the packages with hardware
227 mapping in AppStream are LEGO Mindstorms related, because I have, as
228 part of my involvement in
229 <a href="https://wiki.debian.org/LegoDesigners">the Debian LEGO
230 team</a> given priority to making sure LEGO users get proposed the
231 complete set of packages in Debian for that particular hardware. The
232 team also got a nice Christmas present today. The
233 <a href="https://tracker.debian.org/pkg/nxt-firmware">nxt-firmware
234 package</a> made it into Debian. With this package in place, it is
235 now possible to use the LEGO Mindstorms NXT unit with only free
236 software, as the nxt-firmware package contain the source and firmware
237 binaries for the NXT brick.</p>
238
239 <p>As usual, if you use Bitcoin and want to show your support of my
240 activities, please send Bitcoin donations to my address
241 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
242
243 </div>
244 <div class="tags">
245
246
247 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
248
249
250 </div>
251 </div>
252 <div class="padding"></div>
253
254 <div class="entry">
255 <div class="title">
256 <a href="http://people.skolelinux.org/pere/blog/Isenkram_updated_with_a_lot_more_hardware_package_mappings.html">Isenkram updated with a lot more hardware-package mappings</a>
257 </div>
258 <div class="date">
259 20th December 2016
260 </div>
261 <div class="body">
262 <p><a href="http://packages.qa.debian.org/isenkram">The Isenkram
263 system</a> I wrote two years ago to make it easier in Debian to find
264 and install packages to get your hardware dongles to work, is still
265 going strong. It is a system to look up the hardware present on or
266 connected to the current system, and map the hardware to Debian
267 packages. It can either be done using the tools in isenkram-cli or
268 using the user space daemon in the isenkram package. The latter will
269 notify you, when inserting new hardware, about what packages to
270 install to get the dongle working. It will even provide a button to
271 click on to ask packagekit to install the packages.</p>
272
273 <p>Here is an command line example from my Thinkpad laptop:</p>
274
275 <p><pre>
276 % isenkram-lookup
277 bluez
278 cheese
279 ethtool
280 fprintd
281 fprintd-demo
282 gkrellm-thinkbat
283 hdapsd
284 libpam-fprintd
285 pidgin-blinklight
286 thinkfan
287 tlp
288 tp-smapi-dkms
289 tp-smapi-source
290 tpb
291 %
292 </pre></p>
293
294 <p>It can also list the firware package providing firmware requested
295 by the load kernel modules, which in my case is an empty list because
296 I have all the firmware my machine need:
297
298 <p><pre>
299 % /usr/sbin/isenkram-autoinstall-firmware -l
300 info: did not find any firmware files requested by loaded kernel modules. exiting
301 %
302 </pre></p>
303
304 <p>The last few days I had a look at several of the around 250
305 packages in Debian with udev rules. These seem like good candidates
306 to install when a given hardware dongle is inserted, and I found
307 several that should be proposed by isenkram. I have not had time to
308 check all of them, but am happy to report that now there are 97
309 packages packages mapped to hardware by Isenkram. 11 of these
310 packages provide hardware mapping using AppStream, while the rest are
311 listed in the modaliases file provided in isenkram.</p>
312
313 <p>These are the packages with hardware mappings at the moment. The
314 <strong>marked packages</strong> are also announcing their hardware
315 support using AppStream, for everyone to use:</p>
316
317 <p>air-quality-sensor, alsa-firmware-loaders, argyll,
318 <strong>array-info</strong>, avarice, avrdude, b43-fwcutter,
319 bit-babbler, bluez, bluez-firmware, <strong>brltty</strong>,
320 <strong>broadcom-sta-dkms</strong>, calibre, cgminer, cheese, colord,
321 <strong>colorhug-client</strong>, dahdi-firmware-nonfree, dahdi-linux,
322 dfu-util, dolphin-emu, ekeyd, ethtool, firmware-ipw2x00, fprintd,
323 fprintd-demo, <strong>galileo</strong>, gkrellm-thinkbat, gphoto2,
324 gpsbabel, gpsbabel-gui, gpsman, gpstrans, gqrx-sdr, gr-fcdproplus,
325 gr-osmosdr, gtkpod, hackrf, hdapsd, hdmi2usb-udev, hpijs-ppds, hplip,
326 ipw3945-source, ipw3945d, kde-config-tablet, kinect-audio-setup,
327 <strong>libnxt</strong>, libpam-fprintd, <strong>lomoco</strong>,
328 madwimax, minidisc-utils, mkgmap, msi-keyboard, mtkbabel,
329 <strong>nbc</strong>, <strong>nqc</strong>, nut-hal-drivers, ola,
330 open-vm-toolbox, open-vm-tools, openambit, pcgminer, pcmciautils,
331 pcscd, pidgin-blinklight, printer-driver-splix,
332 <strong>pymissile</strong>, python-nxt, qlandkartegt,
333 qlandkartegt-garmin, rosegarden, rt2x00-source, sispmctl,
334 soapysdr-module-hackrf, solaar, squeak-plugins-scratch, sunxi-tools,
335 <strong>t2n</strong>, thinkfan, thinkfinger-tools, tlp, tp-smapi-dkms,
336 tp-smapi-source, tpb, tucnak, uhd-host, usbmuxd, viking,
337 virtualbox-ose-guest-x11, w1retap, xawtv, xserver-xorg-input-vmmouse,
338 xserver-xorg-input-wacom, xserver-xorg-video-qxl,
339 xserver-xorg-video-vmware, yubikey-personalization and
340 zd1211-firmware</p>
341
342 <p>If you know of other packages, please let me know with a wishlist
343 bug report against the isenkram-cli package, and ask the package
344 maintainer to
345 <a href="https://wiki.debian.org/AppStream/Guidelines">add AppStream
346 metadata according to the guidelines</a> to provide the information
347 for everyone. In time, I hope to get rid of the isenkram specific
348 hardware mapping and depend exclusively on AppStream.</p>
349
350 <p>Note, the AppStream metadata for broadcom-sta-dkms is matching too
351 much hardware, and suggest that the package with with any ethernet
352 card. See <a href="http://bugs.debian.org/838735">bug #838735</a> for
353 the details. I hope the maintainer find time to address it soon. In
354 the mean time I provide an override in isenkram.</p>
355
356 </div>
357 <div class="tags">
358
359
360 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
361
362
363 </div>
364 </div>
365 <div class="padding"></div>
366
367 <div class="entry">
368 <div class="title">
369 <a href="http://people.skolelinux.org/pere/blog/Isenkram__Appstream_and_udev_make_life_as_a_LEGO_builder_easier.html">Isenkram, Appstream and udev make life as a LEGO builder easier</a>
370 </div>
371 <div class="date">
372 7th October 2016
373 </div>
374 <div class="body">
375 <p><a href="http://packages.qa.debian.org/isenkram">The Isenkram
376 system</a> provide a practical and easy way to figure out which
377 packages support the hardware in a given machine. The command line
378 tool <tt>isenkram-lookup</tt> and the tasksel options provide a
379 convenient way to list and install packages relevant for the current
380 hardware during system installation, both user space packages and
381 firmware packages. The GUI background daemon on the other hand provide
382 a pop-up proposing to install packages when a new dongle is inserted
383 while using the computer. For example, if you plug in a smart card
384 reader, the system will ask if you want to install <tt>pcscd</tt> if
385 that package isn't already installed, and if you plug in a USB video
386 camera the system will ask if you want to install <tt>cheese</tt> if
387 cheese is currently missing. This already work just fine.</p>
388
389 <p>But Isenkram depend on a database mapping from hardware IDs to
390 package names. When I started no such database existed in Debian, so
391 I made my own data set and included it with the isenkram package and
392 made isenkram fetch the latest version of this database from git using
393 http. This way the isenkram users would get updated package proposals
394 as soon as I learned more about hardware related packages.</p>
395
396 <p>The hardware is identified using modalias strings. The modalias
397 design is from the Linux kernel where most hardware descriptors are
398 made available as a strings that can be matched using filename style
399 globbing. It handle USB, PCI, DMI and a lot of other hardware related
400 identifiers.</p>
401
402 <p>The downside to the Isenkram specific database is that there is no
403 information about relevant distribution / Debian version, making
404 isenkram propose obsolete packages too. But along came AppStream, a
405 cross distribution mechanism to store and collect metadata about
406 software packages. When I heard about the proposal, I contacted the
407 people involved and suggested to add a hardware matching rule using
408 modalias strings in the specification, to be able to use AppStream for
409 mapping hardware to packages. This idea was accepted and AppStream is
410 now a great way for a package to announce the hardware it support in a
411 distribution neutral way. I wrote
412 <a href="http://people.skolelinux.org/pere/blog/Using_appstream_with_isenkram_to_install_hardware_related_packages_in_Debian.html">a
413 recipe on how to add such meta-information</a> in a blog post last
414 December. If you have a hardware related package in Debian, please
415 announce the relevant hardware IDs using AppStream.</p>
416
417 <p>In Debian, almost all packages that can talk to a LEGO Mindestorms
418 RCX or NXT unit, announce this support using AppStream. The effect is
419 that when you insert such LEGO robot controller into your Debian
420 machine, Isenkram will propose to install the packages needed to get
421 it working. The intention is that this should allow the local user to
422 start programming his robot controller right away without having to
423 guess what packages to use or which permissions to fix.</p>
424
425 <p>But when I sat down with my son the other day to program our NXT
426 unit using his Debian Stretch computer, I discovered something
427 annoying. The local console user (ie my son) did not get access to
428 the USB device for programming the unit. This used to work, but no
429 longer in Jessie and Stretch. After some investigation and asking
430 around on #debian-devel, I discovered that this was because udev had
431 changed the mechanism used to grant access to local devices. The
432 ConsoleKit mechanism from <tt>/lib/udev/rules.d/70-udev-acl.rules</tt>
433 no longer applied, because LDAP users no longer was added to the
434 plugdev group during login. Michael Biebl told me that this method
435 was obsolete and the new method used ACLs instead. This was good
436 news, as the plugdev mechanism is a mess when using a remote user
437 directory like LDAP. Using ACLs would make sure a user lost device
438 access when she logged out, even if the user left behind a background
439 process which would retain the plugdev membership with the ConsoleKit
440 setup. Armed with this knowledge I moved on to fix the access problem
441 for the LEGO Mindstorms related packages.</p>
442
443 <p>The new system uses a udev tag, 'uaccess'. It can either be
444 applied directly for a device, or is applied in
445 /lib/udev/rules.d/70-uaccess.rules for classes of devices. As the
446 LEGO Mindstorms udev rules did not have a class, I decided to add the
447 tag directly in the udev rules files included in the packages. Here
448 is one example. For the nqc C compiler for the RCX, the
449 <tt>/lib/udev/rules.d/60-nqc.rules</tt> file now look like this:
450
451 <p><pre>
452 SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0694", ATTR{idProduct}=="0001", \
453 SYMLINK+="rcx-%k", TAG+="uaccess"
454 </pre></p>
455
456 <p>The key part is the 'TAG+="uaccess"' at the end. I suspect all
457 packages using plugdev in their /lib/udev/rules.d/ files should be
458 changed to use this tag (either directly or indirectly via
459 <tt>70-uaccess.rules</tt>). Perhaps a lintian check should be created
460 to detect this?</p>
461
462 <p>I've been unable to find good documentation on the uaccess feature.
463 It is unclear to me if the uaccess tag is an internal implementation
464 detail like the udev-acl tag used by
465 <tt>/lib/udev/rules.d/70-udev-acl.rules</tt>. If it is, I guess the
466 indirect method is the preferred way. Michael
467 <a href="https://github.com/systemd/systemd/issues/4288">asked for more
468 documentation from the systemd project</a> and I hope it will make
469 this clearer. For now I use the generic classes when they exist and
470 is already handled by <tt>70-uaccess.rules</tt>, and add the tag
471 directly if no such class exist.</p>
472
473 <p>To learn more about the isenkram system, please check out
474 <a href="http://people.skolelinux.org/pere/blog/tags/isenkram/">my
475 blog posts tagged isenkram</a>.</p>
476
477 <p>To help out making life for LEGO constructors in Debian easier,
478 please join us on our IRC channel
479 <a href="irc://irc.debian.org/%23debian-lego">#debian-lego</a> and join
480 the <a href="https://alioth.debian.org/projects/debian-lego/">Debian
481 LEGO team</a> in the Alioth project we created yesterday. A mailing
482 list is not yet created, but we are working on it. :)</p>
483
484 <p>As usual, if you use Bitcoin and want to show your support of my
485 activities, please send Bitcoin donations to my address
486 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
487
488 </div>
489 <div class="tags">
490
491
492 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>, <a href="http://people.skolelinux.org/pere/blog/tags/lego">lego</a>.
493
494
495 </div>
496 </div>
497 <div class="padding"></div>
498
499 <div class="entry">
500 <div class="title">
501 <a href="http://people.skolelinux.org/pere/blog/Isenkram_with_PackageKit_support___new_version_0_23_available_in_Debian_unstable.html">Isenkram with PackageKit support - new version 0.23 available in Debian unstable</a>
502 </div>
503 <div class="date">
504 25th May 2016
505 </div>
506 <div class="body">
507 <p><a href="https://tracker.debian.org/pkg/isenkram">The isenkram
508 system</a> is a user-focused solution in Debian for handling hardware
509 related packages. The idea is to have a database of mappings between
510 hardware and packages, and pop up a dialog suggesting for the user to
511 install the packages to use a given hardware dongle. Some use cases
512 are when you insert a Yubikey, it proposes to install the software
513 needed to control it; when you insert a braille reader list it
514 proposes to install the packages needed to send text to the reader;
515 and when you insert a ColorHug screen calibrator it suggests to
516 install the driver for it. The system work well, and even have a few
517 command line tools to install firmware packages and packages for the
518 hardware already in the machine (as opposed to hotpluggable hardware).</p>
519
520 <p>The system was initially written using aptdaemon, because I found
521 good documentation and example code on how to use it. But aptdaemon
522 is going away and is generally being replaced by
523 <a href="http://www.freedesktop.org/software/PackageKit/">PackageKit</a>,
524 so Isenkram needed a rewrite. And today, thanks to the great patch
525 from my college Sunil Mohan Adapa in the FreedomBox project, the
526 rewrite finally took place. I've just uploaded a new version of
527 Isenkram into Debian Unstable with the patch included, and the default
528 for the background daemon is now to use PackageKit. To check it out,
529 install the <tt>isenkram</tt> package and insert some hardware dongle
530 and see if it is recognised.</p>
531
532 <p>If you want to know what kind of packages isenkram would propose for
533 the machine it is running on, you can check out the isenkram-lookup
534 program. This is what it look like on a Thinkpad X230:</p>
535
536 <p><blockquote><pre>
537 % isenkram-lookup
538 bluez
539 cheese
540 fprintd
541 fprintd-demo
542 gkrellm-thinkbat
543 hdapsd
544 libpam-fprintd
545 pidgin-blinklight
546 thinkfan
547 tleds
548 tp-smapi-dkms
549 tp-smapi-source
550 tpb
551 %p
552 </pre></blockquote></p>
553
554 <p>The hardware mappings come from several places. The preferred way
555 is for packages to announce their hardware support using
556 <a href="https://www.freedesktop.org/software/appstream/docs/">the
557 cross distribution appstream system</a>.
558 See
559 <a href="http://people.skolelinux.org/pere/blog/tags/isenkram/">previous
560 blog posts about isenkram</a> to learn how to do that.</p>
561
562 </div>
563 <div class="tags">
564
565
566 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
567
568
569 </div>
570 </div>
571 <div class="padding"></div>
572
573 <div class="entry">
574 <div class="title">
575 <a href="http://people.skolelinux.org/pere/blog/Using_appstream_with_isenkram_to_install_hardware_related_packages_in_Debian.html">Using appstream with isenkram to install hardware related packages in Debian</a>
576 </div>
577 <div class="date">
578 20th December 2015
579 </div>
580 <div class="body">
581 <p>Around three years ago, I created
582 <a href="http://packages.qa.debian.org/isenkram">the isenkram
583 system</a> to get a more practical solution in Debian for handing
584 hardware related packages. A GUI system in the isenkram package will
585 present a pop-up dialog when some hardware dongle supported by
586 relevant packages in Debian is inserted into the machine. The same
587 lookup mechanism to detect packages is available as command line
588 tools in the isenkram-cli package. In addition to mapping hardware,
589 it will also map kernel firmware files to packages and make it easy to
590 install needed firmware packages automatically. The key for this
591 system to work is a good way to map hardware to packages, in other
592 words, allow packages to announce what hardware they will work
593 with.</p>
594
595 <p>I started by providing data files in the isenkram source, and
596 adding code to download the latest version of these data files at run
597 time, to ensure every user had the most up to date mapping available.
598 I also added support for storing the mapping in the Packages file in
599 the apt repositories, but did not push this approach because while I
600 was trying to figure out how to best store hardware/package mappings,
601 <a href="http://www.freedesktop.org/software/appstream/docs/">the
602 appstream system</a> was announced. I got in touch and suggested to
603 add the hardware mapping into that data set to be able to use
604 appstream as a data source, and this was accepted at least for the
605 Debian version of appstream.</p>
606
607 <p>A few days ago using appstream in Debian for this became possible,
608 and today I uploaded a new version 0.20 of isenkram adding support for
609 appstream as a data source for mapping hardware to packages. The only
610 package so far using appstream to announce its hardware support is my
611 pymissile package. I got help from Matthias Klumpp with figuring out
612 how do add the required
613 <a href="https://appstream.debian.org/html/sid/main/metainfo/pymissile.html">metadata
614 in pymissile</a>. I added a file debian/pymissile.metainfo.xml with
615 this content:</p>
616
617 <blockquote><pre>
618 &lt;?xml version="1.0" encoding="UTF-8"?&gt;
619 &lt;component&gt;
620 &lt;id&gt;pymissile&lt;/id&gt;
621 &lt;metadata_license&gt;MIT&lt;/metadata_license&gt;
622 &lt;name&gt;pymissile&lt;/name&gt;
623 &lt;summary&gt;Control original Striker USB Missile Launcher&lt;/summary&gt;
624 &lt;description&gt;
625 &lt;p&gt;
626 Pymissile provides a curses interface to control an original
627 Marks and Spencer / Striker USB Missile Launcher, as well as a
628 motion control script to allow a webcamera to control the
629 launcher.
630 &lt;/p&gt;
631 &lt;/description&gt;
632 &lt;provides&gt;
633 &lt;modalias&gt;usb:v1130p0202d*&lt;/modalias&gt;
634 &lt;/provides&gt;
635 &lt;/component&gt;
636 </pre></blockquote>
637
638 <p>The key for isenkram is the component/provides/modalias value,
639 which is a glob style match rule for hardware specific strings
640 (modalias strings) provided by the Linux kernel. In this case, it
641 will map to all USB devices with vendor code 1130 and product code
642 0202.</p>
643
644 <p>Note, it is important that the license of all the metadata files
645 are compatible to have permissions to aggregate them into archive wide
646 appstream files. Matthias suggested to use MIT or BSD licenses for
647 these files. A challenge is figuring out a good id for the data, as
648 it is supposed to be globally unique and shared across distributions
649 (in other words, best to coordinate with upstream what to use). But
650 it can be changed later or, so we went with the package name as
651 upstream for this project is dormant.</p>
652
653 <p>To get the metadata file installed in the correct location for the
654 mirror update scripts to pick it up and include its content the
655 appstream data source, the file must be installed in the binary
656 package under /usr/share/appdata/. I did this by adding the following
657 line to debian/pymissile.install:</p>
658
659 <blockquote><pre>
660 debian/pymissile.metainfo.xml usr/share/appdata
661 </pre></blockquote>
662
663 <p>With that in place, the command line tool isenkram-lookup will list
664 all packages useful on the current computer automatically, and the GUI
665 pop-up handler will propose to install the package not already
666 installed if a hardware dongle is inserted into the machine in
667 question.</p>
668
669 <p>Details of the modalias field in appstream is available from the
670 <a href="https://wiki.debian.org/DEP-11">DEP-11</a> proposal.</p>
671
672 <p>To locate the modalias values of all hardware present in a machine,
673 try running this command on the command line:</p>
674
675 <blockquote><pre>
676 cat $(find /sys/devices/|grep modalias)
677 </pre></blockquote>
678
679 <p>To learn more about the isenkram system, please check out
680 <a href="http://people.skolelinux.org/pere/blog/tags/isenkram/">my
681 blog posts tagged isenkram</a>.</p>
682
683 </div>
684 <div class="tags">
685
686
687 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
688
689
690 </div>
691 </div>
692 <div class="padding"></div>
693
694 <div class="entry">
695 <div class="title">
696 <a href="http://people.skolelinux.org/pere/blog/Debian_Jessie__PXE_and_automatic_firmware_installation.html">Debian Jessie, PXE and automatic firmware installation</a>
697 </div>
698 <div class="date">
699 17th October 2014
700 </div>
701 <div class="body">
702 <p>When PXE installing laptops with Debian, I often run into the
703 problem that the WiFi card require some firmware to work properly.
704 And it has been a pain to fix this using preseeding in Debian.
705 Normally something more is needed. But thanks to
706 <a href="https://packages.qa.debian.org/i/isenkram.html">my isenkram
707 package</a> and its recent tasksel extension, it has now become easy
708 to do this using simple preseeding.</p>
709
710 <p>The isenkram-cli package provide tasksel tasks which will install
711 firmware for the hardware found in the machine (actually, requested by
712 the kernel modules for the hardware). (It can also install user space
713 programs supporting the hardware detected, but that is not the focus
714 of this story.)</p>
715
716 <p>To get this working in the default installation, two preeseding
717 values are needed. First, the isenkram-cli package must be installed
718 into the target chroot (aka the hard drive) before tasksel is executed
719 in the pkgsel step of the debian-installer system. This is done by
720 preseeding the base-installer/includes debconf value to include the
721 isenkram-cli package. The package name is next passed to debootstrap
722 for installation. With the isenkram-cli package in place, tasksel
723 will automatically use the isenkram tasks to detect hardware specific
724 packages for the machine being installed and install them, because
725 isenkram-cli contain tasksel tasks.</p>
726
727 <p>Second, one need to enable the non-free APT repository, because
728 most firmware unfortunately is non-free. This is done by preseeding
729 the apt-mirror-setup step. This is unfortunate, but for a lot of
730 hardware it is the only option in Debian.</p>
731
732 <p>The end result is two lines needed in your preseeding file to get
733 firmware installed automatically by the installer:</p>
734
735 <p><blockquote><pre>
736 base-installer base-installer/includes string isenkram-cli
737 apt-mirror-setup apt-setup/non-free boolean true
738 </pre></blockquote></p>
739
740 <p>The current version of isenkram-cli in testing/jessie will install
741 both firmware and user space packages when using this method. It also
742 do not work well, so use version 0.15 or later. Installing both
743 firmware and user space packages might give you a bit more than you
744 want, so I decided to split the tasksel task in two, one for firmware
745 and one for user space programs. The firmware task is enabled by
746 default, while the one for user space programs is not. This split is
747 implemented in the package currently in unstable.</p>
748
749 <p>If you decide to give this a go, please let me know (via email) how
750 this recipe work for you. :)</p>
751
752 <p>So, I bet you are wondering, how can this work. First and
753 foremost, it work because tasksel is modular, and driven by whatever
754 files it find in /usr/lib/tasksel/ and /usr/share/tasksel/. So the
755 isenkram-cli package place two files for tasksel to find. First there
756 is the task description file (/usr/share/tasksel/descs/isenkram.desc):</p>
757
758 <p><blockquote><pre>
759 Task: isenkram-packages
760 Section: hardware
761 Description: Hardware specific packages (autodetected by isenkram)
762 Based on the detected hardware various hardware specific packages are
763 proposed.
764 Test-new-install: show show
765 Relevance: 8
766 Packages: for-current-hardware
767
768 Task: isenkram-firmware
769 Section: hardware
770 Description: Hardware specific firmware packages (autodetected by isenkram)
771 Based on the detected hardware various hardware specific firmware
772 packages are proposed.
773 Test-new-install: mark show
774 Relevance: 8
775 Packages: for-current-hardware-firmware
776 </pre></blockquote></p>
777
778 <p>The key parts are Test-new-install which indicate how the task
779 should be handled and the Packages line referencing to a script in
780 /usr/lib/tasksel/packages/. The scripts use other scripts to get a
781 list of packages to install. The for-current-hardware-firmware script
782 look like this to list relevant firmware for the machine:
783
784 <p><blockquote><pre>
785 #!/bin/sh
786 #
787 PATH=/usr/sbin:$PATH
788 export PATH
789 isenkram-autoinstall-firmware -l
790 </pre></blockquote></p>
791
792 <p>With those two pieces in place, the firmware is installed by
793 tasksel during the normal d-i run. :)</p>
794
795 <p>If you want to test what tasksel will install when isenkram-cli is
796 installed, run <tt>DEBIAN_PRIORITY=critical tasksel --test
797 --new-install</tt> to get the list of packages that tasksel would
798 install.</p>
799
800 <p><a href="https://wiki.debian.org/DebianEdu/">Debian Edu</a> will be
801 pilots in testing this feature, as isenkram is used there now to
802 install firmware, replacing the earlier scripts.</p>
803
804 </div>
805 <div class="tags">
806
807
808 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin</a>.
809
810
811 </div>
812 </div>
813 <div class="padding"></div>
814
815 <div class="entry">
816 <div class="title">
817 <a href="http://people.skolelinux.org/pere/blog/Install_hardware_dependent_packages_using_tasksel__Isenkram_0_7_.html">Install hardware dependent packages using tasksel (Isenkram 0.7)</a>
818 </div>
819 <div class="date">
820 23rd April 2014
821 </div>
822 <div class="body">
823 <p>It would be nice if it was easier in Debian to get all the hardware
824 related packages relevant for the computer installed automatically.
825 So I implemented one, using
826 <a href="http://packages.qa.debian.org/isenkram">my Isenkram
827 package</a>. To use it, install the tasksel and isenkram packages and
828 run tasksel as user root. You should be presented with a new option,
829 "Hardware specific packages (autodetected by isenkram)". When you
830 select it, tasksel will install the packages isenkram claim is fit for
831 the current hardware, hot pluggable or not.<p>
832
833 <p>The implementation is in two files, one is the tasksel menu entry
834 description, and the other is the script used to extract the list of
835 packages to install. The first part is in
836 <tt>/usr/share/tasksel/descs/isenkram.desc</tt> and look like
837 this:</p>
838
839 <p><blockquote><pre>
840 Task: isenkram
841 Section: hardware
842 Description: Hardware specific packages (autodetected by isenkram)
843 Based on the detected hardware various hardware specific packages are
844 proposed.
845 Test-new-install: mark show
846 Relevance: 8
847 Packages: for-current-hardware
848 </pre></blockquote></p>
849
850 <p>The second part is in
851 <tt>/usr/lib/tasksel/packages/for-current-hardware</tt> and look like
852 this:</p>
853
854 <p><blockquote><pre>
855 #!/bin/sh
856 #
857 (
858 isenkram-lookup
859 isenkram-autoinstall-firmware -l
860 ) | sort -u
861 </pre></blockquote></p>
862
863 <p>All in all, a very short and simple implementation making it
864 trivial to install the hardware dependent package we all may want to
865 have installed on our machines. I've not been able to find a way to
866 get tasksel to tell you exactly which packages it plan to install
867 before doing the installation. So if you are curious or careful,
868 check the output from the isenkram-* command line tools first.</p>
869
870 <p>The information about which packages are handling which hardware is
871 fetched either from the isenkram package itself in
872 /usr/share/isenkram/, from git.debian.org or from the APT package
873 database (using the Modaliases header). The APT package database
874 parsing have caused a nasty resource leak in the isenkram daemon (bugs
875 <a href="http://bugs.debian.org/719837">#719837</a> and
876 <a href="http://bugs.debian.org/730704">#730704</a>). The cause is in
877 the python-apt code (bug
878 <a href="http://bugs.debian.org/745487">#745487</a>), but using a
879 workaround I was able to get rid of the file descriptor leak and
880 reduce the memory leak from ~30 MiB per hardware detection down to
881 around 2 MiB per hardware detection. It should make the desktop
882 daemon a lot more useful. The fix is in version 0.7 uploaded to
883 unstable today.</p>
884
885 <p>I believe the current way of mapping hardware to packages in
886 Isenkram is is a good draft, but in the future I expect isenkram to
887 use the AppStream data source for this. A proposal for getting proper
888 AppStream support into Debian is floating around as
889 <a href="https://wiki.debian.org/DEP-11">DEP-11</a>, and
890 <a href="https://wiki.debian.org/SummerOfCode2014/Projects#SummerOfCode2014.2FProjects.2FAppStreamDEP11Implementation.AppStream.2FDEP-11_for_the_Debian_Archive">GSoC
891 project</a> will take place this summer to improve the situation. I
892 look forward to seeing the result, and welcome patches for isenkram to
893 start using the information when it is ready.</p>
894
895 <p>If you want your package to map to some specific hardware, either
896 add a "Xb-Modaliases" header to your control file like I did in
897 <a href="http://packages.qa.debian.org/pymissile">the pymissile
898 package</a> or submit a bug report with the details to the isenkram
899 package. See also
900 <a href="http://people.skolelinux.org/pere/blog/tags/isenkram/">all my
901 blog posts tagged isenkram</a> for details on the notation. I expect
902 the information will be migrated to AppStream eventually, but for the
903 moment I got no better place to store it.</p>
904
905 </div>
906 <div class="tags">
907
908
909 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
910
911
912 </div>
913 </div>
914 <div class="padding"></div>
915
916 <div class="entry">
917 <div class="title">
918 <a href="http://people.skolelinux.org/pere/blog/Automatically_locate_and_install_required_firmware_packages_on_Debian__Isenkram_0_4_.html">Automatically locate and install required firmware packages on Debian (Isenkram 0.4)</a>
919 </div>
920 <div class="date">
921 25th June 2013
922 </div>
923 <div class="body">
924 <p>It annoys me when the computer fail to do automatically what it is
925 perfectly capable of, and I have to do it manually to get things
926 working. One such task is to find out what firmware packages are
927 needed to get the hardware on my computer working. Most often this
928 affect the wifi card, but some times it even affect the RAID
929 controller or the ethernet card. Today I pushed version 0.4 of the
930 <a href="http://packages.qa.debian.org/isenkram">Isenkram package</a>
931 including a new script isenkram-autoinstall-firmware handling the
932 process of asking all the loaded kernel modules what firmware files
933 they want, find debian packages providing these files and install the
934 debian packages. Here is a test run on my laptop:</p>
935
936 <p><pre>
937 # isenkram-autoinstall-firmware
938 info: kernel drivers requested extra firmware: ipw2200-bss.fw ipw2200-ibss.fw ipw2200-sniffer.fw
939 info: fetching http://http.debian.net/debian/dists/squeeze/Contents-i386.gz
940 info: locating packages with the requested firmware files
941 info: Updating APT sources after adding non-free APT source
942 info: trying to install firmware-ipw2x00
943 firmware-ipw2x00
944 firmware-ipw2x00
945 Preconfiguring packages ...
946 Selecting previously deselected package firmware-ipw2x00.
947 (Reading database ... 259727 files and directories currently installed.)
948 Unpacking firmware-ipw2x00 (from .../firmware-ipw2x00_0.28+squeeze1_all.deb) ...
949 Setting up firmware-ipw2x00 (0.28+squeeze1) ...
950 #
951 </pre></p>
952
953 <p>When all the requested firmware is present, a simple message is
954 printed instead:</p>
955
956 <p><pre>
957 # isenkram-autoinstall-firmware
958 info: did not find any firmware files requested by loaded kernel modules. exiting
959 #
960 </pre></p>
961
962 <p>It could use some polish, but it is already working well and saving
963 me some time when setting up new machines. :)</p>
964
965 <p>So, how does it work? It look at the set of currently loaded
966 kernel modules, and look up each one of them using modinfo, to find
967 the firmware files listed in the module meta-information. Next, it
968 download the Contents file from a nearby APT mirror, and search for
969 the firmware files in this file to locate the package with the
970 requested firmware file. If the package is in the non-free section, a
971 non-free APT source is added and the package is installed using
972 <tt>apt-get install</tt>. The end result is a slightly better working
973 machine.</p>
974
975 <p>I hope someone find time to implement a more polished version of
976 this script as part of the hw-detect debian-installer module, to
977 finally fix <a href="http://bugs.debian.org/655507">BTS report
978 #655507</a>. There really is no need to insert USB sticks with
979 firmware during a PXE install when the packages already are available
980 from the nearby Debian mirror.</p>
981
982 </div>
983 <div class="tags">
984
985
986 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
987
988
989 </div>
990 </div>
991 <div class="padding"></div>
992
993 <div class="entry">
994 <div class="title">
995 <a href="http://people.skolelinux.org/pere/blog/Isenkram_0_2_finally_in_the_Debian_archive.html">Isenkram 0.2 finally in the Debian archive</a>
996 </div>
997 <div class="date">
998 3rd April 2013
999 </div>
1000 <div class="body">
1001 <p>Today the <a href="http://packages.qa.debian.org/isenkram">Isenkram
1002 package</a> finally made it into the archive, after lingering in NEW
1003 for many months. I uploaded it to the Debian experimental suite
1004 2013-01-27, and today it was accepted into the archive.</p>
1005
1006 <p>Isenkram is a system for suggesting to users what packages to
1007 install to work with a pluggable hardware device. The suggestion pop
1008 up when the device is plugged in. For example if a Lego Mindstorm NXT
1009 is inserted, it will suggest to install the program needed to program
1010 the NXT controller. Give it a go, and report bugs and suggestions to
1011 BTS. :)</p>
1012
1013 </div>
1014 <div class="tags">
1015
1016
1017 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
1018
1019
1020 </div>
1021 </div>
1022 <div class="padding"></div>
1023
1024 <div class="entry">
1025 <div class="title">
1026 <a href="http://people.skolelinux.org/pere/blog/Welcome_to_the_world__Isenkram_.html">Welcome to the world, Isenkram!</a>
1027 </div>
1028 <div class="date">
1029 22nd January 2013
1030 </div>
1031 <div class="body">
1032 <p>Yesterday, I
1033 <a href="http://people.skolelinux.org/pere/blog/First_prototype_ready_making_hardware_easier_to_use_in_Debian.html">asked
1034 for testers</a> for my prototype for making Debian better at handling
1035 pluggable hardware devices, which I
1036 <a href="http://people.skolelinux.org/pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html">set
1037 out to create</a> earlier this month. Several valuable testers showed
1038 up, and caused me to really want to to open up the development to more
1039 people. But before I did this, I want to come up with a sensible name
1040 for this project. Today I finally decided on a new name, and I have
1041 renamed the project from hw-support-handler to this new name. In the
1042 process, I moved the source to git and made it available as a
1043 <a href="http://anonscm.debian.org/gitweb/?p=collab-maint/isenkram.git">collab-maint</a>
1044 repository in Debian. The new name? It is <strong>Isenkram</strong>.
1045 To fetch and build the latest version of the source, use</p>
1046
1047 <pre>
1048 git clone http://anonscm.debian.org/git/collab-maint/isenkram.git
1049 cd isenkram && git-buildpackage -us -uc
1050 </pre>
1051
1052 <p>I have not yet adjusted all files to use the new name yet. If you
1053 want to hack on the source or improve the package, please go ahead.
1054 But please talk to me first on IRC or via email before you do major
1055 changes, to make sure we do not step on each others toes. :)</p>
1056
1057 <p>If you wonder what 'isenkram' is, it is a Norwegian word for iron
1058 stuff, typically meaning tools, nails, screws, etc. Typical hardware
1059 stuff, in other words. I've been told it is the Norwegian variant of
1060 the German word eisenkram, for those that are familiar with that
1061 word.</p>
1062
1063 <p><strong>Update 2013-01-26</strong>: Added -us -us to build
1064 instructions, to avoid confusing people with an error from the signing
1065 process.</p>
1066
1067 <p><strong>Update 2013-01-27</strong>: Switch to HTTP URL for the git
1068 clone argument to avoid the need for authentication.</p>
1069
1070 </div>
1071 <div class="tags">
1072
1073
1074 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
1075
1076
1077 </div>
1078 </div>
1079 <div class="padding"></div>
1080
1081 <div class="entry">
1082 <div class="title">
1083 <a href="http://people.skolelinux.org/pere/blog/First_prototype_ready_making_hardware_easier_to_use_in_Debian.html">First prototype ready making hardware easier to use in Debian</a>
1084 </div>
1085 <div class="date">
1086 21st January 2013
1087 </div>
1088 <div class="body">
1089 <p>Early this month I set out to try to
1090 <a href="http://people.skolelinux.org/pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html">improve
1091 the Debian support for pluggable hardware devices</a>. Now my
1092 prototype is working, and it is ready for a larger audience. To test
1093 it, fetch the
1094 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/">source
1095 from the Debian Edu subversion repository</a>, build and install the
1096 package. You might have to log out and in again activate the
1097 autostart script.</p>
1098
1099 <p>The design is simple:</p>
1100
1101 <ul>
1102
1103 <li>Add desktop entry in /usr/share/autostart/ causing a program
1104 hw-support-handlerd to start when the user log in.</li>
1105
1106 <li>This program listen for kernel events about new hardware (directly
1107 from the kernel like udev does), not using HAL dbus events as I
1108 initially did.</li>
1109
1110 <li>When new hardware is inserted, look up the hardware modalias in
1111 the APT database, a database
1112 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/modaliases?view=markup">available
1113 via HTTP</a> and a database available as part of the package.</li>
1114
1115 <li>If a package is mapped to the hardware in question, the package
1116 isn't installed yet and this is the first time the hardware was
1117 plugged in, show a desktop notification suggesting to install the
1118 package or packages.</li>
1119
1120 <li>If the user click on the 'install package now' button, ask
1121 aptdaemon via the PackageKit API to install the requrired package.</li>
1122
1123 <li>aptdaemon ask for root password or sudo password, and install the
1124 package while showing progress information in a window.</li>
1125
1126 </ul>
1127
1128 <p>I still need to come up with a better name for the system. Here
1129 are some screen shots showing the prototype in action. First the
1130 notification, then the password request, and finally the request to
1131 approve all the dependencies. Sorry for the Norwegian Bokmål GUI.</p>
1132
1133 <p><img src="http://people.skolelinux.org/pere/blog/images/2013-01-21-hw-support-1-notification.png">
1134 <br><img src="http://people.skolelinux.org/pere/blog/images/2013-01-21-hw-support-2-password.png">
1135 <br><img src="http://people.skolelinux.org/pere/blog/images/2013-01-21-hw-support-3-dependencies.png">
1136 <br><img src="http://people.skolelinux.org/pere/blog/images/2013-01-21-hw-support-4-installing.png">
1137 <br><img src="http://people.skolelinux.org/pere/blog/images/2013-01-21-hw-support-5-installing-details.png" width="70%"></p>
1138
1139 <p>The prototype still need to be improved with longer timeouts, but
1140 is already useful. The database of hardware to package mappings also
1141 need more work. It is currently compatible with the Ubuntu way of
1142 storing such information in the package control file, but could be
1143 changed to use other formats instead or in addition to the current
1144 method. I've dropped the use of discover for this mapping, as the
1145 modalias approach is more flexible and easier to use on Linux as long
1146 as the Linux kernel expose its modalias strings directly.</p>
1147
1148 <p><strong>Update 2013-01-21 16:50</strong>: Due to popular demand,
1149 here is the command required to check out and build the source: Use
1150 '<tt>svn checkout
1151 svn://svn.debian.org/debian-edu/trunk/src/hw-support-handler/; cd
1152 hw-support-handler; debuild</tt>'. If you lack debuild, install the
1153 devscripts package.</p>
1154
1155 <p><strong>Update 2013-01-23 12:00</strong>: The project is now
1156 renamed to Isenkram and the source moved from the Debian Edu
1157 subversion repository to a Debian collab-maint git repository. See
1158 <a href="http://people.skolelinux.org/pere/blog/Welcome_to_the_world__Isenkram_.html">build
1159 instructions</a> for details.</p>
1160
1161 </div>
1162 <div class="tags">
1163
1164
1165 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
1166
1167
1168 </div>
1169 </div>
1170 <div class="padding"></div>
1171
1172 <div class="entry">
1173 <div class="title">
1174 <a href="http://people.skolelinux.org/pere/blog/Using_modalias_info_to_find_packages_handling_my_hardware.html">Using modalias info to find packages handling my hardware</a>
1175 </div>
1176 <div class="date">
1177 15th January 2013
1178 </div>
1179 <div class="body">
1180 <p>Yesterday, I wrote about the
1181 <a href="http://people.skolelinux.org/pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.html">modalias
1182 values provided by the Linux kernel</a> following my hope for
1183 <a href="http://people.skolelinux.org/pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html">better
1184 dongle support in Debian</a>. Using this knowledge, I have tested how
1185 modalias values attached to package names can be used to map packages
1186 to hardware. This allow the system to look up and suggest relevant
1187 packages when I plug in some new hardware into my machine, and replace
1188 discover and discover-data as the database used to map hardware to
1189 packages.</p>
1190
1191 <p>I create a modaliases file with entries like the following,
1192 containing package name, kernel module name (if relevant, otherwise
1193 the package name) and globs matching the relevant hardware
1194 modalias.</p>
1195
1196 <p><blockquote>
1197 Package: package-name
1198 <br>Modaliases: module(modaliasglob, modaliasglob, modaliasglob)</p>
1199 </blockquote></p>
1200
1201 <p>It is fairly trivial to write code to find the relevant packages
1202 for a given modalias value using this file.</p>
1203
1204 <p>An entry like this would suggest the video and picture application
1205 cheese for many USB web cameras (interface bus class 0E01):</p>
1206
1207 <p><blockquote>
1208 Package: cheese
1209 <br>Modaliases: cheese(usb:v*p*d*dc*dsc*dp*ic0Eisc01ip*)</p>
1210 </blockquote></p>
1211
1212 <p>An entry like this would suggest the pcmciautils package when a
1213 CardBus bridge (bus class 0607) PCI device is present:</p>
1214
1215 <p><blockquote>
1216 Package: pcmciautils
1217 <br>Modaliases: pcmciautils(pci:v*d*sv*sd*bc06sc07i*)
1218 </blockquote></p>
1219
1220 <p>An entry like this would suggest the package colorhug-client when
1221 plugging in a ColorHug with USB IDs 04D8:F8DA:</p>
1222
1223 <p><blockquote>
1224 Package: colorhug-client
1225 <br>Modaliases: colorhug-client(usb:v04D8pF8DAd*)</p>
1226 </blockquote></p>
1227
1228 <p>I believe the format is compatible with the format of the Packages
1229 file in the Debian archive. Ubuntu already uses their Packages file
1230 to store their mappings from packages to hardware.</p>
1231
1232 <p>By adding a XB-Modaliases: header in debian/control, any .deb can
1233 announce the hardware it support in a way my prototype understand.
1234 This allow those publishing packages in an APT source outside the
1235 Debian archive as well as those backporting packages to make sure the
1236 hardware mapping are included in the package meta information. I've
1237 tested such header in the pymissile package, and its modalias mapping
1238 is working as it should with my prototype. It even made it to Ubuntu
1239 Raring.</p>
1240
1241 <p>To test if it was possible to look up supported hardware using only
1242 the shell tools available in the Debian installer, I wrote a shell
1243 implementation of the lookup code. The idea is to create files for
1244 each modalias and let the shell do the matching. Please check out and
1245 try the
1246 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/hw-support-lookup?view=co">hw-support-lookup</a>
1247 shell script. It run without any extra dependencies and fetch the
1248 hardware mappings from the Debian archive and the subversion
1249 repository where I currently work on my prototype.</p>
1250
1251 <p>When I use it on a machine with a yubikey inserted, it suggest to
1252 install yubikey-personalization:</p>
1253
1254 <p><blockquote>
1255 % ./hw-support-lookup
1256 <br>yubikey-personalization
1257 <br>%
1258 </blockquote></p>
1259
1260 <p>When I run it on my Thinkpad X40 with a PCMCIA/CardBus slot, it
1261 propose to install the pcmciautils package:</p>
1262
1263 <p><blockquote>
1264 % ./hw-support-lookup
1265 <br>pcmciautils
1266 <br>%
1267 </blockquote></p>
1268
1269 <p>If you know of any hardware-package mapping that should be added to
1270 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/modaliases?view=co">my
1271 database</a>, please tell me about it.</p>
1272
1273 <p>It could be possible to generate several of the mappings between
1274 packages and hardware. One source would be to look at packages with
1275 kernel modules, ie packages with *.ko files in /lib/modules/, and
1276 extract their modalias information. Another would be to look at
1277 packages with udev rules, ie packages with files in
1278 /lib/udev/rules.d/, and extract their vendor/model information to
1279 generate a modalias matching rule. I have not tested any of these to
1280 see if it work.</p>
1281
1282 <p>If you want to help implementing a system to let us propose what
1283 packages to install when new hardware is plugged into a Debian
1284 machine, please send me an email or talk to me on
1285 <a href="irc://irc.debian.org/%23debian-devel">#debian-devel</a>.</p>
1286
1287 </div>
1288 <div class="tags">
1289
1290
1291 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
1292
1293
1294 </div>
1295 </div>
1296 <div class="padding"></div>
1297
1298 <div class="entry">
1299 <div class="title">
1300 <a href="http://people.skolelinux.org/pere/blog/Modalias_strings___a_practical_way_to_map__stuff__to_hardware.html">Modalias strings - a practical way to map "stuff" to hardware</a>
1301 </div>
1302 <div class="date">
1303 14th January 2013
1304 </div>
1305 <div class="body">
1306 <p>While looking into how to look up Debian packages based on hardware
1307 information, to find the packages that support a given piece of
1308 hardware, I refreshed my memory regarding modalias values, and decided
1309 to document the details. Here are my findings so far, also available
1310 in
1311 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/">the
1312 Debian Edu subversion repository</a>:
1313
1314 <p><strong>Modalias decoded</strong></p>
1315
1316 <p>This document try to explain what the different types of modalias
1317 values stands for. It is in part based on information from
1318 &lt;URL: <a href="https://wiki.archlinux.org/index.php/Modalias">https://wiki.archlinux.org/index.php/Modalias</a> &gt;,
1319 &lt;URL: <a href="http://unix.stackexchange.com/questions/26132/how-to-assign-usb-driver-to-device">http://unix.stackexchange.com/questions/26132/how-to-assign-usb-driver-to-device</a> &gt;,
1320 &lt;URL: <a href="http://code.metager.de/source/history/linux/stable/scripts/mod/file2alias.c">http://code.metager.de/source/history/linux/stable/scripts/mod/file2alias.c</a> &gt; and
1321 &lt;URL: <a href="http://cvs.savannah.gnu.org/viewvc/dmidecode/dmidecode.c?root=dmidecode&view=markup">http://cvs.savannah.gnu.org/viewvc/dmidecode/dmidecode.c?root=dmidecode&view=markup</a> &gt;.
1322
1323 <p>The modalias entries for a given Linux machine can be found using
1324 this shell script:</p>
1325
1326 <pre>
1327 find /sys -name modalias -print0 | xargs -0 cat | sort -u
1328 </pre>
1329
1330 <p>The supported modalias globs for a given kernel module can be found
1331 using modinfo:</p>
1332
1333 <pre>
1334 % /sbin/modinfo psmouse | grep alias:
1335 alias: serio:ty05pr*id*ex*
1336 alias: serio:ty01pr*id*ex*
1337 %
1338 </pre>
1339
1340 <p><strong>PCI subtype</strong></p>
1341
1342 <p>A typical PCI entry can look like this. This is an Intel Host
1343 Bridge memory controller:</p>
1344
1345 <p><blockquote>
1346 pci:v00008086d00002770sv00001028sd000001ADbc06sc00i00
1347 </blockquote></p>
1348
1349 <p>This represent these values:</p>
1350
1351 <pre>
1352 v 00008086 (vendor)
1353 d 00002770 (device)
1354 sv 00001028 (subvendor)
1355 sd 000001AD (subdevice)
1356 bc 06 (bus class)
1357 sc 00 (bus subclass)
1358 i 00 (interface)
1359 </pre>
1360
1361 <p>The vendor/device values are the same values outputted from 'lspci
1362 -n' as 8086:2770. The bus class/subclass is also shown by lspci as
1363 0600. The 0600 class is a host bridge. Other useful bus values are
1364 0300 (VGA compatible card) and 0200 (Ethernet controller).</p>
1365
1366 <p>Not sure how to figure out the interface value, nor what it
1367 means.</p>
1368
1369 <p><strong>USB subtype</strong></p>
1370
1371 <p>Some typical USB entries can look like this. This is an internal
1372 USB hub in a laptop:</p>
1373
1374 <p><blockquote>
1375 usb:v1D6Bp0001d0206dc09dsc00dp00ic09isc00ip00
1376 </blockquote></p>
1377
1378 <p>Here is the values included in this alias:</p>
1379
1380 <pre>
1381 v 1D6B (device vendor)
1382 p 0001 (device product)
1383 d 0206 (bcddevice)
1384 dc 09 (device class)
1385 dsc 00 (device subclass)
1386 dp 00 (device protocol)
1387 ic 09 (interface class)
1388 isc 00 (interface subclass)
1389 ip 00 (interface protocol)
1390 </pre>
1391
1392 <p>The 0900 device class/subclass means hub. Some times the relevant
1393 class is in the interface class section. For a simple USB web camera,
1394 these alias entries show up:</p>
1395
1396 <p><blockquote>
1397 usb:v0AC8p3420d5000dcEFdsc02dp01ic01isc01ip00
1398 <br>usb:v0AC8p3420d5000dcEFdsc02dp01ic01isc02ip00
1399 <br>usb:v0AC8p3420d5000dcEFdsc02dp01ic0Eisc01ip00
1400 <br>usb:v0AC8p3420d5000dcEFdsc02dp01ic0Eisc02ip00
1401 </blockquote></p>
1402
1403 <p>Interface class 0E01 is video control, 0E02 is video streaming (aka
1404 camera), 0101 is audio control device and 0102 is audio streaming (aka
1405 microphone). Thus this is a camera with microphone included.</p>
1406
1407 <p><strong>ACPI subtype</strong></p>
1408
1409 <p>The ACPI type is used for several non-PCI/USB stuff. This is an IR
1410 receiver in a Thinkpad X40:</p>
1411
1412 <p><blockquote>
1413 acpi:IBM0071:PNP0511:
1414 </blockquote></p>
1415
1416 <p>The values between the colons are IDs.</p>
1417
1418 <p><strong>DMI subtype</strong></p>
1419
1420 <p>The DMI table contain lots of information about the computer case
1421 and model. This is an entry for a IBM Thinkpad X40, fetched from
1422 /sys/devices/virtual/dmi/id/modalias:</p>
1423
1424 <p><blockquote>
1425 dmi:bvnIBM:bvr1UETB6WW(1.66):bd06/15/2005:svnIBM:pn2371H4G:pvrThinkPadX40:rvnIBM:rn2371H4G:rvrNotAvailable:cvnIBM:ct10:cvrNotAvailable:
1426 </blockquote></p>
1427
1428 <p>The values present are</p>
1429
1430 <pre>
1431 bvn IBM (BIOS vendor)
1432 bvr 1UETB6WW(1.66) (BIOS version)
1433 bd 06/15/2005 (BIOS date)
1434 svn IBM (system vendor)
1435 pn 2371H4G (product name)
1436 pvr ThinkPadX40 (product version)
1437 rvn IBM (board vendor)
1438 rn 2371H4G (board name)
1439 rvr NotAvailable (board version)
1440 cvn IBM (chassis vendor)
1441 ct 10 (chassis type)
1442 cvr NotAvailable (chassis version)
1443 </pre>
1444
1445 <p>The chassis type 10 is Notebook. Other interesting values can be
1446 found in the dmidecode source:</p>
1447
1448 <pre>
1449 3 Desktop
1450 4 Low Profile Desktop
1451 5 Pizza Box
1452 6 Mini Tower
1453 7 Tower
1454 8 Portable
1455 9 Laptop
1456 10 Notebook
1457 11 Hand Held
1458 12 Docking Station
1459 13 All In One
1460 14 Sub Notebook
1461 15 Space-saving
1462 16 Lunch Box
1463 17 Main Server Chassis
1464 18 Expansion Chassis
1465 19 Sub Chassis
1466 20 Bus Expansion Chassis
1467 21 Peripheral Chassis
1468 22 RAID Chassis
1469 23 Rack Mount Chassis
1470 24 Sealed-case PC
1471 25 Multi-system
1472 26 CompactPCI
1473 27 AdvancedTCA
1474 28 Blade
1475 29 Blade Enclosing
1476 </pre>
1477
1478 <p>The chassis type values are not always accurately set in the DMI
1479 table. For example my home server is a tower, but the DMI modalias
1480 claim it is a desktop.</p>
1481
1482 <p><strong>SerIO subtype</strong></p>
1483
1484 <p>This type is used for PS/2 mouse plugs. One example is from my
1485 test machine:</p>
1486
1487 <p><blockquote>
1488 serio:ty01pr00id00ex00
1489 </blockquote></p>
1490
1491 <p>The values present are</p>
1492
1493 <pre>
1494 ty 01 (type)
1495 pr 00 (prototype)
1496 id 00 (id)
1497 ex 00 (extra)
1498 </pre>
1499
1500 <p>This type is supported by the psmouse driver. I am not sure what
1501 the valid values are.</p>
1502
1503 <p><strong>Other subtypes</strong></p>
1504
1505 <p>There are heaps of other modalias subtypes according to
1506 file2alias.c. There is the rest of the list from that source: amba,
1507 ap, bcma, ccw, css, eisa, hid, i2c, ieee1394, input, ipack, isapnp,
1508 mdio, of, parisc, pcmcia, platform, scsi, sdio, spi, ssb, vio, virtio,
1509 vmbus, x86cpu and zorro. I did not spend time documenting all of
1510 these, as they do not seem relevant for my intended use with mapping
1511 hardware to packages when new stuff is inserted during run time.</p>
1512
1513 <p><strong>Looking up kernel modules using modalias values</strong></p>
1514
1515 <p>To check which kernel modules provide support for a given modalias,
1516 one can use the following shell script:</p>
1517
1518 <pre>
1519 for id in $(find /sys -name modalias -print0 | xargs -0 cat | sort -u); do \
1520 echo "$id" ; \
1521 /sbin/modprobe --show-depends "$id"|sed 's/^/ /' ; \
1522 done
1523 </pre>
1524
1525 <p>The output can look like this (only the first few entries as the
1526 list is very long on my test machine):</p>
1527
1528 <pre>
1529 acpi:ACPI0003:
1530 insmod /lib/modules/2.6.32-5-686/kernel/drivers/acpi/ac.ko
1531 acpi:device:
1532 FATAL: Module acpi:device: not found.
1533 acpi:IBM0068:
1534 insmod /lib/modules/2.6.32-5-686/kernel/drivers/char/nvram.ko
1535 insmod /lib/modules/2.6.32-5-686/kernel/drivers/leds/led-class.ko
1536 insmod /lib/modules/2.6.32-5-686/kernel/net/rfkill/rfkill.ko
1537 insmod /lib/modules/2.6.32-5-686/kernel/drivers/platform/x86/thinkpad_acpi.ko
1538 acpi:IBM0071:PNP0511:
1539 insmod /lib/modules/2.6.32-5-686/kernel/lib/crc-ccitt.ko
1540 insmod /lib/modules/2.6.32-5-686/kernel/net/irda/irda.ko
1541 insmod /lib/modules/2.6.32-5-686/kernel/drivers/net/irda/nsc-ircc.ko
1542 [...]
1543 </pre>
1544
1545 <p>If you want to help implementing a system to let us propose what
1546 packages to install when new hardware is plugged into a Debian
1547 machine, please send me an email or talk to me on
1548 <a href="irc://irc.debian.org/%23debian-devel">#debian-devel</a>.</p>
1549
1550 <p><strong>Update 2013-01-15:</strong> Rewrite "cat $(find ...)" to
1551 "find ... -print0 | xargs -0 cat" to make sure it handle directories
1552 in /sys/ with space in them.</p>
1553
1554 </div>
1555 <div class="tags">
1556
1557
1558 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
1559
1560
1561 </div>
1562 </div>
1563 <div class="padding"></div>
1564
1565 <div class="entry">
1566 <div class="title">
1567 <a href="http://people.skolelinux.org/pere/blog/Moved_the_pymissile_Debian_packaging_to_collab_maint.html">Moved the pymissile Debian packaging to collab-maint</a>
1568 </div>
1569 <div class="date">
1570 10th January 2013
1571 </div>
1572 <div class="body">
1573 <p>As part of my investigation on how to improve the support in Debian
1574 for hardware dongles, I dug up my old Mark and Spencer USB Rocket
1575 Launcher and updated the Debian package
1576 <a href="http://packages.qa.debian.org/pymissile">pymissile</a> to make
1577 sure udev will fix the device permissions when it is plugged in. I
1578 also added a "Modaliases" header to test it in the Debian archive and
1579 hopefully make the package be proposed by jockey in Ubuntu when a user
1580 plug in his rocket launcher. In the process I moved the source to a
1581 git repository under collab-maint, to make it easier for any DD to
1582 contribute. <a href="http://code.google.com/p/pymissile/">Upstream</a>
1583 is not very active, but the software still work for me even after five
1584 years of relative silence. The new git repository is not listed in
1585 the uploaded package yet, because I want to test the other changes a
1586 bit more before I upload the new version. If you want to check out
1587 the new version with a .desktop file included, visit the
1588 <a href="http://anonscm.debian.org/gitweb/?p=collab-maint/pymissile.git">gitweb
1589 view</a> or use "<tt>git clone
1590 git://anonscm.debian.org/collab-maint/pymissile.git</tt>".</p>
1591
1592 </div>
1593 <div class="tags">
1594
1595
1596 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>, <a href="http://people.skolelinux.org/pere/blog/tags/robot">robot</a>.
1597
1598
1599 </div>
1600 </div>
1601 <div class="padding"></div>
1602
1603 <div class="entry">
1604 <div class="title">
1605 <a href="http://people.skolelinux.org/pere/blog/Lets_make_hardware_dongles_easier_to_use_in_Debian.html">Lets make hardware dongles easier to use in Debian</a>
1606 </div>
1607 <div class="date">
1608 9th January 2013
1609 </div>
1610 <div class="body">
1611 <p>One thing that annoys me with Debian and Linux distributions in
1612 general, is that there is a great package management system with the
1613 ability to automatically install software packages by downloading them
1614 from the distribution mirrors, but no way to get it to automatically
1615 install the packages I need to use the hardware I plug into my
1616 machine. Even if the package to use it is easily available from the
1617 Linux distribution. When I plug in a LEGO Mindstorms NXT, it could
1618 suggest to automatically install the python-nxt, nbc and t2n packages
1619 I need to talk to it. When I plug in a Yubikey, it could propose the
1620 yubikey-personalization package. The information required to do this
1621 is available, but no-one have pulled all the pieces together.</p>
1622
1623 <p>Some years ago, I proposed to
1624 <a href="http://lists.debian.org/debian-devel/2010/05/msg01206.html">use
1625 the discover subsystem to implement this</a>. The idea is fairly
1626 simple:
1627
1628 <ul>
1629
1630 <li>Add a desktop entry in /usr/share/autostart/ pointing to a program
1631 starting when a user log in.</li>
1632
1633 <li>Set this program up to listen for kernel events emitted when new
1634 hardware is inserted into the computer.</li>
1635
1636 <li>When new hardware is inserted, look up the hardware ID in a
1637 database mapping to packages, and take note of any non-installed
1638 packages.</li>
1639
1640 <li>Show a message to the user proposing to install the discovered
1641 package, and make it easy to install it.</li>
1642
1643 </ul>
1644
1645 <p>I am not sure what the best way to implement this is, but my
1646 initial idea was to use dbus events to discover new hardware, the
1647 discover database to find packages and
1648 <a href="http://www.packagekit.org/">PackageKit</a> to install
1649 packages.</p>
1650
1651 <p>Yesterday, I found time to try to implement this idea, and the
1652 draft package is now checked into
1653 <a href="http://anonscm.debian.org/viewvc/debian-edu/trunk/src/hw-support-handler/">the
1654 Debian Edu subversion repository</a>. In the process, I updated the
1655 <a href="http://packages.qa.debian.org/d/discover-data.html">discover-data</a>
1656 package to map the USB ids of LEGO Mindstorms and Yubikey devices to
1657 the relevant packages in Debian, and uploaded a new version
1658 2.2013.01.09 to unstable. I also discovered that the current
1659 <a href="http://packages.qa.debian.org/d/discover.html">discover</a>
1660 package in Debian no longer discovered any USB devices, because
1661 /proc/bus/usb/devices is no longer present. I ported it to use
1662 libusb as a fall back option to get it working. The fixed package
1663 version 2.1.2-6 is now in experimental (didn't upload it to unstable
1664 because of the freeze).</p>
1665
1666 <p>With this prototype in place, I can insert my Yubikey, and get this
1667 desktop notification to show up (only once, the first time it is
1668 inserted):</p>
1669
1670 <p align="center"><img src="http://people.skolelinux.org/pere/blog/images/2013-01-09-hw-autoinstall.png"></p>
1671
1672 <p>For this prototype to be really useful, some way to automatically
1673 install the proposed packages by pressing the "Please install
1674 program(s)" button should to be implemented.</p>
1675
1676 <p>If this idea seem useful to you, and you want to help make it
1677 happen, please help me update the discover-data database with mappings
1678 from hardware to Debian packages. Check if 'discover-pkginstall -l'
1679 list the package you would like to have installed when a given
1680 hardware device is inserted into your computer, and report bugs using
1681 reportbug if it isn't. Or, if you know of a better way to provide
1682 such mapping, please let me know.</p>
1683
1684 <p>This prototype need more work, and there are several questions that
1685 should be considered before it is ready for production use. Is dbus
1686 the correct way to detect new hardware? At the moment I look for HAL
1687 dbus events on the system bus, because that is the events I could see
1688 on my Debian Squeeze KDE desktop. Are there better events to use?
1689 How should the user be notified? Is the desktop notification
1690 mechanism the best option, or should the background daemon raise a
1691 popup instead? How should packages be installed? When should they
1692 not be installed?</p>
1693
1694 <p>If you want to help getting such feature implemented in Debian,
1695 please send me an email. :)</p>
1696
1697 </div>
1698 <div class="tags">
1699
1700
1701 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram</a>.
1702
1703
1704 </div>
1705 </div>
1706 <div class="padding"></div>
1707
1708 <p style="text-align: right;"><a href="isenkram.rss"><img src="http://people.skolelinux.org/pere/blog/xml.gif" alt="RSS Feed" width="36" height="14" /></a></p>
1709 <div id="sidebar">
1710
1711
1712
1713 <h2>Archive</h2>
1714 <ul>
1715
1716 <li>2019
1717 <ul>
1718
1719 <li><a href="http://people.skolelinux.org/pere/blog/archive/2019/01/">January (3)</a></li>
1720
1721 </ul></li>
1722
1723 <li>2018
1724 <ul>
1725
1726 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/01/">January (1)</a></li>
1727
1728 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/02/">February (5)</a></li>
1729
1730 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/03/">March (5)</a></li>
1731
1732 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/04/">April (3)</a></li>
1733
1734 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/06/">June (2)</a></li>
1735
1736 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/07/">July (5)</a></li>
1737
1738 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/08/">August (3)</a></li>
1739
1740 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/09/">September (3)</a></li>
1741
1742 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/10/">October (5)</a></li>
1743
1744 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/11/">November (2)</a></li>
1745
1746 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/12/">December (4)</a></li>
1747
1748 </ul></li>
1749
1750 <li>2017
1751 <ul>
1752
1753 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/01/">January (4)</a></li>
1754
1755 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/02/">February (3)</a></li>
1756
1757 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/03/">March (5)</a></li>
1758
1759 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/04/">April (2)</a></li>
1760
1761 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/06/">June (5)</a></li>
1762
1763 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/07/">July (1)</a></li>
1764
1765 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/08/">August (1)</a></li>
1766
1767 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/09/">September (3)</a></li>
1768
1769 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/10/">October (5)</a></li>
1770
1771 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/11/">November (3)</a></li>
1772
1773 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/12/">December (4)</a></li>
1774
1775 </ul></li>
1776
1777 <li>2016
1778 <ul>
1779
1780 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/01/">January (3)</a></li>
1781
1782 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/02/">February (2)</a></li>
1783
1784 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/03/">March (3)</a></li>
1785
1786 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/04/">April (8)</a></li>
1787
1788 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/05/">May (8)</a></li>
1789
1790 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/06/">June (2)</a></li>
1791
1792 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/07/">July (2)</a></li>
1793
1794 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/08/">August (5)</a></li>
1795
1796 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/09/">September (2)</a></li>
1797
1798 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/10/">October (3)</a></li>
1799
1800 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/11/">November (8)</a></li>
1801
1802 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/12/">December (5)</a></li>
1803
1804 </ul></li>
1805
1806 <li>2015
1807 <ul>
1808
1809 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/01/">January (7)</a></li>
1810
1811 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/02/">February (6)</a></li>
1812
1813 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/03/">March (1)</a></li>
1814
1815 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/04/">April (4)</a></li>
1816
1817 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/05/">May (3)</a></li>
1818
1819 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/06/">June (4)</a></li>
1820
1821 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/07/">July (6)</a></li>
1822
1823 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/08/">August (2)</a></li>
1824
1825 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/09/">September (2)</a></li>
1826
1827 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/10/">October (9)</a></li>
1828
1829 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/11/">November (6)</a></li>
1830
1831 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/12/">December (3)</a></li>
1832
1833 </ul></li>
1834
1835 <li>2014
1836 <ul>
1837
1838 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/01/">January (2)</a></li>
1839
1840 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/02/">February (3)</a></li>
1841
1842 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/03/">March (8)</a></li>
1843
1844 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/04/">April (7)</a></li>
1845
1846 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/05/">May (1)</a></li>
1847
1848 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/06/">June (2)</a></li>
1849
1850 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/07/">July (2)</a></li>
1851
1852 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/08/">August (2)</a></li>
1853
1854 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/09/">September (5)</a></li>
1855
1856 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/10/">October (6)</a></li>
1857
1858 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/11/">November (3)</a></li>
1859
1860 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/12/">December (5)</a></li>
1861
1862 </ul></li>
1863
1864 <li>2013
1865 <ul>
1866
1867 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/01/">January (11)</a></li>
1868
1869 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/02/">February (9)</a></li>
1870
1871 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/03/">March (9)</a></li>
1872
1873 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/04/">April (6)</a></li>
1874
1875 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/05/">May (9)</a></li>
1876
1877 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/06/">June (10)</a></li>
1878
1879 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/07/">July (7)</a></li>
1880
1881 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/08/">August (3)</a></li>
1882
1883 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/09/">September (5)</a></li>
1884
1885 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/10/">October (7)</a></li>
1886
1887 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/11/">November (9)</a></li>
1888
1889 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/12/">December (3)</a></li>
1890
1891 </ul></li>
1892
1893 <li>2012
1894 <ul>
1895
1896 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/01/">January (7)</a></li>
1897
1898 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/02/">February (10)</a></li>
1899
1900 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/03/">March (17)</a></li>
1901
1902 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/04/">April (12)</a></li>
1903
1904 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/05/">May (12)</a></li>
1905
1906 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/06/">June (20)</a></li>
1907
1908 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/07/">July (17)</a></li>
1909
1910 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/08/">August (6)</a></li>
1911
1912 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/09/">September (9)</a></li>
1913
1914 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/10/">October (17)</a></li>
1915
1916 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/11/">November (10)</a></li>
1917
1918 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/12/">December (7)</a></li>
1919
1920 </ul></li>
1921
1922 <li>2011
1923 <ul>
1924
1925 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
1926
1927 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
1928
1929 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
1930
1931 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
1932
1933 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
1934
1935 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
1936
1937 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
1938
1939 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
1940
1941 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
1942
1943 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
1944
1945 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
1946
1947 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
1948
1949 </ul></li>
1950
1951 <li>2010
1952 <ul>
1953
1954 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
1955
1956 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
1957
1958 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
1959
1960 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
1961
1962 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
1963
1964 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
1965
1966 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
1967
1968 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
1969
1970 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
1971
1972 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
1973
1974 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
1975
1976 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
1977
1978 </ul></li>
1979
1980 <li>2009
1981 <ul>
1982
1983 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
1984
1985 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
1986
1987 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
1988
1989 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
1990
1991 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
1992
1993 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
1994
1995 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
1996
1997 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
1998
1999 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
2000
2001 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
2002
2003 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
2004
2005 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
2006
2007 </ul></li>
2008
2009 <li>2008
2010 <ul>
2011
2012 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
2013
2014 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
2015
2016 </ul></li>
2017
2018 </ul>
2019
2020
2021
2022 <h2>Tags</h2>
2023 <ul>
2024
2025 <li><a href="http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (16)</a></li>
2026
2027 <li><a href="http://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
2028
2029 <li><a href="http://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
2030
2031 <li><a href="http://people.skolelinux.org/pere/blog/tags/bankid">bankid (4)</a></li>
2032
2033 <li><a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (10)</a></li>
2034
2035 <li><a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (17)</a></li>
2036
2037 <li><a href="http://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
2038
2039 <li><a href="http://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (2)</a></li>
2040
2041 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian">debian (166)</a></li>
2042
2043 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (158)</a></li>
2044
2045 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook (4)</a></li>
2046
2047 <li><a href="http://people.skolelinux.org/pere/blog/tags/digistan">digistan (10)</a></li>
2048
2049 <li><a href="http://people.skolelinux.org/pere/blog/tags/dld">dld (17)</a></li>
2050
2051 <li><a href="http://people.skolelinux.org/pere/blog/tags/docbook">docbook (25)</a></li>
2052
2053 <li><a href="http://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
2054
2055 <li><a href="http://people.skolelinux.org/pere/blog/tags/english">english (397)</a></li>
2056
2057 <li><a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
2058
2059 <li><a href="http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (14)</a></li>
2060
2061 <li><a href="http://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (33)</a></li>
2062
2063 <li><a href="http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (9)</a></li>
2064
2065 <li><a href="http://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (20)</a></li>
2066
2067 <li><a href="http://people.skolelinux.org/pere/blog/tags/h264">h264 (20)</a></li>
2068
2069 <li><a href="http://people.skolelinux.org/pere/blog/tags/intervju">intervju (42)</a></li>
2070
2071 <li><a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (16)</a></li>
2072
2073 <li><a href="http://people.skolelinux.org/pere/blog/tags/kart">kart (20)</a></li>
2074
2075 <li><a href="http://people.skolelinux.org/pere/blog/tags/kodi">kodi (4)</a></li>
2076
2077 <li><a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap (9)</a></li>
2078
2079 <li><a href="http://people.skolelinux.org/pere/blog/tags/lego">lego (4)</a></li>
2080
2081 <li><a href="http://people.skolelinux.org/pere/blog/tags/lenker">lenker (8)</a></li>
2082
2083 <li><a href="http://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd (2)</a></li>
2084
2085 <li><a href="http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
2086
2087 <li><a href="http://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (8)</a></li>
2088
2089 <li><a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (42)</a></li>
2090
2091 <li><a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software (11)</a></li>
2092
2093 <li><a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk (301)</a></li>
2094
2095 <li><a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug (192)</a></li>
2096
2097 <li><a href="http://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (34)</a></li>
2098
2099 <li><a href="http://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
2100
2101 <li><a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (73)</a></li>
2102
2103 <li><a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern (108)</a></li>
2104
2105 <li><a href="http://people.skolelinux.org/pere/blog/tags/raid">raid (2)</a></li>
2106
2107 <li><a href="http://people.skolelinux.org/pere/blog/tags/reactos">reactos (1)</a></li>
2108
2109 <li><a href="http://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
2110
2111 <li><a href="http://people.skolelinux.org/pere/blog/tags/rfid">rfid (3)</a></li>
2112
2113 <li><a href="http://people.skolelinux.org/pere/blog/tags/robot">robot (11)</a></li>
2114
2115 <li><a href="http://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
2116
2117 <li><a href="http://people.skolelinux.org/pere/blog/tags/ruter">ruter (6)</a></li>
2118
2119 <li><a href="http://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
2120
2121 <li><a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (55)</a></li>
2122
2123 <li><a href="http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
2124
2125 <li><a href="http://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (5)</a></li>
2126
2127 <li><a href="http://people.skolelinux.org/pere/blog/tags/standard">standard (58)</a></li>
2128
2129 <li><a href="http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (6)</a></li>
2130
2131 <li><a href="http://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (12)</a></li>
2132
2133 <li><a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (55)</a></li>
2134
2135 <li><a href="http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (4)</a></li>
2136
2137 <li><a href="http://people.skolelinux.org/pere/blog/tags/usenix">usenix (2)</a></li>
2138
2139 <li><a href="http://people.skolelinux.org/pere/blog/tags/valg">valg (9)</a></li>
2140
2141 <li><a href="http://people.skolelinux.org/pere/blog/tags/verkidetfri">verkidetfri (15)</a></li>
2142
2143 <li><a href="http://people.skolelinux.org/pere/blog/tags/video">video (73)</a></li>
2144
2145 <li><a href="http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>
2146
2147 <li><a href="http://people.skolelinux.org/pere/blog/tags/web">web (42)</a></li>
2148
2149 </ul>
2150
2151
2152 </div>
2153 <p style="text-align: right">
2154 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
2155 </p>
2156
2157 </body>
2158 </html>