iscan udev rules

Mit neueren Kerneln müssen die udev-Rules für iscan angepasst werden (ich habe das händisch gemacht, da für meinen Scanner keine neueren iscan-Pakete vorhanden gewesen sind … wohl immer noch nicht).

Die alten Rules (mit Myriaden an Fehlermeldungen):

$ cat /etc/udev/rules.d/60_iscan.rules~
# This file is part of the "Image Scan! for Linux" binary package (or
# generated automatically as part of its installation).  Any changes
# will be overwritten with each upgrade of the package.

ACTION!="add", GOTO="iscan_rules_end"
SUBSYSTEM!="usb_device", GOTO="iscan_rules_end"

SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0101", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0103", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0104", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0106", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0107", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0109", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="010a", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="010b", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="010c", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="010e", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="010f", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0110", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0112", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0116", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0118", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0119", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="011b", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="011c", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="011d", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="011e", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0121", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0122", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0126", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0128", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0129", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="012a", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="012b", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="012c", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="012d", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="012e", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="012f", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0801", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0802", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0805", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0806", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0807", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="080d", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="080e", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="080f", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0810", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0811", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0813", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0814", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0815", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0817", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0818", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0819", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="081a", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="081c", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="081d", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="081f", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0820", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0827", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0828", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0829", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="082a", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="082b", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="082e", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="082f", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0830", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0833", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0835", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0836", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0837", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0838", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0839", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="083a", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="083c", MODE="0666"
SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="083f", MODE="0666"

LABEL="iscan_rules_end"

Die neuen Rules:

$ cat /etc/udev/rules.d/60_iscan.rules
# This file is part of the "Image Scan! for Linux" binary package (or
# generated automatically as part of its installation).  Any changes
# will be overwritten with each upgrade of the package.

ACTION!="add", GOTO="iscan_rules_end"
SUBSYSTEM!="usb_device", GOTO="iscan_rules_end"

ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0101", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0103", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0104", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0106", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0107", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0109", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="010a", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="010b", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="010c", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="010e", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="010f", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0110", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0112", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0116", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0118", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0119", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="011b", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="011c", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="011d", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="011e", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0121", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0122", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0126", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0128", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0129", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="012a", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="012b", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="012c", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="012d", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="012e", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="012f", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0801", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0802", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0805", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0806", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0807", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="080d", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="080e", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="080f", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0810", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0811", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0813", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0814", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0815", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0817", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0818", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0819", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="081a", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="081c", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="081d", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="081f", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0820", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0827", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0828", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0829", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="082a", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="082b", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="082e", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="082f", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0830", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0833", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0835", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0836", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0837", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0838", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="0839", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="083a", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="083c", MODE="0666"
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="083f", MODE="0666"

LABEL="iscan_rules_end"

Google Earth: falsche Koordinaten

Falsche Koordinaten bei Google Earth liegen an der numerischen Lokalisation. Daher muss /usr/bin/googleearth angepasst werden (die letzten beiden Zeilen sind wichtig):

#!/bin/sh
cd /usr/lib/googleearth

# this no longer works with Google Earth 4.3, so we have to revert to using LD_LIBRARY_PATH, sorry
#exec /lib/ld-linux.so.2 --library-path /usr/lib/googleearth /usr/lib/googleearth/googleearth-bin "$@"

GOOGLE_EARTH_LD_LIBRARY_PATH=/usr/lib/googleearth
if [ ! -z "$LD_LIBRARY_PATH" ]; then
 LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${GOOGLE_EARTH_LD_LIBRARY_PATH}
else
 LD_LIBRARY_PATH=${GOOGLE_EARTH_LD_LIBRARY_PATH}
fi
export LD_LIBRARY_PATH
export LC_NUMERIC=en_US.UTF-8

Quelle:

http://www.google.com/support/forum/p/earth/thread?tid=72b851d55f188cea&hl=en

Es kann durchaus sein, dass man die QT-Bibliotheken auch gegen die installierten linken muss, dass es funktioniert. Siehe hier.

Hotswap von Soundkarten mit ALSA

Phonon ist noch nicht da, wo ich will, die Einstellungen werden  nur von Phonon-Programmen (amaroK, kaffeine et al.) übernommen, der Rest übernimmt mal die ALSA-Karte 0. Manche Player wie VLC oder SMPlayer lassen sich dazu noch exzellent konfigurieren (auch Audacity). Aber eben nicht alle (Flash im Browser) oder sind komplexer zu starten (Terminal-Programme).

Um bei Platzwechsel der Soundkarten nicht neu booten zu müssen (wäre ja etwas übertrieben), habe ich mir eine ~/asoundrc.alsaproject angelegt, die zur .asoundrc werden muss, wenn ich die Soundkarte 1 als default ansprechen will.

Meine Entscheidung für zwei Alias-Einträge in ~/.bash_aliases entschieden. Mit diesen kann ich nun hotswappen, welche Soundkarte als Karte 0 angesprochen wird.

Die .asoundrc.alsaproject (leicht bearbeitet vom Original) sieht so aus:

pcm.!default {
 type plug
 slave.pcm "dmixer"
}

pcm.dmixer  {
 type dmix
 ipc_key 1024
 slave {
 pcm "hw:1,0"
 period_time 0
 period_size 1024
 buffer_size 4096
 rate 44100
 }
 bindings {
 0 0
 1 1
 }
}

ctl.dmixer {
 type hw
 card 0
}

Die Alias-Einträge sind:

alias hw0sound='rm ~/.asoundrc'
alias hw1sound='cp ~/.asoundrc.alsaproject ~/.asoundrc'

Das funktioniert ganz zu meiner Zufriedenheit, und ich muss nicht noch einen störenden Soundserver wie Pulseaudio drüber legen, was ich eine Zeitlang gemacht habe, aber nach einem der letzten Upgrades ging das nicht mehr nach Wunsch.

ffmpeg aus dem Debian-Repo mit nicht freien Encodern

EDIT: Dieses Problem ist mit audacity 1.3.12-7.4 aus dem Multimedia-Repo gelöst.

ffmpeg aus dem Debian-Multimedia-Repo spießt sich manchmal mit Debian-Programmen (bei mir im Augenblick mit audacity, das kein ffmpeg mehr erkennt, bzw. mit vlc, welches das Abspielen von flv-Dateien verweigert).

Falls man trotzdem die volle Encoder-Palette haben will, regt ffmpeg/Debian.README dazu an, nur die geteilten Bibliotheken aus dem Multimediarepo zu installieren (libavutil*), ffmpeg plus Abhängigkeiten aus dem Debian/Main-Repo.

Das geht bei mir wunderbar, und man hat dadurch die volle Encoder-Palette (die Decoder sind auch in Debian/Main nicht beschnitten) wie die volle Debian-Kompatibilität, die oben genannten Applikationen spielen wieder klaglos mit ffmpeg (aus Debian/Main) zusammen.

Touchpad, xorg und udev in sidux

Diese Lösung ist ab xserver-xorg 1.7.6-2 veraltet, neue Konfiguration siehe hier.

Debian xserver-xorg-input-synaptics hat mit Version 1.2.1-1 die Touchpaderkennung von hal auf udev umgestellt. sidux liefert eine rudimentäre Konfiguration mit, aber erweiterte Funktionen müssen nach wie vor selbst definiert werden. Bei mir ist das eine Emulation der mittleren Maustaste rechts oben und horizontales Scrollen (für die Mausgesten).

Damit dies nach dem Start des Laptops systemweit funktioniert, habe ich die Datei /etc/udev/rules.d/65-xorg-synaptics-custom.rules angelegt. Der Inhalt ist:

ACTION!="add|change", GOTO="xorg_synaptics_custom_end"
 KERNEL!="event*", GOTO="xorg_synaptics_custom_end" 

 ENV{ID_INPUT_TOUCHPAD}!="1", GOTO="xorg_synaptics_custom_end" 

 ENV{x11_driver}="synaptics"
 ENV{x11_options.RTCornerButton}="2"
 ENV{x11_options.HorizEdgeScroll}="true" 

 LABEL="xorg_synaptics_custom_end"

Diese knappe Konfiguration setzt eine installierte udev-config-sidux voraus, welche die Basisfähigkeiten eines Touchpads konfiguriert.

Die hal-Lösung ist tot.