libusb_open - LIBUSB_ERROR_ACCESS

Benutzeravatar
Garfield
Beiträge: 225
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.4 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Wenn es nicht mit der hwdb.bin klappt, kann man die JSON von der Seite https://sebastianlang.net/software/usb-ids-api/ nehmen.
Gruß Garfield

Benutzeravatar
Garfield
Beiträge: 225
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.4 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Die Liste von Sebastian Lang ist kürzer als die von lsusb. lsusb kennt meine laptopinterne Kamera,
Dateianhänge
USB-IDs.zip
(388.17 KiB) 334-mal heruntergeladen
Bildschirmfoto vom 2025-11-17 15-02-55.png
Bildschirmfoto vom 2025-11-17 15-02-55.png (18.53 KiB) 819 mal betrachtet
Bildschirmfoto vom 2025-11-17 14-59-48.png
Bildschirmfoto vom 2025-11-17 14-59-48.png (18.27 KiB) 819 mal betrachtet
Gruß Garfield

Benutzeravatar
Garfield
Beiträge: 225
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.4 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Damit schliesse ich mit dem Thema vorerst ab.
Dateianhänge
LibUsb.zip
(361.36 KiB) 122-mal heruntergeladen
Bildschirmfoto vom 2025-11-19 21-11-52.png
Bildschirmfoto vom 2025-11-19 21-11-52.png (40.67 KiB) 718 mal betrachtet
Gruß Garfield

Benutzeravatar
Garfield
Beiträge: 225
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.4 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Irgendwie lässt es mich doch nicht in Ruhe. Auf https://github.com/hansiglaser/pas-libu ... libusb-1.0 gibt es ein paar Consolentestprogramme, von denen bei mir nur eines funktioniert:
.../pas-libusb-libusb-1.0/src/examples$ ./test1library
Using libusb(x) v1.0.27.11882
Found 4 devices:
Bus 2 Device 1: ID 1D6B:0003, port: 0, Speed: unknown (5)
Bus 1 Device 2: ID 04F2:B685, port: 8, port path from HCD: 0, Speed: 480 Mbit/s (USB HighSpeed)
Bus 1 Device 3: ID 8087:0029, port: 14, port path from HCD: 0, Speed: 12 Mbit/s (USB FullSpeed)
Bus 1 Device 1: ID 1D6B:0002, port: 0, Speed: 480 Mbit/s (USB HighSpeed)
Das GUI-Example funktioniert auch:
Dateianhänge
Bildschirmfoto vom 2025-11-25 08-44-58.png
Bildschirmfoto vom 2025-11-25 08-44-58.png (46.84 KiB) 607 mal betrachtet
Gruß Garfield

Benutzeravatar
AlterPascaler
Beiträge: 95
Registriert: Mo 26. Jun 2023, 18:56
OS, Lazarus, FPC: Linux, Lazarus, Free Pascal
CPU-Target: xxBit
Wohnort: Deutschland, NRW

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von AlterPascaler »

Hallo,
vor langer Zeit habe ich mich auch mit LibUsb unter Linux beschäftigt. Damit du auf dein Usb Device im User Mode zugreifen kannst, kannst du eine UDEV Rule anlegen.

Hier https://gitlab.com/FpTuxe/tblibusb findest du den Link zu meiner Lib. Unter "examples" findest du zwei Beispiele die Mouse Events anzeigen. Aber Achtung! Verwende dafür eine zweite Mouse, damit du dein LapTop noch bedienen kannst.

Die Lib habe ich bist Heute noch im Einsatz.

Aber ich muss dich warnen, USB ist viel komplizierten für den Anwender als Netzwerk oder RS232. Mal schnell ist nicht!
Was hast du den vor?

VG
AlterPascaler
Viele Grüße
AlterPascaler

Benutzeravatar
Garfield
Beiträge: 225
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.4 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Vielen Dank.

Im Moment möchte ich auf das An- und Abstecken eines USB-Scanners reagieren und den Scanner erkennen.
Gruß Garfield

Benutzeravatar
AlterPascaler
Beiträge: 95
Registriert: Mo 26. Jun 2023, 18:56
OS, Lazarus, FPC: Linux, Lazarus, Free Pascal
CPU-Target: xxBit
Wohnort: Deutschland, NRW

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von AlterPascaler »

Musst du das über Lazarus erkennen, oder würde es auch über das Betriebssystem gehen?
Ich denke dabei an udev action

Gruß
AP
Viele Grüße
AlterPascaler

Mathias
Beiträge: 7137
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Mathias »

Garfield hat geschrieben: Fr 28. Nov 2025, 23:20 Vielen Dank.

Im Moment möchte ich auf das An- und Abstecken eines USB-Scanners reagieren und den Scanner erkennen.
Kannst du nicht in einem Timer ein libusb_handle_events_timeout_completed einbauen ?

Oder schau mal hier nach, was es sonst noch gibt: https://libusb.sourceforge.io/api-1.0/l ... async.html
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Garfield
Beiträge: 225
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.4 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

AlterPascaler hat geschrieben: Sa 29. Nov 2025, 18:27 Musst du das über Lazarus erkennen, oder würde es auch über das Betriebssystem gehen?
Ich denke dabei an udev action
Das Grundproblem ist das: Sane - Scannerliste aktualisieren. Die LibSane bekommt es scheinbar nicht mit, wenn sich die Scannerliste ändert. Hier ging es erstmal darum, die Geräte zu erkennen. Scheint aber nicht ganz der richtige Weg zu sein. In die libudev hab ich auch reingesehen, aber da finde ich mich nicht durch.
Mathias hat geschrieben: So 30. Nov 2025, 08:50Kannst du nicht in einem Timer ein libusb_handle_events_timeout_completed einbauen ?
Irgendwie dachte ich, dass es mit Device hotplug event notification gehen sollte.

Jetzt musste ich erstmal feststellen, dass mein Programm nicht richtig funktioniert.
Dateianhänge
Bildschirmfoto vom 2025-11-30 13-02-23.png
Bildschirmfoto vom 2025-11-30 13-02-23.png (67.62 KiB) 376 mal betrachtet
Gruß Garfield

Mathias
Beiträge: 7137
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Mathias »

Ich wollte einen Versuch mit sane_get_devices in einem Timer starten, nur habe ich festgestellt, das der Scann etwa 5s braucht, dies würde das Programm voll blockieren.
Meine Idee, mache doch einen Optionen Dialog, bei dem mit sane_get_devices eine neue Liste eingelesen werden kann, und anschliessend kann der User einen Scanner aussuchen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
AlterPascaler
Beiträge: 95
Registriert: Mo 26. Jun 2023, 18:56
OS, Lazarus, FPC: Linux, Lazarus, Free Pascal
CPU-Target: xxBit
Wohnort: Deutschland, NRW

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von AlterPascaler »

Irgendwie dachte ich, dass es mit Device hotplug event notification gehen sollte.
Ich habe da schon mal mit gearbeitet. Ich suche die morgen den Code- Schnipsel raus.

Mal schauen wie meine Ordnung auf der Platte ist :lol:

Gruß
AP
Viele Grüße
AlterPascaler

Benutzeravatar
Garfield
Beiträge: 225
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.4 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Ich habe gefunden, warum der Scanner nicht angezeigt wird. Das Programm bekommt das Handle zum Scanner ohne root-Rechte und ich habe idProdukt anstelle iProdukt zum Holen des Strings genommen. Für den Scanner braucht man die usb-ids.json nicht.
Mathias hat geschrieben: So 30. Nov 2025, 13:48 Ich wollte einen Versuch mit sane_get_devices in einem Timer starten, nur habe ich festgestellt, das der Scann etwa 5s braucht, dies würde das Programm voll blockieren.
Da blockiert einiges. Wenn ich mich richtig erinner muss man den Scanvorgang in einem Thread nehmen damit man ihn abbrechen kann.
AlterPascaler hat geschrieben: So 30. Nov 2025, 13:50Ich habe da schon mal mit gearbeitet. Ich suche die morgen den Code- Schnipsel raus.
Das wäre nett. Es wäre natürlich schöner, wenn das in der libsane drin wäre. Von wegen "der ausgewählteScanner ist nicht mehr verfügbar."
AlterPascaler hat geschrieben: So 30. Nov 2025, 13:50Mal schauen wie meine Ordnung auf der Platte ist :lol:
Windows hat mir meine "Ordnung" vor fünf Jahren zerstört. Wenn die guten Dateien durch korrupte neuere überschrieben werden, nützt das beste Backup nichts.
Dateianhänge
LibUsb.zip
(362.97 KiB) 297-mal heruntergeladen
Bildschirmfoto vom 2025-11-30 14-44-34.png
Bildschirmfoto vom 2025-11-30 14-44-34.png (90.8 KiB) 366 mal betrachtet
Gruß Garfield

Benutzeravatar
Garfield
Beiträge: 225
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.4 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Ich habe keine neue udev-rule angelegt.

Code: Alles auswählen

Nov 30 19:54:55 fran kernel: usb 1-6: new high-speed USB device number 11 using xhci_hcd
Nov 30 19:54:56 fran kernel: usb 1-6: New USB device found, idVendor=04a9, idProduct=1912, bcdDevice= 1.00
Nov 30 19:54:56 fran kernel: usb 1-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Nov 30 19:54:56 fran kernel: usb 1-6: Product: LiDE 400
Nov 30 19:54:56 fran kernel: usb 1-6: Manufacturer: Canon
Nov 30 19:54:56 fran kernel: usb 1-6: SerialNumber: 4AB6E1
Nov 30 19:54:56 fran systemd[3313]: Reached target printer.target - Printer.
Nov 30 19:54:56 fran systemd[1]: Reached target printer.target - Printer Support.
Nov 30 19:54:56 fran systemd[1]: Started ipp-usb.service - Daemon for IPP over USB printer support
Mit der udev-rule kommt das:

Code: Alles auswählen

Nov 30 20:01:41 fran kernel: usb 1-6: new high-speed USB device number 12 using xhci_hcd
Nov 30 20:01:41 fran kernel: usb 1-6: New USB device found, idVendor=04a9, idProduct=1912, bcdDevice= 1.00
Nov 30 20:01:41 fran kernel: usb 1-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Nov 30 20:01:41 fran kernel: usb 1-6: Product: LiDE 400
Nov 30 20:01:41 fran kernel: usb 1-6: Manufacturer: Canon
Nov 30 20:01:41 fran kernel: usb 1-6: SerialNumber: 4AB6E1
Nov 30 20:01:41 fran root[3303947]: UsbTest
Nov 30 20:01:41 fran systemd[3313]: Reached target printer.target - Printer.
Nov 30 20:01:41 fran systemd[1]: Reached target printer.target - Printer Support.
Nov 30 20:01:41 fran root[3303960]: UsbTest
Nov 30 20:01:41 fran root[3303962]: UsbTest
Nov 30 20:01:41 fran root[3303963]: UsbTest
Nov 30 20:01:41 fran systemd[1]: Started ipp-usb.service - Daemon for IPP over USB printer support.
Nov 30 20:01:41 fran root[3303967]: UsbTest
Das einzige was falsch ist, ist das da Printer steht obwohl es Scanner ist.
Gruß Garfield

Benutzeravatar
Garfield
Beiträge: 225
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.4 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Irgendwas habe ich falsch gemacht. Hatte mir gestern und vorgestern die ShowMouseEvents angesehen und ausgeführt. Anschliessend hatte ich zwei var/log/syslog-Dateien mit zusammen über 150 GB. :shock:
Gruß Garfield

Benutzeravatar
AlterPascaler
Beiträge: 95
Registriert: Mo 26. Jun 2023, 18:56
OS, Lazarus, FPC: Linux, Lazarus, Free Pascal
CPU-Target: xxBit
Wohnort: Deutschland, NRW

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von AlterPascaler »

Irgendwas habe ich falsch gemacht. ...
Hast du das mit der https://gitlab.com/FpTuxe/tblibusb gemacht?
Hast du eine UDEV Rule Datei angelegt? Wenn nein dann geht das nur mit sudo.

Für USB- Hotplug habe ich dir eine kleine Klasse geschrieben. Unter "examples/sync/hotplug/" findest du die Beispielte.
Die Programme laufen im User- Space. Für Hotplug und DeviceDescriptoren brauchst du unter Linux kein sudo.

Damit das funktioniert, mußt du dir die https://gitlab.com/FpTuxe/tblibusb nochmal runterladen, ich habe sie gerade aktualisiert.

Hier ein Beispiel.
Du mußt nur die "MY_VID_DEVICE" und "MY_PID_DEVICE" mit deine ScannerIds austauschen.

Code: Alles auswählen

program UsbHotplugEasy;
{
  File: UsbHotplugEasy.lpr
  CreateDate: 01.12.2025
  ModifyDate: 01.12.2025
  Version: 0.1.0.0
  Author: Thomas Bulla
  See the file COPYING.TXT, included in this distribution,
  for details about the copyright.
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  For more info to LibUsb see https://libusb.info/
}
{$mode objfpc}{$H+}
uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Classes,
  crt,
  sysutils,
  tb_usb1_0_base, tb_usb_hotplug
  { you can add units after this };
type
  { THotplugMessage }
  THotplugMessage = class
    procedure PluggedLcl(Sender: TObject; Vid, PId: Word);
    procedure UnpluggedLcl(Sender: TObject; Vid, PId: Word);
  end;
const
  {$HINT Please adjust these values!!}
  MY_VID_DEVICE = $17EF;
  MY_PID_DEVICE = $608D;
var
  UsbIf: IbUsb1_0Base;
  Hotplug: TbUsbHotplug;
  Message: THotplugMessage;
{ THotplugMessage }
procedure THotplugMessage.PluggedLcl(Sender: TObject; VId, PId: Word);
begin
  WriteLn(Format('Plugged, VID=%.04X, PID=%.04X', [VId, PId]));
end;
procedure THotplugMessage.UnpluggedLcl(Sender: TObject; VId, PId: Word);
begin
  WriteLn(Format('Unlugged, VID=%.04X, PID=%.04X', [VId, PId]));
end;
procedure Init;
begin
  Message:= THotplugMessage.Create;
  UsbIf:= TIbUsb1_0Base.Create;
  Hotplug:= TbUsbHotplug.Create(UsbIf);
  Hotplug.OnPluggedLcl:= @Message.PluggedLcl;
  Hotplug.OnUnpluggedLcl:= @Message.UnpluggedLcl;
  Hotplug.Register(MY_VID_DEVICE, MY_PID_DEVICE);
end;
procedure Fin;
begin
  Hotplug.Free;
  Message.Free;
end;
begin
  try
    Init;
    WriteLn('Please press any key to exit');
    while not KeyPressed do begin
      CheckSynchronize;
      sleep(50);
    end;
  finally
    Fin;
  end;
  WriteLn('Bye');
end.
Die Beispiele habe ich unter Linux 64Bit getestet. Zum testen habe ich einfach eine zweite Maus genommen.

Gedacht habe ich mir, das du zuerst wartest bis das Hotplug- Event vom Scanner kommt, und dann die Scanner Lib initialisierst.

Grüße
AP
Viele Grüße
AlterPascaler

Antworten