Howto für hotplug?

Hast Du Probleme mit Hardware, die durch die anderen Foren nicht abgedeckt werden? Schau auch in den "Tipps und Tricks"-Bereich.
Antworten
Benutzeravatar
jack herer
Beiträge: 94
Registriert: 28.07.2003 19:48:17

Howto für hotplug?

Beitrag von jack herer » 16.06.2004 20:55:32

Hallo,

kennt irgendwer ein gutes howto für hotplug?
Mein Problem derzeit ist, dass ich einige USB-Geräte habe und die - je nachdem wann ich ein Gerät einstecke - diese über unterschiedliche devices angesprochen werden.
Ausserdem möchte ich Scripte automatisch starten sobald ein Gerät eingesteckt wird.

Benutzeravatar
AK-Palme
Beiträge: 411
Registriert: 25.05.2004 15:38:30
Kontaktdaten:

Beitrag von AK-Palme » 16.06.2004 21:07:09

durch http://www.debianforum.de/wiki/?action= ... nd=hotplug kannst du dir vielleicht was ableiten, was script betrifft....

Benutzeravatar
jack herer
Beiträge: 94
Registriert: 28.07.2003 19:48:17

Beitrag von jack herer » 16.06.2004 22:47:46

Danke für den Tipp, aber irgendwie hilft es mir nicht so richtig weiter...
Ich würde gerne wissen wie ich denn jetzt ein Script für eine Aktion bei einem Ereignis eines bestimmten Gerätes starte.
Ich benutze den Kernel 2.6. Wenn ich ein Gerät einstecke, wird /sbin/hotplug ausgeführt. Das Script ruft dann /etc/hotplug/usb.agent auf und exportiert einige Variablen, z.B.:

Code: Alles auswählen

DEVPATH: /devices/pci0000:00/0000:00:1d.1/usb3/3-1/3-1:1.0
ACTION: add
PRODUCT: 8341/2000/100
TYPE: 0/0/0
INTERFACE: 8/6/80
und der Eintrag für das device wird im /sys Dateisystem angelegt. Aber wie gehts denn jetzt weiter, wie kann ich z.B. ein Script ansprechen, dass mir den Stick mountet?
Bin dankbar für jeden Tipp :D

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 17.06.2004 10:36:31

Das Device Naming ist Kernel Sache, da hotplug leider nichts zu melden. In Kernel 2.4 gibt es keine wirklich funktionierende Lösung, mit Kernel 2.6 kannst Du einfach "apt-get install udev" machen und das dann konfigurieren...

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
jack herer
Beiträge: 94
Registriert: 28.07.2003 19:48:17

Beitrag von jack herer » 17.06.2004 23:32:32

Hmmh, irgendwie komm ich hier nicht so richtig weiter...
udev hab ich jetzt eingerichtet, und mein Stick wird als /dev/stick eingehängt. Das hilft mir bei hotplug aber nicht so richtig weiter. Für hotplug hab ich in die usb.usermap einen Eintrag hinzugefügt, so dass für den Stick ein Script ausgeführt wird. Ich kann mir z.B. Umgebungsvariablen in eine Datei schreiben lassen. Versuche ich aber den Stick hier zu mounten, passiert nix. Durch die /etc/fstab wird /dev/stick nach /mnt/stick gemountet. mount /mnt/stick funktioniert auch, dieser Aufrufe im Script aber nicht:

Code: Alles auswählen

#!/bin/sh

sleep 5
exec `/bin/mount /mnt/stick`
Was mache ich falsch?

Benutzeravatar
jack herer
Beiträge: 94
Registriert: 28.07.2003 19:48:17

Beitrag von jack herer » 19.06.2004 00:43:28

Nur so zur Info, ich habs :D

Das mounten mit hotplug hat nicht hingehauen, da das hotplug script ausgeführt wurde bevor udev das device unter /dev angelegt hat. Das mounten über hotplug ist wohl nur sinnvoll wenn man udev nicht benutzt, thx pdreker...
Stattdessen kann man aber scripte in /etc/dev.d anlegen. Diese werden von udev ausgeführt wenn ein usb-Gerät eingesteckt/abgezogen wird. Die von hotplug exportierten Variablen sind dann in den Scripten vorhanden.

Uiuiui, schwere Geburt :?

Benutzeravatar
Deblix
Beiträge: 585
Registriert: 23.05.2003 17:33:48
Wohnort: Bremen

Beitrag von Deblix » 01.07.2004 22:08:28

Interessante Postings hier.

Wolle auch bei mir nun hotplug einrichten und habe auch udev installiert (alles auf SID), jedoch...
1. Bei einem Reboot läuft kdm nicht mehr (nur wenn ich udev stoppe, läuft auch der x-server)
2. Was muss man genau an udev konfigurieren? Worauf muss ich achten (habe Einzelplatzsystem, bin also einziger User (arbeite nicht als root) )
3. Was für Scripte sollte ich schreiben, um USB-Stick und iPod (auch USB) einzuhängen? Beide laufen mit vfat.

Wäre über eine ausführliche Antwort sehr dankbar.

glasen
Beiträge: 30
Registriert: 28.06.2004 13:16:03
Wohnort: Adelsheim

Beitrag von glasen » 02.07.2004 00:14:43

Das Problem mit kdm ist mir neu. Hat Anfangs das Problem das kein Terminal unter X11 funktionierte. Das lies sich einfach lösen indem ich meinen User zu der Gruppe "tty" hinzugefügt habe.

Meinen USB-Stick binde ich ganz normal über Mount ein. Der Stick bekommt von udev den Eintrag /dev/usb/stick zugewiesen.

Was für Skripte sollen eigentlich ausgeführt werden?

udev installiert übrigens ein ziemlich praktisches Tool : udevruler
Mit diesem kannst du dir ganz einfach die passenden Einträge erstellen. Du musst nur die Geräte angeschlossen haben. Die Regeln die das Programm dann ausspuckt kannst du einfach die die udev.rules Datei eintragen.

Wenn eine gute Anleitung zu udev suchst, findest du sie hier :

http://www.athemis.de/content/linux/udev_primer_de.html

Benutzeravatar
Deblix
Beiträge: 585
Registriert: 23.05.2003 17:33:48
Wohnort: Bremen

Beitrag von Deblix » 02.07.2004 18:19:38

Ich kriege das echt nicht gebacken...
kdm startet wieder, nachdem ich einen neuen nvidia-Triber installiert habe :D , aber...
ich stecke iPod und USB-Stick an und wähle den Stick in udevruler aus. Dann die wichtigsten Daten markieren (BUS="USB", SYSFS{manufacturer}="Sony", ...) und auf "OK" klicken, sich die Zusammenfassung der Ergebnisse ansehen und bestätigen.

Doch wo ist nun diese Regel?

Ich sehe es doch richtig, dass wenn hotplug ein Gerät mit den gewählten Daten erkennt, dieses in den /dev-Baum als festes Block-Device hinzugefügt. Somit kann man dann einen festen fstab-Eintrag machen und das mounten. Klingt logisch.

Muss ich vielleicht BUS="scsi" anwählen, da es ja typischerweise als SCSI-Gerät eingebunden wird?

Benutzeravatar
jack herer
Beiträge: 94
Registriert: 28.07.2003 19:48:17

Beitrag von jack herer » 02.07.2004 20:54:30

Hallo,

udevruler kannte ich noch garnicht, sieht aber interessant aus. Ich beschreib hier einfach mal kurz wie ich meinen USB-Stick automatisch mounte wenn er angesteckt wird...

1. das USB-Gerät anstecken und ein paar eindeutige Daten ermitteln. Im syslog oder irgendwo unter /sys werden unter anderem Hersteller und Modell ausgegeben.

Der Eintrag in /var/log/messages bei mir wenn ich den Stick anstecke:

Code: Alles auswählen

Jul  2 20:20:16 mobile kernel: usb 2-1: new full speed USB device using address 2
Jul  2 20:20:16 mobile usb.agent[4026]:      usb-storage: already loaded
Jul  2 20:20:16 mobile kernel: scsi1 : SCSI emulation for USB Mass Storage devices
Jul  2 20:20:16 mobile kernel:   Vendor: MUSIC     Model: DISK              Rev: 1.00
Jul  2 20:20:16 mobile kernel:   Type:   Direct-Access                      ANSI SCSI revision: 02
Jul  2 20:20:16 mobile kernel: SCSI device sdb: 256001 512-byte hdwr sectors (131 MB)
Jul  2 20:20:16 mobile kernel: sdb: assuming Write Enabled
Jul  2 20:20:16 mobile kernel:  sdb: sdb1
Jul  2 20:20:16 mobile kernel: Attached scsi removable disk sdb at scsi1, channel 0, id 0, lun 0
Jul  2 20:20:17 mobile scsi.agent[4064]: disk at /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/host1/1:0:0:0
2. Hieraus suchst Du Dir Identifikatoren für den Eintrag in der Datei: /etc/udev/rules.d/udev.rules aus. Diese Datei wird jedesmal durchsucht wenn ein neues Gerät angesteckt wird. Die entsprechende Regel sieht bei mir dann so aus:

Code: Alles auswählen

BUS="scsi", SYSFS{vendor}="MUSIC", SYSFS{model}="DISK", MODE="0660", GROUP="choreis", NAME="stick"
Mit dem Tag NAME bestimmst Du den Name unter dem Du anschliessend das Gerät unter /dev finden solltest.

3. Sofern das device korrekt angelegt wurde, wird das Script: /etc/dev.d/default/default.dev ausgeführt (auf die richtigen Rechte achten, root=rx) hier kannst Du jetzt weitere Aktionen durchführen. Bei mir siehts so aus:

Code: Alles auswählen

#!/bin/sh -e

# new device added, do something with it.
if [ "$ACTION" == "add" ] ; then
	logger -t dev.d "New device added ($*)[`env`]"
  
  # usb-stick
  if [ "$DEVNAME" == "/dev/stick" ]; then
    /etc/dev.d/default/stick_add.pl
  fi

  # usb-disk
  if [ "$DEVNAME" == "/dev/usbhd" ]; then
    /etc/dev.d/default/usbhd_add.pl
  fi

  # camera
  if [ "$DEVNAME" == "/dev/camera" ]; then
    /etc/dev.d/default/camera_add.pl
  fi

fi


# remove action
if [ "$ACTION" == "remove" ] ; then
	logger -t dev.d "Device removed ($*)[`env`]"
  
  # usb-stick
  if [ "$DEVNAME" == "/dev/stick" ]; then
    umount /mnt/stick
  fi

  # flashcard reader
  if [ "$DEVNAME" == "/dev/flash" ]; then
    umount /mnt/flash
  fi

  # usb-disk
  if [ "$DEVNAME" == "/dev/usbhd" ]; then
    umount /mnt/media
  fi

  # camera
  if [ "$DEVNAME" == "/dev/camera" ]; then
    umount /mnt/camera
  fi
fi

4. Das perlscript /etc/dev.d/default/stick_add.pl macht momentan nicht mehr als den stich zu mounten, aber da kann man sich ja noch einiges ausdenken...

Hier ist nochmal ein Link zu einer guten Anleitung, allerdings für Slackware: http://shtrom.ssji.net/skb/udev.html#1.7.3

Ich hoffe das hilft Dir weiter, ist echt ne dolle Sache...

Benutzeravatar
Deblix
Beiträge: 585
Registriert: 23.05.2003 17:33:48
Wohnort: Bremen

Beitrag von Deblix » 02.07.2004 21:29:53

Danke für die Anleitung. Der Fehler saß mal wieder vor dem Bildschirm :lol:
udevruler zeigt nur den entsprechenden Eintrag für die udev.rules, trägt diese jedoch nicht ein (hätte mal den Bildschirm lesen sollen).
Mein iPod hat jetzt ein festes Device und das mounten/unmounten wird dann keine Schwierigkeit mehr.

Antworten